Python汉字转拼音库pypinyin高级用法详解

纸上星河
纸上星河
发布时间:2026-10-16| 5人浏览过
原创

本文详细介绍Python中功能强大的pypinyin库。涵盖基础安装、多音字识别、多种拼音风格(声调、首字母、注音等)配置,以及命令行工具使用。重点讲解如何通过register装饰器自定义拼音输出格式,利用errors参数处理特殊字符,并通过load_single_dict和load_phrases_dict定制拼音库,满足批量注音、排序及检索等复杂需求。

将汉字转换为拼音,可广泛应用于批量汉字注音、文本按拼音排序以及通过拼音检索文字等常见场景。

目前互联网上存在多种拼音转换工具,基于Python的开源模块也层出不穷。本文重点介绍功能最为丰富的 pypinyin 模块,它支持以下核心特性:

  • 1. 根据词组智能匹配最准确的拼音。
  • 2. 支持多音字识别。
  • 3. 提供简单的繁体字支持及注音支持。
  • 4. 支持多种不同的拼音或注音风格。
  • 5. 提供命令行工具,实现一键转换。

1. 环境准备

在开始之前,请确保您的电脑已成功安装Python和pip。若未安装,可参考《超详细Python安装指南》一文进行配置。

(可选1)若您的Python主要用于数据分析,建议直接安装Anaconda,它已内置Python和pip环境。

(可选2)此外,推荐使用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']

到此这篇关于基于Python实现简单的汉字拼音转换工具的文章就介绍到这了,更多相关Python汉字转换内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。