超簡(jiǎn)單 Python 漢字拼音轉(zhuǎn)換工具
將漢字轉(zhuǎn)為拼音,可以用于批量漢字注音、文字排序、拼音檢索文字等常見場(chǎng)景。
現(xiàn)在互聯(lián)網(wǎng)上有許多拼音轉(zhuǎn)換工具,基于Python的開源模塊也不少,今天給大家介紹一個(gè)功能特性最多的模塊: pypinyin ,它支持以下特性:
- 根據(jù)詞組智能匹配最正確的拼音。
- 支持多音字。
- 簡(jiǎn)單的繁體支持, 注音支持。
- 支持多種不同拼音/注音風(fēng)格。
- 命令行工具一鍵轉(zhuǎn)化
1.準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南。
請(qǐng)選擇以下任一種方式輸入命令安裝依賴:
- Windows 環(huán)境 打開 Cmd (開始-運(yùn)行-CMD)。
- MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install pypinyin
2.基本使用
最普通的拼音轉(zhuǎn)化方法如下:
pypinyin pinyin, lazy_pinyin, Style
pinyin()
識(shí)別多音字:
pypinyin pinyin, lazy_pinyin, Style
pinyin(, heteronym=)
設(shè)置輸出風(fēng)格,只識(shí)別首字母:
pypinyin pinyin, lazy_pinyin, Style
pinyin(, style=Style.FIRST_LETTER)
修改音調(diào)輸出位置,在相應(yīng)字母的后面顯示音調(diào),或者拼音的最后顯示音調(diào):
pypinyin pinyin, lazy_pinyin, Style
pinyin(, style=Style.TONE2, heteronym=)
pinyin(, style=Style.TONE3, heteronym=)
不考慮多音字的情況:
pypinyin pinyin, lazy_pinyin, Style
lazy_pinyin()
不使用v來(lái)代替ü:
pypinyin pinyin, lazy_pinyin, Style
lazy_pinyin(, v_to_u=)
標(biāo)記輕聲:
pypinyin pinyin, lazy_pinyin, Style
lazy_pinyin(, style=Style.TONE3, neutral_tone_with_five=)
使用命令行一鍵識(shí)別拼音:
python -m pypinyin 音樂
3.高級(jí)使用
自定義拼音顯示風(fēng)格
我們可以通過 register() 來(lái)實(shí)現(xiàn)自定義拼音風(fēng)格的需求:
pypinyin lazy_pinyin
pypinyin.style register
:
.format(pinyin)
lazy_pinyin(, style=)
可以見到,通過定義一個(gè) kiss 函數(shù),使用 register 裝飾器,我們生成了一個(gè)新的 style,這個(gè) style 可以直接被用于拼音的轉(zhuǎn)換參數(shù),非常方便。
另外,所有模塊自帶的 style 及其效果如下:
:
NORMAL =
TONE =
TONE2 =
TONE3 =
INITIALS =
FIRST_LETTER =
FINALS =
FINALS_TONE =
FINALS_TONE2 =
FINALS_TONE3 =
BOPOMOFO =
BOPOMOFO_FIRST =
CYRILLIC =
CYRILLIC_FIRST =
處理特殊字符
默認(rèn)情況下,對(duì)于文字中的特殊字符會(huì)不做任何處理,原樣返回:
pinyin()
不過如果你想對(duì)這些特殊字符做處理也是可以的,比如:
ignore : 忽略該字符
pinyin(, errors=)
errors? : 替換為去掉 \u 的 unicode 編碼:
pinyin(, errors=)
callable 對(duì)象? : 提供一個(gè)回調(diào)函數(shù),接受無(wú)拼音字符(串)作為參數(shù), 支持的返回值類型: unicode?或 list?或 None:
pinyin('你好☆☆', errors=lambda x: 'star')
# [['nǐ'], ['hǎo'], ['star']]
pinyin('你好☆☆', errors=lambda x: None)
# [['nǐ'], ['hǎo']]
返回值類型為 list時(shí),會(huì)自動(dòng) 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', '☆']]
自定義拼音庫(kù)
如果你覺得模塊輸出效果不合你意,或者你想做特殊處理,可以通過 load_single_dict()? 或 load_phrases_dict() 以自定義拼音庫(kù)的方式修正結(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']