基于Python實(shí)現(xiàn)簡(jiǎn)單的漢字拼音轉(zhuǎn)換工具
將漢字轉(zhuǎn)為拼音,可以用于批量漢字注音、文字排序、拼音檢索文字等常見(jiàn)場(chǎng)景。
現(xiàn)在互聯(lián)網(wǎng)上有許多拼音轉(zhuǎn)換工具,基于Python的開(kāi)源模塊也不少,今天給大家介紹一個(gè)功能特性最多的模塊: pypinyin ,它支持以下特性:
- 1. 根據(jù)詞組智能匹配最正確的拼音。
- 2. 支持多音字。
- 3. 簡(jiǎn)單的繁體支持, 注音支持。
- 4. 支持多種不同拼音/注音風(fēng)格。
- 5. 命令行工具一鍵轉(zhuǎn)化
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn)
請(qǐng)選擇以下任一種方式輸入命令安裝依賴:
1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install pypinyin
2.基本使用
最普通的拼音轉(zhuǎn)化方法如下:
# Python實(shí)用寶典
from?pypinyin?import?pinyin, lazy_pinyin, Style
pinyin('中心')
# [['zhōng'], ['xīn']]識(shí)別多音字:
# Python實(shí)用寶典
from?pypinyin?import?pinyin, lazy_pinyin, Style
pinyin('中心', heteronym=True)?# 啟用多音字模式
# [['zhōng', 'zhòng'], ['xīn']]設(shè)置輸出風(fēng)格,只識(shí)別首字母:
# Python實(shí)用寶典
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實(shí)用寶典
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實(shí)用寶典
from?pypinyin?import?pinyin, lazy_pinyin, Style
lazy_pinyin('中心')?# 不考慮多音字的情況
# ['zhong', 'xin']不使用v來(lái)代替ü:
# Python實(shí)用寶典
from?pypinyin?import?pinyin, lazy_pinyin, Style
lazy_pinyin('戰(zhàn)略', v_to_u=True)?# 不使用 v 表示 ü
# ['zhan', 'lüe']標(biāo)記輕聲:
# Python實(shí)用寶典
from?pypinyin?import?pinyin, lazy_pinyin, Style
# 使用 5 標(biāo)識(shí)輕聲
lazy_pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True)
# ['yi1', 'shang5']使用命令行一鍵識(shí)別拼音:
# Python實(shí)用寶典 python -m pypinyin 音樂(lè) # yīn yuè
3.高級(jí)使用
自定義拼音顯示風(fēng)格
我們可以通過(guò) register() 來(lái)實(shí)現(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']可以見(jiàn)到,通過(guò)定義一個(gè) kiss 函數(shù),使用 register 裝飾器,我們生成了一個(gè)新的 style,這個(gè) style 可以直接被用于拼音的轉(zhuǎn)換參數(shù),非常方便。
另外,所有模塊自帶的 style 及其效果如下:
@unique class?Style(IntEnum): ????"""拼音風(fēng)格""" ????#: 普通風(fēng)格,不帶聲調(diào)。如:中國(guó) -> ``zhong guo`` ????NORMAL =?0 ????#: 標(biāo)準(zhǔn)聲調(diào)風(fēng)格,拼音聲調(diào)在韻母第一個(gè)字母上(默認(rèn)風(fēng)格)。如:中國(guó) -> ``zhōng guó`` ????TONE =?1 ????#: 聲調(diào)風(fēng)格2,即拼音聲調(diào)在各個(gè)韻母之后,用數(shù)字 [1-4] 進(jìn)行表示。如:中國(guó) -> ``zho1ng guo2`` ????TONE2 =?2 ????#: 聲調(diào)風(fēng)格3,即拼音聲調(diào)在各個(gè)拼音之后,用數(shù)字 [1-4] 進(jìn)行表示。如:中國(guó) -> ``zhong1 guo2`` ????TONE3 =?8 ????#: 聲母風(fēng)格,只返回各個(gè)拼音的聲母部分(注:有的拼音沒(méi)有聲母,詳見(jiàn) `#27`_)。如:中國(guó) -> ``zh g`` ????INITIALS =?3 ????#: 首字母風(fēng)格,只返回拼音的首字母部分。如:中國(guó) -> ``z g`` ????FIRST_LETTER =?4 ????#: 韻母風(fēng)格,只返回各個(gè)拼音的韻母部分,不帶聲調(diào)。如:中國(guó) -> ``ong uo`` ????FINALS =?5 ????#: 標(biāo)準(zhǔn)韻母風(fēng)格,帶聲調(diào),聲調(diào)在韻母第一個(gè)字母上。如:中國(guó) -> ``ōng uó`` ????FINALS_TONE =?6 ????#: 韻母風(fēng)格2,帶聲調(diào),聲調(diào)在各個(gè)韻母之后,用數(shù)字 [1-4] 進(jìn)行表示。如:中國(guó) -> ``o1ng uo2`` ????FINALS_TONE2 =?7 ????#: 韻母風(fēng)格3,帶聲調(diào),聲調(diào)在各個(gè)拼音之后,用數(shù)字 [1-4] 進(jìn)行表示。如:中國(guó) -> ``ong1 uo2`` ????FINALS_TONE3 =?9 ????#: 注音風(fēng)格,帶聲調(diào),陰平(第一聲)不標(biāo)。如:中國(guó) -> ``ㄓㄨㄥ ㄍㄨㄛˊ`` ????BOPOMOFO =?10 ????#: 注音風(fēng)格,僅首字母。如:中國(guó) -> ``ㄓ ㄍ`` ????BOPOMOFO_FIRST =?11 ????#: 漢語(yǔ)拼音與俄語(yǔ)字母對(duì)照風(fēng)格,聲調(diào)在各個(gè)拼音之后,用數(shù)字 [1-4] 進(jìn)行表示。如:中國(guó) -> ``чжун1 го2`` ????CYRILLIC =?12 ????#: 漢語(yǔ)拼音與俄語(yǔ)字母對(duì)照風(fēng)格,僅首字母。如:中國(guó) -> ``ч г`` ????CYRILLIC_FIRST =?13
處理特殊字符
默認(rèn)情況下,對(duì)于文字中的特殊字符會(huì)不做任何處理,原樣返回:
pinyin('你好☆☆')
# [['nǐ'], ['hǎo'], ['☆☆']]不過(guò)如果你想對(duì)這些特殊字符做處理也是可以的,比如:
ignore : 忽略該字符
pinyin('你好☆☆', errors='ignore')
# [['nǐ'], ['hǎo']]errors : 替換為去掉 \u 的 unicode 編碼:
pinyin('你好☆☆', errors='replace')
# [['nǐ'], ['hǎo'], ['26062606']]callable 對(duì)象 : 提供一個(gè)回調(diào)函數(shù),接受無(wú)拼音字符(串)作為參數(shù), 支持的返回值類(lèi)型: unicode或 list或 None:
pinyin('你好☆☆', errors=lambda?x:?'star')
# [['nǐ'], ['hǎo'], ['star']]
pinyin('你好☆☆', errors=lambda?x:?None)
# [['nǐ'], ['hǎo']]返回值類(lèi)型為 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ù)
如果你覺(jué)得模塊輸出效果不合你意,或者你想做特殊處理,可以通過(guò) 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 =?'還沒(méi)'
lazy_pinyin(hans, style=Style.TONE2)
# ['hua2n', 'me2i']
load_single_dict({ord('還'):?'hái,huán'})?# 調(diào)整 "還" 字的拼音順序
lazy_pinyin('還沒(méi)', style=Style.TONE2)
# ['ha2i', 'me2i']到此這篇關(guān)于基于Python實(shí)現(xiàn)簡(jiǎn)單的漢字拼音轉(zhuǎn)換工具的文章就介紹到這了,更多相關(guān)Python漢字拼音轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python pypinyin庫(kù)實(shí)現(xiàn)漢字轉(zhuǎn)拼音的全面使用指南
- Python漢字轉(zhuǎn)拼音pypinyin庫(kù)、輸出excel的xlwt庫(kù)
- Python中pinyin庫(kù)實(shí)現(xiàn)漢字轉(zhuǎn)換為拼音
- Python pypinyin注音庫(kù)輕松絲滑實(shí)現(xiàn)漢字轉(zhuǎn)換成拼音
- 教你使用Python pypinyin庫(kù)實(shí)現(xiàn)漢字轉(zhuǎn)拼音
- 利用python實(shí)現(xiàn)漢字轉(zhuǎn)拼音的2種方法
- 基于Python+PyQt5實(shí)現(xiàn)漢字轉(zhuǎn)拼音的智能轉(zhuǎn)換工具
相關(guān)文章
Python中使用實(shí)現(xiàn)輸出哈沙德數(shù)的多種方法小結(jié)
哈沙德數(shù)(Harshad?Number),又稱(chēng)Niven數(shù),是指一個(gè)自然數(shù),它可以被它的各位數(shù)字之和整除,本文將探討如何使用多種不同的方法來(lái)判斷一個(gè)數(shù)字是否是哈沙德數(shù),感興趣的可以了解下2024-01-01
python腳本內(nèi)運(yùn)行l(wèi)inux命令的方法
這篇文章主要介紹了python腳本內(nèi)運(yùn)行l(wèi)inux命令的方法,實(shí)例分析了Python基于subprocess模塊操作Linux命令的相關(guān)技巧,需要的朋友可以參考下2015-07-07
Python持續(xù)監(jiān)聽(tīng)文件變化代碼實(shí)例
這篇文章主要介紹了Python持續(xù)監(jiān)聽(tīng)文件變化代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
使用Python腳本在Linux下實(shí)現(xiàn)部分Bash Shell的教程
這篇文章主要介紹了使用Python腳本在Linux下實(shí)現(xiàn)部分Bash Shell的教程,包括一些簡(jiǎn)單的輸入輸出和郵件功能,需要的朋友可以參考下2015-04-04
調(diào)整Jupyter notebook的啟動(dòng)目錄操作
這篇文章主要介紹了調(diào)整Jupyter notebook的啟動(dòng)目錄操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Python函數(shù)調(diào)用追蹤實(shí)現(xiàn)代碼
這篇文章主要介紹了Python函數(shù)調(diào)用追蹤實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
基于python select.select模塊通信的實(shí)例講解
下面小編就為大家?guī)?lái)一篇基于python select.select模塊通信的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
python和websocket構(gòu)建實(shí)時(shí)日志跟蹤器的步驟
這篇文章主要介紹了python和websocket構(gòu)建實(shí)時(shí)日志跟蹤器的步驟,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04

