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

news/2025/2/24 0:54:00

文章目录

  • 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 拼音风格

python">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()

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

python">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() 的区别是返回的拼音是个字符串, 并且每个字只包含一个读音。

python">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()

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

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

3.2.4 pypinyin.load_phrases_dict()

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

python">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 字符串。

python">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 来兼容后续可能会新增的关键字参数, 当前默认会传递如下参数.

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

# or
register('echo', echo)

4. 基本用法

4.1 库导入

python">from pypinyin import pinyin, lazy_pinyin, Style

4.2 基本汉字转拼音

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

4.3 拼音风格

python"># 转换为不带声调的拼音
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 多音字

python"># 支持多音字识别
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 来分别提取汉字拼音的声母和韵母。

python">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 自定义拼音库

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

5. 应用场景

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

http://www.niftyadmin.cn/n/5863890.html

相关文章

设计心得——解耦的实现技术

一、说明 在前面的“设计心得——解耦”中&#xff0c;对解耦进行了高层次的抽象说明。本篇则对在实践中常用的解耦技术进行逐一分析说明&#xff0c;以期为开发者能更从理论到实践搭建一个桥梁。至于大家能够如何更好的在自己的项目中进行解耦的实践&#xff0c;就需要不断的…

将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南

将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南 在现代 Web 开发中&#xff0c;前后端分离架构已经成为主流。然而&#xff0c;在某些场景下&#xff0c;我们可能需要将前端项目&#xff08;如 Vue&#xff09;与后端项目&#xff08;如 Spring Boot&#xff09;集成部…

行业分析---对自动驾驶规控算法未来的思考

1 前言 随着自动驾驶端到端大模型的兴起&#xff0c;小鹏、华为、理想、蔚来、小米等公司都对自动驾驶业务部进行了组织架构的调整&#xff0c;准备应对新的或者更高级别的自动驾驶研发任务。 近几年由于自动驾驶技术的快速发展&#xff0c;不少从业者觉得相关职业的未来充满了…

使用IDEA提交SpringBoot项目到Gitee上

登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库

Redis 深度解析:高性能缓存与分布式数据存储的核心利器

在现代分布式系统中&#xff0c;性能与可扩展性是开发者面临的核心挑战之一。为了应对高并发、低延迟的需求&#xff0c;缓存技术成为了不可或缺的解决方案。而 Redis&#xff0c;作为一款开源的、基于内存的键值存储系统&#xff0c;凭借其卓越的性能、丰富的数据结构和高可用…

我用Ai学Android Jetpack Compose之LinearProgressIndicator

本篇&#xff0c;我们来学习LinearProgressIndicator&#xff0c;答案来自 通义千问 Q:我想学习LinearProgressIndicator&#xff0c;麻烦你介绍一下 当然可以&#xff01;LinearProgressIndicator 是 Jetpack Compose 中的一个组件&#xff0c;用于显示线性进度条。它非常适…

Java 中的 List 和 Map:全面解析与实际应用

在 Java 编程中&#xff0c;List 和 Map 是两种非常重要的数据结构&#xff0c;广泛应用于各种场景。它们提供了灵活的方式来存储和操作数据&#xff0c;能够帮助开发者更高效地实现业务逻辑。本文将深入解析 Java 中 List 和 Map 的定义与使用&#xff0c;并通过具体代码示例展…

ubuntu docker 安装 deepseek anythingllm/openwebui教程

全新服务器安装起始&#xff1a; 1. 安装ubuntu到服务器中 2. 安装docker 安装教程 ubuntu 安装 docker详细教程_ubuntu安装教程docker-CSDN博客 3. 安装 ollama docker pull ollama/ollama 3.1 创建 存储目录 &#xff08;示例放在/home/ollama中&#xff09; cd /home/ …