使用¶
示例¶
>>> from pypinyin import pinyin, lazy_pinyin, Style
>>> pinyin('中心')
[['zhōng'], ['xīn']]
>>> pinyin('中心', heteronym=True) # 启用多音字模式
[['zhōng', 'zhòng'], ['xīn']]
>>> pinyin('中心', style=Style.FIRST_LETTER) # 设置拼音风格
[['z'], ['x']]
>>> pinyin('中心', style=Style.TONE2, heteronym=True)
[['zho1ng', 'zho4ng'], ['xi1n']]
>>> lazy_pinyin('中心') # 不考虑多音字的情况
['zhong', 'xin']
处理不包含拼音的字符¶
当程序遇到不包含拼音的字符(串)时,会根据 errors
参数的值做相应的处理:
default
(默认行为): 不做任何处理,原样返回:lazy_pinyin('你好☆☆') ['ni', 'hao', '☆☆']
ignore
: 忽略该字符lazy_pinyin('你好☆☆', errors='ignore') ['ni', 'hao']
replace
: 替换为去掉\u
的 unicode 编码:lazy_pinyin('你好☆☆', errors='replace') ['ni', 'hao', '26062606']
callable 对象 : 提供一个回调函数,接受无拼音字符(串)作为参数, 支持的返回值类型:
unicode
或list
([unicode, …]) 或None
。可参考 单元测试代码
lazy_pinyin('你好☆☆', errors=lambda x: 'star') ['ni', 'hao', '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']
自定义拼音风格¶
可以通过 register()
来实现自定义拼音风格的需求:
In [1]: from pypinyin import lazy_pinyin
In [2]: from pypinyin.style import register
In [3]: @register('kiss')
...: def kiss(pinyin, **kwargs):
...: return '😘 {0}'.format(pinyin)
...:
In [4]: lazy_pinyin('么么', style='kiss')
Out[4]: ['😘 me', '😘 me']
strict
参数的影响¶
strict
参数用于控制处理声母和韵母时是否严格遵循 《汉语拼音方案》 标准:
In [1]: from pypinyin import Style, lazy_pinyin
In [2]: lazy_pinyin('乌', style=Style.TONE)
Out[2]: ['wū']
In [3]: lazy_pinyin('乌', style=Style.INITIALS)
Out[3]: ['']
In [4]: lazy_pinyin('乌', style=Style.INITIALS, strict=False)
Out[4]: ['w']
In [5]: lazy_pinyin('迂', style=Style.FINALS_TONE, strict=False)
Out[5]: ['ū']
In [6]: lazy_pinyin('迂', style=Style.TONE)
Out[6]: ['yū']
In [7]: lazy_pinyin('迂', style=Style.FINALS_TONE)
Out[7]: ['ǖ']
In [8]: lazy_pinyin('迂', style=Style.FINALS_TONE, strict=False)
Out[8]: ['ū']
当 strict=True
时根据 《汉语拼音方案》 的如下规则处理声母、在韵母相关风格下还原正确的韵母:
- 21 个声母:
b p m f d t n l g k h j q x zh ch sh r z c s
(y, w 不是声母) - i行的韵母,前面没有声母的时候,写成yi(衣),ya(呀),ye(耶),yao(腰),you(忧),yan(烟), yin(因),yang(央),ying(英),yong(雍)。(y 不是声母)
- u行的韵母,前面没有声母的时候,写成wu(乌),wa(蛙),wo(窝),wai(歪),wei(威),wan(弯), wen(温),wang(汪),weng(翁)。(w 不是声母)
- ü行的韵母,前面没有声母的时候,写成yu(迂),yue(约),yuan(冤),yun(晕);ü上两点省略。 (韵母相关风格下还原正确的韵母 ü)
- ü行的韵跟声母j,q,x拼的时候,写成ju(居),qu(区),xu(虚),ü上两点也省略; 但是跟声母n,l拼的时候,仍然写成nü(女),lü(吕)。(韵母相关风格下还原正确的韵母 ü)
- iou,uei,uen前面加声母的时候,写成iu,ui,un。例如niu(牛),gui(归),lun(论)。 (韵母相关风格下还原正确的韵母 iou,uei,uen)
当 strict=False
时就是不遵守上面的规则来处理声母和韵母,
比如:y
, w
会被当做声母,yu(迂) 的韵母就是一般认为的 u
等。
具体差异可以查看 tests/test_standard.py 中的对比结果测试用例
命令行工具¶
程序内置了一个命令行工具 pypinyin
:
$ pypinyin 音乐
yīn yuè
$ pypinyin -h
命令行工具支持如下参数:
$ pypinyin -h
usage: pypinyin [-h] [-V] [-f {pinyin,slug}]
[-s {NORMAL,zhao,TONE,zh4ao,TONE2,zha4o,TONE3,zhao4,INITIALS,zh,FIRST_LETTER,z,FINALS,ao,FINALS_TONE,4ao,FINALS_TONE2,a4o,FINALS_TONE3,ao4,BOPOMOFO,BOPOMOFO_FIRST,CYRILLIC,CYRILLIC_FIRST}]
[-p SEPARATOR] [-e {default,ignore,replace}] [-m]
hans
convert chinese to pinyin.
positional arguments:
hans chinese string
optional arguments:
-h, --help show this help message and exit
-V, --version show program's version number and exit
-f {pinyin,slug}, --func {pinyin,slug}
function name (default: "pinyin")
-s {NORMAL,zhao,TONE,zh4ao,TONE2,zha4o,TONE3,zhao4,INITIALS,zh,FIRST_LETTER,z,FINALS,ao,FINALS_TONE,4ao,FINALS_TONE2,a4o,FINALS_TONE3,ao4,BOPOMOFO,BOPOMOFO_FIRST,CYRILLIC,CYRILLIC_FIRST}, --style {NORMAL,zhao,TONE,zh4ao,TONE2,zha4o,TONE3,zhao4,INITIALS,zh,FIRST_LETTER,z,FINALS,ao,FINALS_TONE,4ao,FINALS_TONE2,a4o,FINALS_TONE3,ao4,BOPOMOFO,BOPOMOFO_FIRST,CYRILLIC,CYRILLIC_FIRST}
pinyin style (default: "zh4ao")
-p SEPARATOR, --separator SEPARATOR
slug separator (default: "-")
-e {default,ignore,replace}, --errors {default,ignore,replace}
how to handle none-pinyin string (default: "default")
-m, --heteronym enable heteronym
-s
, --style
参数可以选值的含义如下:
-s 或 –style 的值 | 对应的拼音风格 |
---|---|
zhao | NORMAL |
zh4ao | TONE |
zha4o | TONE2 |
zhao4 | TONE3 |
zh | INITIALS |
z | FIRST_LETTER |
ao | FINALS |
4ao | FINALS_TONE |
a4o | FINALS_TONE2 |
ao4 | FINALS_TONE3 |
NORMAL | NORMAL |
TONE | TONE |
TONE2 | TONE2 |
TONE3 | TONE3 |
INITIALS | INITIALS |
FIRST_LETTER | FIRST_LETTER |
FINALS | FINALS |
FINALS_TONE | FINALS_TONE |
FINALS_TONE2 | FINALS_TONE2 |
FINALS_TONE3 | FINALS_TONE3 |
BOPOMOFO | BOPOMOFO |
BOPOMOFO_FIRST | BOPOMOFO_FIRST |
CYRILLIC | CYRILLIC |
CYRILLIC_FIRST | CYRILLIC_FIRST |