Преобразование китайских иероглифов в пиньинь. Его можно использовать для фонетической записи, сортировки и поиска китайских иероглифов (перевод на русский язык).
Первоначальная версия кода относится к реализации 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
, как думает большинство людей, и существует пиньинь, в котором нет ни инициалов, ни финала. Подробности см. в разделе «Часто задаваемые вопросы» ниже.Инструменты командной строки:
$ 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, ü (yu) не являются начальными согласными.
В начальном стиле согласных (ИНИЦИАЛЫ) китайские иероглифы, такие как «Дождь», «Я» и «Юань», возвращают пустые строки, поскольку согласно «Китайской схеме Пиньинь» 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=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
. Подробности смотрите в документации.
Дополнительные сведения о часто задаваемых вопросах см. в разделе часто задаваемых вопросов документации.