当前位置: 首页 > article >正文

【Python】pypinyin-汉字拼音转换工具

文章目录

  • 1. 主要功能
  • 2. 安装
  • 3. 常用API
    • 3.1 拼音风格
    • 3.2 核心API
      • 3.2.1 pypinyin.pinyin()
      • 3.2.2 pypinyin.lazy_pinyin()
      • 3.2.3 pypinyin.load_single_dict()
      • 3.2.4 pypinyin.load_phrases_dict()
      • 3.2.5 pypinyin.slug()
    • 3.3 注册新的拼音风格
  • 4. 基本用法
    • 4.1 库导入
    • 4.2 基本汉字转拼音
    • 4.3 拼音风格
    • 4.4 多音字
    • 4.5 获取声母和韵母
    • 4.6 自定义拼音库
  • 5. 应用场景

pypinyin 是一个用于将汉字转换为拼音的 Python 库。这个库特别适合需要在程序中进行汉字到拼音转换的场景,比如文本处理、自然语言处理应用等。以下是对 pypinyin 库的介绍,包括其功能和使用方法。

  • Documentation: https://pypinyin.readthedocs.io/
  • GitHub: https://github.com/mozillazg/python-pinyin
  • PyPI: https://pypi.org/project/pypinyin
  • Python version: 2.7, pypy, pypy3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13

1. 主要功能

汉字转拼音:可以将汉字转化为拼音,可以处理多音字。
声调标注:可以在拼音中标注声调。
拼音风格:支持多种拼音风格,比如带声调的拼音、数字表示声调的拼音、以及不带声调的拼音。
多音字支持:能够正确处理和选择多音字的正确读音。
自定义拼音库:用户可以自定义词组的拼音,以适应特定的应用需求。

2. 安装

可以通过pip来安装pypinyin

pip install pypinyin

3. 常用API

3.1 拼音风格

