本文最后更新于:2024年1月14日 晚上

本文记录使用 Python pypinyin 库获取中文声调拼音的方法。

pypinyin

将汉字转为拼音。可以用于汉字注音、排序、检索 。

特性

  • 根据词组智能匹配最正确的拼音。
  • 支持多音字。
  • 简单的繁体支持,注音支持,威妥玛拼音支持。
  • 支持多种不同拼音/注音风格。

相关地址

安装

1
pip install pypinyin

使用

引入库

1
2
import pypinyin
from pypinyin import pinyin

基础用法

pinyin 方法输入中文字符,可以自动识别多音字音调。

1
2
3
4
pinyin('他办事从不草率,效率一向很高')

-->
[['tā'], ['bàn'], ['shì'], ['cóng'], ['bù'], ['cǎo'], ['shuài'], [','], ['xiào'], ['lǜ'], ['yí'], ['xiàng'], ['hěn'], ['gāo']]

多音字

pinyin 方法中加入参数 heteronym=True 识别多音字

1
2
3
4
pinyin('冯',heteronym=True)

-->
[['féng', 'píng']]

生成一维嵌套列表

lazy_pinyin 方法可以直接输出一维列表

1
2
3
4
pypinyin.lazy_pinyin('我收集的材料散失了,散文没法写了')

-->
['wo', 'shou', 'ji', 'de', 'cai', 'liao', 'san', 'shi', 'le', ',', 'san', 'wen', 'mei', 'fa', 'xie', 'le']

音调风格

可以通过 style 参数控制输出拼音格式,常用的风格有下面这14种。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#: 普通风格,不带声调。如: 中国 -> ``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

示例:

1
2
3
4
pinyin('我收集的材料散失了,散文没法写了', style=pypinyin.STYLE_TONE3)

-->
[['wo3'], ['shou1'], ['ji2'], ['de'], ['cai2'], ['liao4'], ['san4'], ['shi1'], ['le'], [','], ['san3'], ['wen2'], ['mei2'], ['fa3'], ['xie3'], ['le']]

轻音

轻音默认不做声调标识,如果需要额外标注轻音为5,需要加入参数 neutral_tone_with_five=True

1
2
3
4
lazy_pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True)

-->
['yi1', 'shang5']

自定义拼音

如果对拼音返回的结果不满意可以自定义词语明确拼音内容,例如:

1
2
3
4
print(pypinyin.pinyin('又见苍岚'))

-->
[['yòu'], ['jiàn'], ['cāng'], ['lán']]

我想改 这个子的拼音,我就自定义一个字典,用 load_phrases_dict 方法加载进去:

1
2
personalized_dict = {'又见苍岚':  [['yòu'], ['xiàn'], ['cāng'], ['lán']]}
pypinyin.load_phrases_dict(personalized_dict)

再次输出该词语的拼音就改过来了:

1
2
3
4
print(pypinyin.pinyin('又见苍岚'))

-->
[['yòu'], ['xiàn'], ['cāng'], ['lán']]

中英混搭

可以自动处理标点符号和中英文编码:

1
2
3
4
pypinyin.lazy_pinyin("我觉得OK!"))  

-->
['wo', 'jue', 'de', 'OK!']

参考资料



文章链接:
https://www.zywvvd.com/notes/coding/python/python-pinyin-tone/python-pinyin-tone/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Python 识别中文生成带声调的拼音
https://www.zywvvd.com/notes/coding/python/python-pinyin-tone/python-pinyin-tone/
作者
Yiwei Zhang
发布于
2023年7月8日
许可协议