超簡單 Python 漢字拼音轉(zhuǎn)換工具
將漢字轉(zhuǎn)為拼音,可以用于批量漢字注音、文字排序、拼音檢索文字等常見場景。
現(xiàn)在互聯(lián)網(wǎng)上有許多拼音轉(zhuǎn)換工具,基于Python的開源模塊也不少,今天給大家介紹一個功能特性最多的模塊: pypinyin ,它支持以下特性:
1. 根據(jù)詞組智能匹配最正確的拼音。
2. 支持多音字。
3. 簡單的繁體支持, 注音支持。
4. 支持多種不同拼音/注音風(fēng)格。
5. 命令行工具一鍵轉(zhuǎn)化
1.準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南。
請選擇以下任一種方式輸入命令安裝依賴:
1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install pypinyin2.基本使用
最普通的拼音轉(zhuǎn)化方法如下:
# Python實用寶典
from pypinyin import pinyin, lazy_pinyin, Style
pinyin('中心')
# [['zhōng'], ['xīn']]識別多音字:
# Python實用寶典
from pypinyin import pinyin, lazy_pinyin, Style
pinyin('中心', heteronym=True) # 啟用多音字模式
# [['zhōng', 'zhòng'], ['xīn']]設(shè)置輸出風(fēng)格,只識別首字母:
# Python實用寶典
from pypinyin import pinyin, lazy_pinyin, Style
pinyin('中心', style=Style.FIRST_LETTER) # 設(shè)置拼音風(fēng)格
# [['z'], ['x']]修改音調(diào)輸出位置,在相應(yīng)字母的后面顯示音調(diào),或者拼音的最后顯示音調(diào):
# Python實用寶典
from pypinyin import pinyin, lazy_pinyin, Style
# TONE2 在相應(yīng)字母的后面顯示音調(diào)
pinyin('中心', style=Style.TONE2, heteronym=True)
# [['zho1ng', 'zho4ng'], ['xi1n']]
# TONE3 拼音的最后顯示音調(diào)
pinyin('中心', style=Style.TONE3, heteronym=True)
# [['zhong1', 'zhong4'], ['xin1']]不考慮多音字的情況:
# Python實用寶典
from pypinyin import pinyin, lazy_pinyin, Style
lazy_pinyin('中心') # 不考慮多音字的情況
# ['zhong', 'xin']
不使用v來代替ü:
# Python實用寶典
from pypinyin import pinyin, lazy_pinyin, Style
lazy_pinyin('戰(zhàn)略', v_to_u=True) # 不使用 v 表示 ü
# ['zhan', 'lüe']標(biāo)記輕聲:
# Python實用寶典
from pypinyin import pinyin, lazy_pinyin, Style
# 使用 5 標(biāo)識輕聲
lazy_pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True)
# ['yi1', 'shang5']使用命令行一鍵識別拼音:
# Python實用寶典
python -m pypinyin 音樂
# yīn yuè3.高級使用
自定義拼音顯示風(fēng)格
我們可以通過 register() 來實現(xiàn)自定義拼音風(fēng)格的需求:
from pypinyin import lazy_pinyin
from pypinyin.style import register
@register('kiss')
def kiss(pinyin, **kwargs):
return '?? {0}'.format(pinyin)
lazy_pinyin('么么', style='kiss')
# ['?? me', '?? me']可以見到,通過定義一個 kiss 函數(shù),使用 register 裝飾器,我們生成了一個新的 style,這個 style 可以直接被用于拼音的轉(zhuǎn)換參數(shù),非常方便。
另外,所有模塊自帶的 style 及其效果如下:
@unique
class Style(IntEnum):
"""拼音風(fēng)格"""
#: 普通風(fēng)格,不帶聲調(diào)。如:中國 -> ``zhong guo``
NORMAL = 0
#: 標(biāo)準(zhǔn)聲調(diào)風(fēng)格,拼音聲調(diào)在韻母第一個字母上(默認風(fēng)格)。如:中國 -> ``zhōng guó``
TONE = 1
#: 聲調(diào)風(fēng)格2,即拼音聲調(diào)在各個韻母之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``zho1ng guo2``
TONE2 = 2
#: 聲調(diào)風(fēng)格3,即拼音聲調(diào)在各個拼音之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``zhong1 guo2``
TONE3 = 8
#: 聲母風(fēng)格,只返回各個拼音的聲母部分(注:有的拼音沒有聲母,詳見 `#27`_)。如:中國 -> ``zh g``
INITIALS = 3
#: 首字母風(fēng)格,只返回拼音的首字母部分。如:中國 -> ``z g``
FIRST_LETTER = 4
#: 韻母風(fēng)格,只返回各個拼音的韻母部分,不帶聲調(diào)。如:中國 -> ``ong uo``
FINALS = 5
#: 標(biāo)準(zhǔn)韻母風(fēng)格,帶聲調(diào),聲調(diào)在韻母第一個字母上。如:中國 -> ``ōng uó``
FINALS_TONE = 6
#: 韻母風(fēng)格2,帶聲調(diào),聲調(diào)在各個韻母之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``o1ng uo2``
FINALS_TONE2 = 7
#: 韻母風(fēng)格3,帶聲調(diào),聲調(diào)在各個拼音之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``ong1 uo2``
FINALS_TONE3 = 9
#: 注音風(fēng)格,帶聲調(diào),陰平(第一聲)不標(biāo)。如:中國 -> ``ㄓㄨㄥ ㄍㄨㄛˊ``
BOPOMOFO = 10
#: 注音風(fēng)格,僅首字母。如:中國 -> ``ㄓ ㄍ``
BOPOMOFO_FIRST = 11
#: 漢語拼音與俄語字母對照風(fēng)格,聲調(diào)在各個拼音之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``чжун1 го2``
CYRILLIC = 12
#: 漢語拼音與俄語字母對照風(fēng)格,僅首字母。如:中國 -> ``ч г``
CYRILLIC_FIRST = 13處理特殊字符
默認情況下,對于文字中的特殊字符會不做任何處理,原樣返回:
pinyin('你好☆☆')
# [['nǐ'], ['hǎo'], ['☆☆']]不過如果你想對這些特殊字符做處理也是可以的,比如:
ignore : 忽略該字符
pinyin('你好☆☆', errors='ignore')
# [['nǐ'], ['hǎo']]errors : 替換為去掉 \u 的 unicode 編碼:pinyin('你好☆☆', errors='replace')
# [['nǐ'], ['hǎo'], ['26062606']]callable 對象 : 提供一個回調(diào)函數(shù),接受無拼音字符(串)作為參數(shù), 支持的返回值類型: unicode或 list或 None:pinyin('你好☆☆', errors=lambda x: 'star')
# [['nǐ'], ['hǎo'], ['star']]
pinyin('你好☆☆', errors=lambda x: None)
# [['nǐ'], ['hǎo']]返回值類型為 list時,會自動 expend list:
pinyin('你好☆☆', errors=lambda x: ['star' for _ in x])
# [['nǐ'], ['hǎo'], ['star'], ['star']]
# 指定多音字
pinyin('你好☆☆', heteronym=True, errors=lambda x: [['star', '☆'] for _ in x])
# [['nǐ'], ['hǎo'], ['star', '☆'], ['star', '☆']]自定義拼音庫
如果你覺得模塊輸出效果不合你意,或者你想做特殊處理,可以通過 load_single_dict() 或 load_phrases_dict() 以自定義拼音庫的方式修正結(jié)果:
from pypinyin import lazy_pinyin, load_phrases_dict, Style, load_single_dict
hans = '桔子'
lazy_pinyin(hans, style=Style.TONE2)
# ['jie2', 'zi3']
load_phrases_dict({'桔子': [['jú'], ['zǐ']]}) # 增加 "桔子" 詞組
lazy_pinyin(hans, style=Style.TONE2)
# ['ju2', 'zi3']
hans = '還沒'
lazy_pinyin(hans, style=Style.TONE2)
# ['hua2n', 'me2i']
load_single_dict({ord('還'): 'hái,huán'}) # 調(diào)整 "還" 字的拼音順序
lazy_pinyin('還沒', style=Style.TONE2)
# ['ha2i', 'me2i']4. 最后
提醒一下大家我們的免費抽書活動還在繼續(xù)哦,大家可以參與下方免費抽獎活動,抽三本《Python數(shù)據(jù)分析從小白到專家》,即抽即出結(jié)果,沒有套路!
分享給朋友們一起抽獎還能獲得額外的抽獎機會,中獎概率大概在 0.5% 哦:
我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關(guān)注Python實用寶典。
有任何問題,可以在公眾號后臺回復(fù):加群,回答相應(yīng)紅字驗證信息,進入互助群詢問。
原創(chuàng)不易,希望你能在下面點個贊和在看支持我繼續(xù)創(chuàng)作,謝謝!
點擊下方閱讀原文可獲得更好的閱讀體驗
Python實用寶典 (pythondict.com)
不只是一個寶典
歡迎關(guān)注公眾號:Python實用寶典
