原文链接:http://www.juzicode.com/python-module-pypinyin
今天给大家介绍的是汉字转拼音工具pypinyin,它广泛用于中文处理和自然语言处理。它支持多种拼音风格比如TONE、FIRST_LETTER等;还支持多音字处理,当输入的汉字为多音字时,如果设置了heteronym为True将会启用多音字模式。
安装和导入
安装仍然是老规矩,pip安装:
pip install pypinyin
安装后可以通过pip list查看版本,桔子菌当前安装的是0.53.0版本:
pip list
......
pypinyin 0.53.0
......
用法入门
最简单的用法便是使用pinyin()函数,入参为要转换的汉字,即可实现转换:
#juzicode.com/VX公众号:juzicode
from pypinyin import *
yin = pinyin('桔子菌')
print('yin:', yin)
运行结果:
yin: [['jú'], ['zi'], ['jūn']]
从返回结果可以看到,每个汉字返回一个list,包含了这个汉字的拼音,而且是带音标的。
多音字
如果设置了heteronym=True时,可以实现多音字的输出:
#juzicode.com/VX公众号:juzicode
from pypinyin import *
yin = pinyin('中心', heteronym=True)
print('yin:', yin)
yin = pinyin('和', heteronym=True)
print('yin:', yin)
运行结果:
yin: [['zhōng', 'zhòng'], ['xīn']]
yin: [['hé', 'hè', 'hú', 'huó', 'huò', 'huo']]
注音风格
指定style参数时可以指明拼音的风格,比如是否带音调、音调位置等,下面是一个例子:
#juzicode.com/VX公众号:juzicode
from pypinyin import *
yin = pinyin('桔子菌', style=Style.TONE) # 普通
print('yin:', yin)
yin = pinyin('桔子菌', style=Style.TONE2) # 标音韵母后标数字音调
print('yin:', yin)
yin = pinyin('桔子菌', style=Style.TONE3) # 整个拼音的最后标数字音调
print('yin:', yin)
yin = pinyin('桔子菌', style=Style.FIRST_LETTER) # 声母
print('yin:', yin)
yin = pinyin('桔子菌', style=Style.BOPOMOFO) # 注音符号
print('yin:', yin)
运行结果:
yin: [['jú'], ['zi'], ['jūn']]
yin: [['ju2'], ['zi'], ['ju1n']]
yin: [['ju2'], ['zi'], ['jun1']]
yin: [['j'], ['z'], ['j']]
yin: [['ㄐㄩˊ'], ['ㄗ˙'], ['ㄐㄩㄣ']]
通过pypinyin的源码,我们可以找到更多的风格类型:
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
#: 威妥玛拼音/韦氏拼音/威式拼音风格,无声调
WADEGILES = 14
ü
音的处理
通过设置参数v_to_u=True,可以开启 ü
代替 v
功能。
#juzicode.com/VX公众号:juzicode
from pypinyin import *
yin = pinyin('吕洞宾吃桔子', style=NORMAL, v_to_u=False)
print('yin:', yin)
yin = pinyin('吕洞宾吃桔子', style=NORMAL, v_to_u=True)
print('yin:', yin)
yin = pinyin('吕洞宾吃桔子', style=Style.TONE, v_to_u=False)
print('yin:', yin)
运行结果:
yin: [['lv'], ['dong'], ['bin'], ['chi'], ['ju'], ['zi']]
yin: [['lü'], ['dong'], ['bin'], ['chi'], ['ju'], ['zi']]
yin: [['lǚ'], ['dòng'], ['bīn'], ['chī'], ['jú'], ['zi']]
从输出结果可以看到在使用无声调风格时,非jqx下的 “v“ 将会替代为 “ü“ 。从源码的注释也可以看到相应的解释:
:param v_to_u: 无声调相关拼音风格下的结果是否使用 ``ü`` 代替原来的 ``v``
当为 False 时结果中将使用 ``v`` 表示 ``ü``
:type v_to_u: bool
命令行工具
pypinyin还提供了命令行工具转换:
E:\juzicode\拼音转换>pypinyin 桔子菌
jú zi jūn
扩展阅读:
- https://pypinyin.readthedocs.io/zh-cn/master/index.html