class pypinyin.Style(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)
参数值说明
NORMAL普通风格,不带声调。如: 中国 -> zhong guo
TONE标准声调风格,拼音声调在韵母第一个字母上(默认风格)。如: 中国 -> zhōng guó
TONE2声调风格2,即拼音声调在各个韵母之后,用数字 [1-4] 进行表示。如: 中国 -> zho1ng guo2
TONE3声调风格3,即拼音声调在各个拼音之后,用数字 [1-4] 进行表示。如: 中国 -> zhong1 guo2
INITIALS声母风格,只返回各个拼音的声母部分(注:有的拼音没有声母,详见 #27)。如: 中国 -> zh g
FIRST_LETTER首字母风格,只返回拼音的首字母部分。如: 中国 -> z g
FINALS韵母风格,只返回各个拼音的韵母部分,不带声调。如: 中国 -> ong uo
FINALS_TONE标准韵母风格,带声调,声调在韵母第一个字母上。如:中国 -> ōng uó
FINALS_TONE2韵母风格2,带声调,声调在各个韵母之后,用数字 [1-4] 进行表示。如: 中国 -> o1ng uo2
FINALS_TONE3韵母风格3,带声调,声调在各个拼音之后,用数字 [1-4] 进行表示。如: 中国 -> ong1 uo2
BOPOMOFO注音风格,带声调,阴平(第一声)不标。如: 中国 -> ㄓㄨㄥ ㄍㄨㄛˊ
BOPOMOFO_FIRST注音风格,仅首字母。如: 中国 -> ㄓ ㄍ
CYRILLIC汉语拼音与俄语字母对照风格,声调在各个拼音之后,用数字 [1-4] 进行表示。如: 中国 -> чжун1 го2
CYRILLIC_FIRST汉语拼音与俄语字母对照风格,仅首字母。如: 中国 -> ч г
WADEGILES威妥玛拼音/韦氏拼音/威式拼音风格,无声调

3.2 核心API

3.2.1 pypinyin.pinyin()

将汉字转换为拼音,返回汉字的拼音列表。

pypinyin.pinyin(hans, style=Style.TONE, heteronym=False, errors='default', strict=True, v_to_u=False, neutral_tone_with_five=False)
参数说明
hans (unicode 字符串或字符串列表)汉字字符串( ‘你好吗’ )或列表( [‘你好’, ‘吗’] ). 可以使用自己喜爱的分词模块对字符串进行分词处理, 只需将经过分词处理的字符串列表传进来就可以了
style指定拼音风格,默认是 TONE 风格。 更多拼音风格详见 Style
errors指定如何处理没有拼音的字符。‘default’:保留原始字符;‘ignore’:忽略该字符;‘replace’:替换为去掉 \u 的 unicode 编码字符串 (‘\u90aa’ => ‘90aa’);callable对象: 回调函数之类的可调用对象
heteronym是否启用多音字
strict只获取声母或只获取韵母相关拼音风格的返回结果 是否严格遵照《汉语拼音方案》来处理声母和韵母, 详见 strict 参数的影响
v_to_u (bool)无声调相关拼音风格下的结果是否使用 ü 代替原来的 v 当为 False 时结果中将使用 v 表示 ü
neutral_tone_with_five (bool)声调使用数字表示的相关拼音风格下的结果是否 使用 5 标识轻声

3.2.2 pypinyin.lazy_pinyin()

将汉字转换为拼音,返回不包含多音字结果的拼音列表。与 pinyin() 的区别是返回的拼音是个字符串, 并且每个字只包含一个读音。

pypinyin.lazy_pinyin(hans, style=Style.NORMAL, errors='default', strict=True, v_to_u=False, neutral_tone_with_five=False, tone_sandhi=False)
参数说明
hans (unicode 字符串或字符串列表)汉字字符串( ‘你好吗’ )或列表( [‘你好’, ‘吗’] ). 可以使用自己喜爱的分词模块对字符串进行分词处理, 只需将经过分词处理的字符串列表传进来就可以了。
style指定拼音风格,默认是 NORMAL 风格。 更多拼音风格详见 Style。
errors指定如何处理没有拼音的字符,详情请参考 pinyin()
strict只获取声母或只获取韵母相关拼音风格的返回结果 是否严格遵照《汉语拼音方案》来处理声母和韵母, 详见 strict 参数的影响
v_to_u (bool)无声调相关拼音风格下的结果是否使用 ü 代替原来的 v 当为 False 时结果中将使用 v 表示 ü
neutral_tone_with_five (bool)声调使用数字表示的相关拼音风格下的结果是否 使用 5 标识轻声
tone_sandhi (bool)是否按照声调 变调规则 对拼音进行处理 (使用预先通过分词库进行过分词后的结果作为 hans 参数的值效果会更好,因为变调效果依赖分词效果)

3.2.3 pypinyin.load_single_dict()

载入用户自定义的单字拼音库。

pypinyin.load_single_dict(pinyin_dict, style='default')
参数说明
pinyin_dict (dict)单字拼音库。比如: {0x963F: u"ā,ē"}
stylepinyin_dict 参数值的拼音库风格. 支持 ‘default’, ‘tone2’

3.2.4 pypinyin.load_phrases_dict()

载入用户自定义的词语拼音库。

pypinyin.load_phrases_dict(phrases_dict, style='default')
参数说明
phrases_dict (dict)词语拼音库。比如: {u"阿爸": [[u"ā"], [u"bà"]]}
stylephrases_dict 参数值的拼音库风格. 支持 ‘default’, ‘tone2’

3.2.5 pypinyin.slug()

将汉字转换为拼音,然后生成 slug 字符串。

pypinyin.slug(hans, style=Style.NORMAL, heteronym=False, separator='-', errors='default', strict=True)
参数说明
hans (unicode 字符串或字符串列表)汉字字符串( ‘你好吗’ )或列表( [‘你好’, ‘吗’] ). 可以使用自己喜爱的分词模块对字符串进行分词处理, 只需将经过分词处理的字符串列表传进来就可以了。
style指定拼音风格,默认是 NORMAL 风格。 更多拼音风格详见 Style
heteronym是否启用多音字
separator两个拼音间的分隔符/连接符
errors指定如何处理没有拼音的字符,详情请参考 pinyin()
strict只获取声母或只获取韵母相关拼音风格的返回结果 是否严格遵照《汉语拼音方案》来处理声母和韵母, 详见 strict 参数的影响

3.3 注册新的拼音风格

注册一个拼音风格实现。 自定义的函数应当使用 **kwargs 来兼容后续可能会新增的关键字参数, 当前默认会传递如下参数.

pypinyin.style.register(style, func=None)
参数说明
pinyin原始有声调的单个拼音
strict是否开启 strict 模式
han当前拼音对应的原始汉字
@register('echo')
def echo(pinyin, **kwargs):
    return pinyin

# or
register('echo', echo)

4. 基本用法

4.1 库导入

from pypinyin import pinyin, lazy_pinyin, Style

4.2 基本汉字转拼音

print(pinyin('中心'))  # 输出: [['zhōng'], ['xīn']]

4.3 拼音风格

# 转换为不带声调的拼音
print(lazy_pinyin('中心'))  # 输出: ['zhong', 'xin']

# 显示声调的拼音
print(pinyin('中心', style=Style.TONE))   # 输出: [['zhōng'], ['xīn']]
print(pinyin('中心', style=Style.TONE2))  # 输出: [['zho1ng'], ['xi1n']]
print(pinyin('中心', style=Style.TONE3))  # 输出: [['zhong1'], ['xin1']]
# 可以设置用5表示轻声
print(pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True))  # 输出: [['yi1'], ['shang5']]
# 其他风格
print(pinyin('中心', style=Style.FIRST_LETTER)# 输出: [['z'], ['x']]
print(pinyin('中心', style=Style.CYRILLIC))   # 输出: [['чжун1'], ['синь1']]
print(pinyin('战略', v_to_u=True, style=Style.NORMAL))   # 输出: [['zhan'], ['lüe']]

# slug用法
import pypinyin
print(pypinyin.slug('中国人'))  # 输出: 'zhong-guo-ren'
print(pypinyin.slug('中国人', separator=' '))  # 输出: 'zhong guo ren'
print(pypinyin.slug('中国人', style=Style.FIRST_LETTER))  # 输出: 'z-g-r'
print(pypinyin.slug('中国人', style=Style.CYRILLIC))  # 输出: 'чжун1-го2-жэнь2'

4.4 多音字

# 支持多音字识别
print(pinyin('重心'))  # 输出: [['zhòng'], ['xīn']] (根据上下文'重'读作'zhòng')
# 启用多音字模式
print(pinyin('中心', heteronym=True)) # 输出:[['zhōng', 'zhòng'], ['xīn']] 

4.5 获取声母和韵母

在 pypinyin 库中,可以使用 Style.INITIALS 和 Style.FINALS 来分别提取汉字拼音的声母和韵母。

from pypinyin import pinyin, Style

# 提取拼音的声母和韵母
text = '汉字'

# 获取声母
initials = pinyin(text, style=Style.INITIALS, strict=False)
print('声母:', initials)  # 输出: [['h'], ['z']]

# 获取韵母
finals = pinyin(text, style=Style.FINALS, strict=False)
print('韵母:', finals)  # 输出: [['an'], ['i']]

# 获取带声调的韵母
finals_with_tone = pinyin(text, style=Style.FINALS_TONE)
print('带声调的韵母:', finals_with_tone)  # 输出: [['àn'], ['i']]

4.6 自定义拼音库

# 自定义词语的拼音
from pypinyin import load_phrases_dict
# 定义自定义词典
custom_dict = {'重庆': [['Chong'], ['qing']]}
# 加载自定义词典
pypinyin.load_phrases_dict(custom_dict)
# 使用自定义词典进行转换
print(pinyin('重庆'))  # 输出: [['Chong'], ['qing']]

5. 应用场景

  • 自然语言处理:文本转换和分析、文本音韵分析或语言学研究;语音识别、语音合成标注数据构建等。
  • 搜索优化:改进中文搜索功能。用户在输入拼音时,可以通过拼音匹配到汉字,实现更为友好和方便的搜索体验。
  • 数据清理与标准化:在数据处理中,将拼音作为汉字索引字段,方便进行数据聚合与分析。
  • 改进拼音输入法:在拼音输入法中,使用多音字的处理功能,将拼音准确转换为正确的汉字,提升输入准确性。

http://www.kler.cn/a/551791.html

相关文章:

  • LSTM细胞状态门控设计详解:数学原理、代码实现与工业级优化方案
  • 【嵌入式Linux应用开发基础】exec()函数族
  • Servlet中HttpServletRequest和HttpServletResponse的常用API
  • 文档生成视频转换工具,让一切皆可制作成视频
  • 【杂谈】加油!!!!
  • 策略模式 Strategy Pattern
  • 认识HTML的标签结构
  • Uboot编译出现:Makefile:40: *** missing separator. Stop.
  • apache artemis安装
  • H3CNE构建中小企业网络(上)面向零基础
  • AIGC(生成式AI)试用 21 -- Python调用deepseek API
  • Linux 文件内容查看
  • Docker 安全基础:权限、用户、隔离机制
  • http状态码503之解决方法(Solution to HTTP Status Code 503)
  • 部署k8s 集群1.26.0(containerd方式)
  • AI 百炼成神:线性回归,预测房价
  • docker的mysql容器修改数据库root的登录密码后,navicat依然能用旧密码访问
  • Java 设计模式总结
  • Leetcode1299:将每个元素替换为右侧最大元素
  • 半遮挡检测算法 Detecting Binocular Half-Occlusions