Python轮子:拼音转换神器~pypinyin

原文链接: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

扩展阅读:

  1. https://pypinyin.readthedocs.io/zh-cn/master/index.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注