以前使用SQL实现的,效果还是不那么好。Python中提供了汉字转拼音的库,名字叫做PyPinyin,可以用于汉字注音、排序、检索、名片中文英文名字等等场合。
它有这么几个特性:
1.根据词组智能匹配最正确的拼音;
2.支持多音字;
3.简单的繁体支持, 注音支持;
4.支持多种不同拼音/注音风格。
import pandas as pdname = pd.read_clipboard()import os os.chdir(r'C:\Users\Admin\Desktop')from pypinyin import pinyin, lazy_pinyin, Style,load_phrases_dict,load_single_dict
基本的拼音转换,方法非常简单,直接调用pinyin方法即可。结果会是一个二维的列表,每个元素都另外成了一个列表,其中包含了每个字的读音。
pinyin('孙少安') [['sūn'], ['shǎo'], ['ān']]
添加heteronym参数并设置为True,启用多音字模式。
pinyin('孙少安', heteronym=True) [['sūn'], ['shǎo', 'shào'], ['ān']]
不考虑音调的情况,不显示音调
lazy_pinyin('孙少安') ['sun', 'shao', 'an']
【风格转换】
可以对结果进行一些风格转换,比如不带声调风格、标准声调风格、声调在拼音之后、声调在韵母之后、注音风格等等。
普通风格(NORMAL=0),不带声调。如:孙少安->['sun', 'shao', 'an']
lazy_pinyin('孙少安', style=Style.NORMAL)Out[12]: ['sun', 'shao', 'an']
标准声调风格(TONE = 1),拼音声调在韵母第一个字母上(默认风格)。如:孙少安->['sūn', 'shǎo', 'ān']
lazy_pinyin('孙少安', style=Style.TONE)Out[13]: ['sūn', 'shǎo', 'ān']
声调风格2(TONE2 = 2),即拼音声调在各个韵母之后,用数字 [1-4] 进行表示。如:孙少安->['su1n', 'sha3o', 'a1n']
lazy_pinyin('孙少安', style=Style.TONE2)Out[14]: ['su1n', 'sha3o', 'a1n']
声调风格3(TONE3 = 8),即拼音声调在各个拼音之后,用数字 [1-4] 进行表示。如:孙少安->['sun1', 'shao3', 'an1']
lazy_pinyin('孙少安', style=Style.TONE3)Out[15]: ['sun1', 'shao3', 'an1']
声母风格(INITIALS = 3),只返回各个拼音的声母部分(注:有的拼音没有声母,详见 `#27`_)。如:孙少安->['s', 'sh', '']
lazy_pinyin('孙少安', style=Style.INITIALS)Out[16]: ['s', 'sh', '']
首字母风格(FIRST_LETTER = 4),只返回拼音的首字母部分。如:孙少安->['s', 's', 'a']
azy_pinyin('孙少安', style=Style.FIRST_LETTER)Out[17]: ['s', 's', 'a']
韵母风格(FINALS = 5),只返回各个拼音的韵母部分,不带声调。如:孙少安->['uen', 'ao', 'an']
lazy_pinyin('孙少安', style=Style.FINALS)Out[18]: ['uen', 'ao', 'an']
标准韵母风格(FINALS_TONE = 6),带声调,声调在韵母第一个字母上。如:孙少安->['ūen', 'ǎo', 'ān']
lazy_pinyin('孙少安', style=Style.FINALS_TONE)Out[19]: ['ūen', 'ǎo', 'ān']
韵母风格2(FINALS_TONE2 = 7),带声调,声调在各个韵母之后,用数字 [1-4] 进行表示。如:孙少安->['u1en', 'a3o', 'a1n']
lazy_pinyin('孙少安', style=Style.FINALS_TONE2)Out[20]: ['u1en', 'a3o', 'a1n']
韵母风格3(FINALS_TONE3 = 9),带声调,声调在各个拼音之后,用数字 [1-4] 进行表示。如:孙少安->['uen1', 'ao3', 'an1']
lazy_pinyin('孙少安', style=Style.FINALS_TONE3)Out[21]: ['uen1', 'ao3', 'an1']
注音风格(BOPOMOFO = 10),带声调,阴平(第一声)不标。如:孙少安->['ㄙㄨㄣ', 'ㄕㄠˇ', 'ㄢ']
lazy_pinyin('孙少安', style=Style.BOPOMOFO)Out[22]: ['ㄙㄨㄣ', 'ㄕㄠˇ', 'ㄢ']
注音风格(BOPOMOFO_FIRST = 11),仅首字母。如:孙少安->['ㄙ', 'ㄕ', 'ㄢ']
lazy_pinyin('孙少安', style=Style.BOPOMOFO_FIRST)Out[23]: ['ㄙ', 'ㄕ', 'ㄢ']
汉语拼音与俄语字母对照风格(CYRILLIC = 12),声调在各个拼音之后,用数字 [1-4] 进行表示。如:孙少安->['сунь1', 'шао3', 'ань1']
lazy_pinyin('孙少安', style=Style.CYRILLIC)Out[24]: ['сунь1', 'шао3', 'ань1']
汉语拼音与俄语字母对照风格(CYRILLIC_FIRST = 13),仅首字母。如:孙少安->['с', 'ш', 'а']
lazy_pinyin('孙少安', style=Style.CYRILLIC_FIRST)Out[25]: ['с', 'ш', 'а']
【自定义拼音库】
可以自定义自己的拼音库,有load_single_dict和load_phrases_dict方法。
比如刚才我们看到 “少安” 两个字的发音默认返回的是'shǎo', 'ān',我们想默认返回['shào'], ['píng'],那可以这么做:
personalized_dict = {'少平': [['shào'], ['píng']], '少安': [['shào'], ['ān']]}load_phrases_dict(personalized_dict)pinyin('孙少安')Out[26]: [['sūn'], ['shào'], ['ān']]
【案例】
把名字转成拼音格式,和英文名字格式。就拿最近看完的《平凡的世界》里面的人名来举例,考虑到复姓的问题,加了个复姓的名字进去。
def pyin1(name): s = pinyin(name) if len(s) == 3: s0 = s[0][0]+" "+s[1][0]+' '+s[2][0] elif len(s) == 2: s0 = s[0][0]+" "+s[1][0] elif len(s) == 4: s0 = s[0][0]+" "+s[1][0]+' '+s[2][0]+' '+s[3][0] return s0
def yinwen(name): yw = lazy_pinyin(name) if len(yw) == 3: yw0 = yw[0] yw0 = yw0.capitalize() yw1 = yw[1]+yw[2] yw1 = yw1.capitalize() return yw0+' '+yw1 elif len(yw) == 2: yw0 = yw[0] yw0 = yw0.capitalize() yw1 = yw[1] yw1 = yw1.capitalize() return yw0+' '+yw1 elif len(yw) == 4: yw0 = yw[0]+yw[1] yw0 = yw0.capitalize() yw1 = yw[2]+yw[3] yw1 = yw1.capitalize() return yw0+' '+yw1
name['pinyin'] = name['name'].apply(pyin1)name['yingwen'] = name['name'].apply(yinwen)name.to_excel('name.xlsx',index=False)
End
◆ 【可视化】Matplotlib_Scatter ◆ 【可视化】Matplotlib_Piechart ◆ 【可视化】seaborn_heatmap