超簡單 Python 漢字拼音轉換工具

將漢字轉爲拼音,可以用於批量漢字注音、文字排序、拼音檢索文字等常見場景。

現在互聯網上有許多拼音轉換工具,基於 Python 的開源模塊也不少,今天給大家介紹一個功能特性最多的模塊: pypinyin,它支持以下特性:

1. 準備

開始之前,你要確保 Python 和 pip 已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細 Python 安裝指南 進行安裝。

(可選 1) 如果你用 Python 的目的是數據分析,可以直接安裝 Anaconda:Python 數據分析與挖掘好幫手—Anaconda,它內置了 Python 和 pip.

(可選 2) 此外,推薦大家用 VSCode 編輯器,它有許多的優點:Python 編程的最好搭檔—VSCode 詳細指南

請選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環境 打開 Cmd (開始 - 運行 - CMD)。
  2. MacOS 環境 打開 Terminal (command + 空格輸入 Terminal)。
  3. 如果你用的是 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