Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。
本系列将会陆续整理分享一些有趣、有用的第三方库。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_Ecosystem
-
根据词组智能匹配最正确的拼音; -
支持多音字; -
简单的繁体支持,注音支持,威妥玛拼音支持; -
支持多种不同拼音/注音风格; -
允许用户加载自定义的词语拼音库,以满足特定场景下的需求。
pip install pypinyin
https://github.com/mozillazg/python-pinyin
-
1、基本使用:
pinyin()函数将汉字转换为拼音,返回的是一个二维列表,每个子列表对应一个汉字的拼音列表。
from pypinyin import pinyin
# 转换单个汉字
result_single = pinyin('中')
print(result_single)
# 输出:[['zhōng']]
# 转换多个汉字组成的词语
result_multi = pinyin('中心')
print(result_multi)
# 输出:[['zhōng'], ['xīn']]
使用lazy_pinyin()函数可以以懒加载的方式获取拼音,该函数返回的是一个一维列表,会忽略多音字的多种拼音情况,默认情况下会原样输出没有拼音的字符。
from pypinyin import lazy_pinyin
result = lazy_pinyin('中心')
print(result)
# 输出:['zhong', 'xin']
-
2、指定拼音风格:
Style 类提供了多种预定义的拼音风格,通过指定不同的风格,可以得到不同格式的拼音输出:
-
Style.NORMAL:不带声调的拼音; -
Style.TONE:带声调的拼音,声调以标调符号(ā, á, ǎ, à)形式呈现; -
Style.TONE2:带声调的拼音,声调以数字形式放在韵母之后; -
Style.TONE3:带声调的拼音,声调以数字形式放在拼音之后; -
Style.INITIALS:只输出拼音的声母部分; -
Style.FIRST_LETTER:只输出拼音的首字母; -
Style.FINALS:只输出拼音的韵母部分,不带声调; -
Style.FINALS_TONE:只输出拼音的韵母部分,且带标调符号的声调; -
Style.FINALS_TONE2:只输出拼音的韵母部分,声调以数字形式放在韵母之后; -
Style.FINALS_TONE3:只输出拼音的韵母部分,声调以数字形式放在韵母之后; -
Style.BOPOMOFO:将汉字转换为注音符号形式,带声调; -
Style.BOPOMOFO_FIRST:只输出注音符号的第一个字符; -
Style.CYRILLIC:将汉字转换为西里尔字母(俄语字母)形式的拼音,带声调; -
Style.CYRILLIC_FIRST:只输出西里尔字母形式拼音的第一个字符; -
Style.WADEGILES:输出威妥玛拼音(一种旧式拼音系统)。
from pypinyin import pinyin, Style
# 不带声调的拼音
no_tone = pinyin('中国', style=Style.NORMAL)
print(no_tone)
# 输出:[['zhong'], ['guo']]
# 声调以数字形式放在拼音末尾
tone_number = pinyin('中国', style=Style.TONE2)
print(tone_number)
# 输出:[['zho1ng'], ['guo2']]
-
3、处理多音字:
设置参数heteronym=True启用多音字模式,pinyin()函数会输出其所有可能的拼音。
from pypinyin import pinyin
# 启用多音字模式
result = pinyin('中心', heteronym=True)
print(result)
# 输出:[['zhōng', 'zhòng'], ['xīn']]
-
4、特殊情况:
lazy_pinyin()函数默认情况下无声调相关拼音风格下的结果会使用 v 表示 ü,可以通过参数 v_to_u=True 开启使用 ü 代替 v。
print(lazy_pinyin('战略'))
# 输出:['zhan', 'lve']
print(lazy_pinyin('战略', v_to_u=True)) # 不使用 v 表示 ü
# 输出:['zhan', 'lüe']
默认情况下拼音结果不会标明哪个韵母是轻声,轻声的韵母没有声调或数字标识,可以通过参数neutral_tone_with_five=True开启使用5标识轻声。
在汉语拼音中,轻声是一种特殊的声调,发音时声音轻而短,没有固定的音高。轻声通常不标声调符号(即不标数字),但在某些拼音标注系统中,会用数字5来表示轻声。
# 默认情况
print(lazy_pinyin('衣裳', style=Style.TONE3))
# 输出:['yi1', 'shang']
print(pinyin('衣裳', style=Style.TONE3))
# 输出:[['yi1'], ['shang']]
# 使用 5 标识轻声
print(lazy_pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True))
# 输出:['yi1', 'shang5']
print(pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True))
# 输出:[['yi1'], ['shang5']]
可以通过参数 tone_sandhi=True 进行变调。
# 默认情况
print(lazy_pinyin('你好', style=Style.TONE2))
# 输出:['ni3', 'ha3o']
# 变调 nǐ hǎo -> ní hǎo
print(lazy_pinyin('你好', style=Style.TONE2, tone_sandhi=True))
# 输出:['ni2', 'ha3o']
-
5、处理不包含拼音的字符:
当遇到不包含拼音的字符(串)时,函数会根据errors参数的值做相应的处理:
-
default(默认行为):不做任何处理,原样返回;
-
ignore:忽略该字符;
-
replace:替换为去掉 u 的 unicode 编码;
-
callable对象:提供一个回调函数,接受无拼音字符(串)作为参数,支持的返回值类型可以是unicode或list或None。当返回值类型为list时,会自动expend list。
# default
print(pinyin('你好☆☆'))
# 输出:[['nǐ'], ['hǎo'], ['☆☆']]
# ignore
print(pinyin('你好☆☆', errors='ignore'))
# 输出:[['nǐ'], ['hǎo']]
# replace
print(pinyin('你好☆☆', errors='replace'))
# 输出:[['nǐ'], ['hǎo'], ['26062606']]
# callable对象
print(pinyin('你好☆☆', errors=lambda x: 'star'))
# 输出:[['nǐ'], ['hǎo'], ['star']]
print(pinyin('你好☆☆', errors=lambda x: None))
# 输出:[['nǐ'], ['hǎo']]
print(pinyin('你好☆☆', errors=lambda x: ['star'for _ in x]))
# 输出:[['nǐ'], ['hǎo'], ['star'], ['star']]
print(pinyin('你好☆☆', heteronym=True, errors=lambda x: [['star', '☆'] for _ in x]))
# 输出:[['nǐ'], ['hǎo'], ['star', '☆'], ['star', '☆']]
-
6、自定义拼音库:
from pypinyin import lazy_pinyin, load_phrases_dict, Style, load_single_dict
hans = '桔子'
print(lazy_pinyin(hans, style=Style.TONE2))
# 输出:['ju2', 'zi']
# 增加 "桔子" 词组
load_phrases_dict({'桔子': [['jú'], ['zǐ']]})
print(lazy_pinyin(hans, style=Style.TONE2))
# 输出:['ju2', 'zi3']
hans = '还没'
print(lazy_pinyin(hans , style=Style.TONE2))
# 输出:['ha2i', 'me2i']
# 调整 "还" 字的拼音顺序或覆盖默认拼音
load_single_dict({ord('还'): 'huán,hái'})
print(lazy_pinyin(hans , style=Style.TONE2))
# 输出:['hua2n', 'me2i']
或者使用pypinyin-dict项目提供的自定义拼音库来纠正结果(需要通过pip安装pip install pypinyin-dict):
print(pinyin('扔', heteronym=True))
# 输出:[['rēng', 'rèng']]
# 使用 pinyin-data 项目中 cc_cedict.txt 文件中的拼音数据优化结果
from pypinyin_dict.pinyin_data import kxhc1983
kxhc1983.load()
print(pinyin('扔', heteronym=True))
# 输出:[['rēng']]
-
7、自定义拼音风格:
可以通过register()来实现自定义拼音风格的需求:
from pypinyin import lazy_pinyin
from pypinyin.style import register
@register('kiss')
def kiss(pinyin, **kwargs): # 必须包含 **kwargs 用于接收未来新增的关键字参数
return f'😘 {pinyin}'
lazy_pinyin('么么', style='kiss')
# 输出:['😘 me', '😘 me']
-
8、strict参数的影响:
strict参数用于控制处理声母和韵母时是否严格遵循《汉语拼音方案》标准。当strict=False时就是不遵守上面的规则来处理声母和韵母,比如y, w会被当做声母,yu(迂) 的韵母就是一般认为的 u 等。
from pypinyin import Style, lazy_pinyin
print(lazy_pinyin('乌', style=Style.TONE))
# 输出:['wū']
print(lazy_pinyin('乌', style=Style.INITIALS))
# 输出:['']
print(lazy_pinyin('乌', style=Style.INITIALS, strict=False))
# 输出:['w']
print(lazy_pinyin('迂', style=Style.TONE))
# 输出:['yū']
print(lazy_pinyin('迂', style=Style.FINALS_TONE))
# 输出:['ǖ']
print(lazy_pinyin('迂', style=Style.FINALS_TONE, strict=False))
# 输出:['ū']
-
9、slug()函数:
slug()函数的主要功能是将输入的汉字字符串转换为拼音字符串,并且可以根据指定的分隔符将每个汉字的拼音连接起来,常用于生成友好的URL或文件名等场景。
该函数接收两个主要参数:
-
第一个参数是需要转换为拼音的汉字字符串,该函数会遍历该字符串中的每个汉字,将其转换为拼音。
-
第二个参数separator是可选参数,用于指定拼音之间的分隔符,默认分隔符是“-“。
from pypinyin import slug
result = slug("你好世界", separator="-")
print(result)
# 输出: 'ni-hao-shi-jie'
更多内容可以前往官方文档查看:
https://pypinyin.readthedocs.io/


本篇文章来源于微信公众号: 码农设计师