文章目录
- [1. 主要功能](#1. 主要功能)
- [2. 安装](#2. 安装)
- [3. 常用API](#3. 常用API)
-
- [3.1 拼音风格](#3.1 拼音风格)
- [3.2 核心API](#3.2 核心API)
-
- [3.2.1 pypinyin.pinyin()](#3.2.1 pypinyin.pinyin())
- [3.2.2 pypinyin.lazy_pinyin()](#3.2.2 pypinyin.lazy_pinyin())
- [3.2.3 pypinyin.load_single_dict()](#3.2.3 pypinyin.load_single_dict())
- [3.2.4 pypinyin.load_phrases_dict()](#3.2.4 pypinyin.load_phrases_dict())
- [3.2.5 pypinyin.slug()](#3.2.5 pypinyin.slug())
- [3.3 注册新的拼音风格](#3.3 注册新的拼音风格)
- [4. 基本用法](#4. 基本用法)
-
- [4.1 库导入](#4.1 库导入)
- [4.2 基本汉字转拼音](#4.2 基本汉字转拼音)
- [4.3 拼音风格](#4.3 拼音风格)
- [4.4 多音字](#4.4 多音字)
- [4.5 获取声母和韵母](#4.5 获取声母和韵母)
- [4.6 自定义拼音库](#4.6 自定义拼音库)
- [5. 应用场景](#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
。
bash
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"ā,ē"} |
style | pinyin_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à"]]} |
style | phrases_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. 应用场景
- 自然语言处理:文本转换和分析、文本音韵分析或语言学研究;语音识别、语音合成标注数据构建等。
- 搜索优化:改进中文搜索功能。用户在输入拼音时,可以通过拼音匹配到汉字,实现更为友好和方便的搜索体验。
- 数据清理与标准化:在数据处理中,将拼音作为汉字索引字段,方便进行数据聚合与分析。
- 改进拼音输入法:在拼音输入法中,使用多音字的处理功能,将拼音准确转换为正确的汉字,提升输入准确性。