将汉字转为拼音,可以用于批量汉字注音、文字排序、拼音检索文字等常见场景。

现在互联网上有许多拼音转换工具,基于Python的开源模块也不少,今天给大家介绍一个功能特性最多的模块: ​ ​pypinyin​​​ ​,它支持以下特性:


  • 1. 根据词组智能匹配最正确的拼音。
  • 2. 支持多音字。
  • 3. 简单的繁体支持, 注音支持。
  • 4. 支持多种不同拼音/注音风格。
  • 5. 命令行工具一键转化


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']



4. 最后


提醒一下大家我们的免费抽书活动还在继续哦,大家可以参与下方免费抽奖活动,抽三本《Python数据分析从小白到专家》,​即抽即出结果​,没有套路!


分享给朋友们一起抽奖还能获得额外的抽奖机会,中奖概率大概在​ ​0.5%​​​ ​哦:

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

原创不易,希望你能在下面点个赞支持我继续创作,谢谢!

Python实用宝典 (pythondict.com)

不只是一个宝典

欢迎关注公众号:Python实用宝典

超简单 Python 汉字拼音转换工具_首字母