汉字转拼音(简码生成)
对比
pinyin
- 不支持多音字
pypinyin
- 根据词组智能匹配最正确的拼音。
-
支持多音字。
-
简单的繁体支持。
- 支持多种不同拼音风格。
xpinyin
- 不支持多音字
ChineseTone
- 支持多音字
- 判断是否为多音字
- 获取拼音的声母部分
- 获取某汉字的所有拼音
实现
ChineseTone在python3时打开文件需要加入encoding='utf-8
str = '重庆'
import pinyin
print(pinyin.get(str, format="strip", delimiter=" "))
from pypinyin import pinyin
import pypinyin
print(pinyin(str, style=pypinyin.NORMAL, heteronym=True))
from ChineseTone import *
print(PinyinHelper.convertToPinyinFromSentence(str, pinyinFormat=PinyinFormat.WITHOUT_TONE))
重庆:
了解了:
大夫:
pypinyin和ChineseTone功能相近,暂用pypinyin,多次对比多音字pypinyin更为准确,但都会出错。
简码生成基础代码:
import itertools
import pypinyin
from pypinyin import pinyin
name = '重大殷乐01'
simple_code_list = pinyin(name, style=pypinyin.FIRST_LETTER, heteronym=True, errors='default')
for i in range(0, len(simple_code_list)-1):
c = list(itertools.product(simple_code_list[i], simple_code_list[i+1]))
d = []
for j in c:
d.append(''.join(j))
simple_code_list[i+1] = d
print(simple_code_list[i+1], len(simple_code_list[i+1]))
输出结果:
['zd', 'zt', 'cd', 'ct', 'td', 'tt'] 6
zd,zt,cd,ct,td,tt
['zdy', 'zty', 'cdy', 'cty', 'tdy', 'tty'] 6
zdy,zty,cdy,cty,tdy,tty
['zdyl', 'zdyy', 'ztyl', 'ztyy', 'cdyl', 'cdyy', 'ctyl', 'ctyy', 'tdyl', 'tdyy', 'ttyl', 'ttyy'] 12
zdyl,zdyy,ztyl,ztyy,cdyl,cdyy,ctyl,ctyy,tdyl,tdyy,ttyl,ttyy
['zdyl01', 'zdyy01', 'ztyl01', 'ztyy01', 'cdyl01', 'cdyy01', 'ctyl01', 'ctyy01', 'tdyl01', 'tdyy01', 'ttyl01', 'ttyy01'] 12
使用join 函数来拼接字符串:
输出结果:zdyl01,zdyy01,ztyl01,ztyy01,cdyl01,cdyy01,ctyl01,ctyy01,tdyl01,tdyy01,ttyl01,ttyy01
输出结果:zdyl01_zdyy01_ztyl01_ztyy01_cdyl01_cdyy01_ctyl01_ctyy01_tdyl01_tdyy01_ttyl01_ttyy01
输出结果:zdyl01 zdyy01 ztyl01 ztyy01 cdyl01 cdyy01 ctyl01 ctyy01 tdyl01 tdyy01 ttyl01 ttyy01
使用split函数来拆分字符串:
输出结果:['zdyl01', 'zdyy01', 'ztyl01', 'ztyy01', 'cdyl01', 'cdyy01', 'ctyl01', 'ctyy01', 'tdyl01', 'tdyy01', 'ttyl01', 'ttyy01']
输出结果:['zdyl01', 'zdyy01', 'ztyl01', 'ztyy01', 'cdyl01', 'cdyy01', 'ctyl01', 'ctyy01', 'tdyl01', 'tdyy01', 'ttyl01', 'ttyy01']
整理完成的函数:
import itertools
import pypinyin
from pypinyin import pinyin
# 由汉字获取拼音简码字符串
# Receive ----------------------------------
# name: 汉字名称
# Return -----------------------------------
# 简码字符串 以 , 隔开
def brief_code(name=''):
# 只获取首字母拼音 允许多音字 非汉字部分保留原始字符
brief_codes = pinyin(name, style=pypinyin.FIRST_LETTER, heteronym=True, errors='default')
for i in range(0, len(brief_codes) - 1):
c = list(itertools.product(brief_codes[i], brief_codes[i + 1]))
d = []
for j in c:
d.append(''.join(j))
brief_codes[i + 1] = d
if i == len(brief_codes) - 2:
return ','.join(brief_codes[i + 1])
return ''
print(brief_code('重大殷乐01'))
输出结果:zdyl01,zdyy01,ztyl01,ztyy01,cdyl01,cdyy01,ctyl01,ctyy01,tdyl01,tdyy01,ttyl01,ttyy01
https://www.biaodianfu.com/python-hanzi-to-pinyin.html