超簡單 Python 漢字拼音轉換工具
將漢字轉爲拼音,可以用於批量漢字注音、文字排序、拼音檢索文字等常見場景。
現在互聯網上有許多拼音轉換工具,基於 Python 的開源模塊也不少,今天給大家介紹一個功能特性最多的模塊: pypinyin,它支持以下特性:
-
- 根據詞組智能匹配最正確的拼音。
-
- 支持多音字。
-
- 簡單的繁體支持, 注音支持。
-
- 支持多種不同拼音 / 注音風格。
-
- 命令行工具一鍵轉化
1. 準備
開始之前,你要確保 Python 和 pip 已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細 Python 安裝指南 進行安裝。
(可選 1) 如果你用 Python 的目的是數據分析,可以直接安裝 Anaconda:Python 數據分析與挖掘好幫手—Anaconda,它內置了 Python 和 pip.
(可選 2) 此外,推薦大家用 VSCode 編輯器,它有許多的優點:Python 編程的最好搭檔—VSCode 詳細指南。
請選擇以下任一種方式輸入命令安裝依賴:
- Windows 環境 打開 Cmd (開始 - 運行 - CMD)。
- MacOS 環境 打開 Terminal (command + 空格輸入 Terminal)。
- 如果你用的是 VSCode 編輯器 或 Pycharm,可以直接使用界面下方的 Terminal.
pip install pypinyin
2. 基本使用
最普通的拼音轉化方法如下:
# 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']]
修改音調輸出位置,在相應字母的後面顯示音調,或者拼音的最後顯示音調:
# Python實用寶典
from pypinyin import pinyin, lazy_pinyin, Style
# TONE2 在相應字母的後面顯示音調
pinyin('中心', style=Style.TONE2, heteronym=True)
# [['zho1ng', 'zho4ng'], ['xi1n']]
# TONE3 拼音的最後顯示音調
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('戰略', 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() 來實現自定義拼音風格的需求:
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 函數,使用 register 裝飾器,我們生成了一個新的 style,這個 style 可以直接被用於拼音的轉換參數,非常方便。
另外,所有模塊自帶的 style 及其效果如下:
@unique
class Style(IntEnum):
"""拼音風格"""
#: 普通風格,不帶聲調。如:中國 -> ``zhong guo``
NORMAL = 0
#: 標準聲調風格,拼音聲調在韻母第一個字母上(默認風格)。如:中國 -> ``zhōng guó``
TONE = 1
#: 聲調風格2,即拼音聲調在各個韻母之後,用數字 [1-4] 進行表示。如:中國 -> ``zho1ng guo2``
TONE2 = 2
#: 聲調風格3,即拼音聲調在各個拼音之後,用數字 [1-4] 進行表示。如:中國 -> ``zhong1 guo2``
TONE3 = 8
#: 聲母風格,只返回各個拼音的聲母部分(注:有的拼音沒有聲母,詳見 `#27`_)。如:中國 -> ``zh g``
INITIALS = 3
#: 首字母風格,只返回拼音的首字母部分。如:中國 -> ``z g``
FIRST_LETTER = 4
#: 韻母風格,只返回各個拼音的韻母部分,不帶聲調。如:中國 -> ``ong uo``
FINALS = 5
#: 標準韻母風格,帶聲調,聲調在韻母第一個字母上。如:中國 -> ``ōng uó``
FINALS_TONE = 6
#: 韻母風格2,帶聲調,聲調在各個韻母之後,用數字 [1-4] 進行表示。如:中國 -> ``o1ng uo2``
FINALS_TONE2 = 7
#: 韻母風格3,帶聲調,聲調在各個拼音之後,用數字 [1-4] 進行表示。如:中國 -> ``ong1 uo2``
FINALS_TONE3 = 9
#: 注音風格,帶聲調,陰平(第一聲)不標。如:中國 -> ``ㄓㄨㄥ ㄍㄨㄛˊ``
BOPOMOFO = 10
#: 注音風格,僅首字母。如:中國 -> ``ㄓ ㄍ``
BOPOMOFO_FIRST = 11
#: 漢語拼音與俄語字母對照風格,聲調在各個拼音之後,用數字 [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 對象
: 提供一個回調函數,接受無拼音字符 (串) 作爲參數, 支持的返回值類型: 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'}) # 調整 "還" 字的拼音順序
lazy_pinyin('還沒', style=Style.TONE2)
# ['ha2i', 'me2i']
我們的文章到此就結束啦,如果你喜歡今天的 Python 實戰教程,請持續關注 Python 實用寶典。
Python 實用寶典 (pythondict.com)
不只是一個寶典
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/j1Y3yp1zr5OMJvCbOXgjlA