中国語の文字をピンインに変換します。漢字のふりがな、並べ替え、検索(ロシア語翻訳)に利用できます。
コードの初期バージョンは、hotoo/pinyin の実装を参照しています。
コンテンツ
pip install pypinyin
> >> from pypinyin import pinyin , lazy_pinyin , Style
> >> pinyin ( '中心' ) # or pinyin(['中心']),参数值为列表时表示输入的是已分词后的数据
[[ 'zhōng' ], [ 'xīn' ]]
> >> pinyin ( '中心' , heteronym = True ) # 启用多音字模式
[[ 'zhōng' , 'zhòng' ], [ 'xīn' ]]
> >> pinyin ( '中心' , style = Style . FIRST_LETTER ) # 设置拼音风格
[[ 'z' ], [ 'x' ]]
> >> pinyin ( '中心' , style = Style . TONE2 , heteronym = True )
[[ 'zho1ng' , 'zho4ng' ], [ 'xi1n' ]]
> >> pinyin ( '中心' , style = Style . TONE3 , heteronym = True )
[[ 'zhong1' , 'zhong4' ], [ 'xin1' ]]
> >> pinyin ( '中心' , style = Style . BOPOMOFO ) # 注音风格
[[ 'ㄓㄨㄥ' ], [ 'ㄒㄧㄣ' ]]
> >> lazy_pinyin ( '威妥玛拼音' , style = Style . WADEGILES )
[ 'wei' , "t'o" , 'ma' , "p'in" , 'yin' ]
> >> lazy_pinyin ( '中心' ) # 不考虑多音字的情况
[ 'zhong' , 'xin' ]
> >> lazy_pinyin ( '战略' , v_to_u = True ) # 不使用 v 表示 ü
[ 'zhan' , 'lüe' ]
# 使用 5 标识轻声
> >> lazy_pinyin ( '衣裳' , style = Style . TONE3 , neutral_tone_with_five = True )
[ 'yi1' , 'shang5' ]
# 变调 nǐ hǎo -> ní hǎo
> >> lazy_pinyin ( '你好' , style = Style . TONE2 , tone_sandhi = True )
[ 'ni2' , 'ha3o' ]
注意事項:
neutral_tone_with_five=True
でオンにすると、ソフトトーンを識別するために5
使用できます)。v
使用してü
を表します (パラメータv_to_u=True
でオンにすると、 v
の代わりにü
使用できます)。嗯
のピンインは一般的に考えられているen
ではなく、頭文字も語尾も持たないピンインもあります。詳細については、以下の FAQ の説明を参照してください。コマンドラインツール:
$ pypinyin 音乐
yīn yuè
$ python -m pypinyin.tools.toneconvert to-tone ' zhong4 xin1 '
zhòng xīn
詳細なドキュメントについては、https://pypinyin.readthedocs.io/ を参照してください。
プロジェクトのコード開発に関する質問については、開発ドキュメントを参照してください。
ピンインの精度は、次の方法で改善できます。
>> from pypinyin import load_phrases_dict , load_single_dict
>> load_phrases_dict ({ '桔子' : [[ 'jú' ], [ 'zǐ' ]]}) # 增加 "桔子" 词组
>> load_single_dict ({ ord ( '还' ): 'hái,huán' }) # 调整 "还" 字的拼音顺序或覆盖默认拼音
# 使用 phrase-pinyin-data 项目中 cc_cedict.txt 文件中的拼音数据优化结果
> >> from pypinyin_dict . phrase_pinyin_data import cc_cedict
> >> cc_cedict . load ()
# 使用 pinyin-data 项目中 kXHC1983.txt 文件中的拼音数据优化结果
> >> from pypinyin_dict . pinyin_data import kxhc1983
> >> kxhc1983 . load ()
> >> # 使用其他分词模块分词,比如 jieba 之类,
>> > #或者基于 phrases_dict.py 里的词语数据使用其他分词算法分词
>> > words = list ( jieba . cut ( '每股24.67美元的确定性协议' ))
> >> pinyin ( words )
> >> from pypinyin import Style , pinyin
> >> pinyin ( '下雨天' , style = Style . INITIALS )
[[ 'x' ], [ '' ], [ 't' ]]
なぜなら、「中国ピンイン体系」によれば、y、w、ü(ユ)は頭子音ではないからです。
頭文字子音スタイル (INITIALS) では、「Rain」、「I」、「Yuan」などの中国語の文字は空の文字列を返します。これは、「中国語ピンイン スキーム」によれば、y、w、ü (yu) が頭文字ではないためです。子音、および一部の特定の語尾 頭の子音がない場合、y または w が追加され、ü にも独自の特定の規則があります。 ——@hotoo
これが問題を引き起こすと思われる場合は、頭子音のない一部の漢字にも注意してください (「ああ」、「空腹」、「プレス」、「アン」など)。 この時点で必要になる可能性があるのは、最初の文字スタイル (FIRST_LETTER) です。 ——@hotoo
参考:hotoo/ピンイン#57、#22、#27、#44
この動作が望ましくないと思われ、単に y を最初の子音として扱いたい場合は、 strict=False
指定すると、期待を満たす可能性があります。
> >> from pypinyin import Style , pinyin
> >> pinyin ( '下雨天' , style = Style . INITIALS )
[[ 'x' ], [ '' ], [ 't' ]]
> >> pinyin ( '下雨天' , style = Style . INITIALS , strict = False )
[[ 'x' ], [ 'y' ], [ 't' ]]
詳細については、strict パラメーターの影響を参照してください。
はい、 strict=True
モードでは、頭音も語尾も持たないピンインはほとんどありません。 たとえば、次のピンイン (中国語の文字嗯
、呒
、呣
、唔
から):
ń ńg ňg ƹg ň ƹ m̄ ḿ m̀
嗯
のすべてのピンインには頭子音も語尾もなく、呣
のデフォルトのピンインには頭子音も語尾もないことに注意することが特に重要です。 詳細については、#109 #259 #284 を参照してください。
pypinyin.contrib.tone_convert
モジュールが提供する補助関数を使用して、標準ピンインを変換し、さまざまなスタイルのピンインを取得できます。 たとえば、 zhōng
zhong
に変換するか、ピンインの最初の子音または最後の子音データを取得します。
> >> from pypinyin . contrib . tone_convert import to_normal , to_tone , to_initials , to_finals
> >> to_normal ( 'zhōng' )
'zhong'
> >> to_tone ( 'zhong1' )
'zhōng'
> >> to_initials ( 'zhōng' )
'zh'
> >> to_finals ( 'zhōng' )
'ong'
ピンイン変換の補助関数の詳細については、 pypinyin.contrib.tone_convert
モジュールのドキュメントを参照してください。
ピンインの精度を特に気にしない場合は、環境変数PYPINYIN_NO_PHRASES
およびPYPINYIN_NO_DICT_COPY
設定することでメモリを節約できます。 詳細についてはドキュメントを参照してください
FAQ の詳細については、ドキュメントの FAQ セクションを参照してください。