基于Python實現(xiàn)簡單的漢字拼音轉(zhuǎn)換工具
將漢字轉(zhuǎn)為拼音,可以用于批量漢字注音、文字排序、拼音檢索文字等常見場景。
現(xiàn)在互聯(lián)網(wǎng)上有許多拼音轉(zhuǎn)換工具,基于Python的開源模塊也不少,今天給大家介紹一個功能特性最多的模塊: pypinyin
,它支持以下特性:
- 1. 根據(jù)詞組智能匹配最正確的拼音。
- 2. 支持多音字。
- 3. 簡單的繁體支持, 注音支持。
- 4. 支持多種不同拼音/注音風格。
- 5. 命令行工具一鍵轉(zhuǎn)化
1.準備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點
請選擇以下任一種方式輸入命令安裝依賴:
1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install pypinyin
2.基本使用
最普通的拼音轉(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']]
設置輸出風格,只識別首字母:
# Python實用寶典 from?pypinyin?import?pinyin, lazy_pinyin, Style pinyin('中心', style=Style.FIRST_LETTER)?# 設置拼音風格 # [['z'], ['x']]
修改音調(diào)輸出位置,在相應字母的后面顯示音調(diào),或者拼音的最后顯示音調(diào):
# Python實用寶典 from?pypinyin?import?pinyin, lazy_pinyin, Style # TONE2 在相應字母的后面顯示音調(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']
標記輕聲:
# Python實用寶典 from?pypinyin?import?pinyin, lazy_pinyin, Style # 使用 5 標識輕聲 lazy_pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True) # ['yi1', 'shang5']
使用命令行一鍵識別拼音:
# Python實用寶典 python -m pypinyin 音樂 # yīn yuè
3.高級使用
自定義拼音顯示風格
我們可以通過 register()
來實現(xiàn)自定義拼音風格的需求:
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): ????"""拼音風格""" ????#: 普通風格,不帶聲調(diào)。如:中國 -> ``zhong guo`` ????NORMAL =?0 ????#: 標準聲調(diào)風格,拼音聲調(diào)在韻母第一個字母上(默認風格)。如:中國 -> ``zhōng guó`` ????TONE =?1 ????#: 聲調(diào)風格2,即拼音聲調(diào)在各個韻母之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``zho1ng guo2`` ????TONE2 =?2 ????#: 聲調(diào)風格3,即拼音聲調(diào)在各個拼音之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``zhong1 guo2`` ????TONE3 =?8 ????#: 聲母風格,只返回各個拼音的聲母部分(注:有的拼音沒有聲母,詳見 `#27`_)。如:中國 -> ``zh g`` ????INITIALS =?3 ????#: 首字母風格,只返回拼音的首字母部分。如:中國 -> ``z g`` ????FIRST_LETTER =?4 ????#: 韻母風格,只返回各個拼音的韻母部分,不帶聲調(diào)。如:中國 -> ``ong uo`` ????FINALS =?5 ????#: 標準韻母風格,帶聲調(diào),聲調(diào)在韻母第一個字母上。如:中國 -> ``ōng uó`` ????FINALS_TONE =?6 ????#: 韻母風格2,帶聲調(diào),聲調(diào)在各個韻母之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``o1ng uo2`` ????FINALS_TONE2 =?7 ????#: 韻母風格3,帶聲調(diào),聲調(diào)在各個拼音之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``ong1 uo2`` ????FINALS_TONE3 =?9 ????#: 注音風格,帶聲調(diào),陰平(第一聲)不標。如:中國 -> ``ㄓㄨㄥ ㄍㄨㄛˊ`` ????BOPOMOFO =?10 ????#: 注音風格,僅首字母。如:中國 -> ``ㄓ ㄍ`` ????BOPOMOFO_FIRST =?11 ????#: 漢語拼音與俄語字母對照風格,聲調(diào)在各個拼音之后,用數(shù)字 [1-4] 進行表示。如:中國 -> ``чжун1 го2`` ????CYRILLIC =?12 ????#: 漢語拼音與俄語字母對照風格,僅首字母。如:中國 -> ``ч г`` ????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()
以自定義拼音庫的方式修正結果:
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']
到此這篇關于基于Python實現(xiàn)簡單的漢字拼音轉(zhuǎn)換工具的文章就介紹到這了,更多相關Python漢字拼音轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決usageerror: line magic function "
這篇文章主要介紹了解決usageerror: line magic function "%%time" not found問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01解決python3 整數(shù)數(shù)組轉(zhuǎn)bytes的效率問題
這篇文章主要介紹了解決python3 整數(shù)數(shù)組轉(zhuǎn)bytes的效率問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Windows下將Python文件打包成.EXE可執(zhí)行文件的方法
這篇文章主要介紹了Windows下將Python文件打包成.EXE可執(zhí)行文件的方法,需要的朋友可以參考下2018-08-08