900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 生成拼音语料及拼音识别转换成中文

生成拼音语料及拼音识别转换成中文

时间:2021-09-29 03:37:15

相关推荐

生成拼音语料及拼音识别转换成中文

一.前言

前两篇文章分别介绍了利用中文拼音库生成基于Trie树的音节模型和将输入的字符串进行音节拆分,本篇文章主要介绍如何利用中文语料构建拼音语料模型及拼音转换中文.

二.构建拼音语料模型

先来看看拼音转中文效果,输入字符串"zhuanye",

打印print(Pinyin2Chinese().covert(‘zhuanye’))

思路:获取中文语料(来源可以从数据库或者静态文件,包括excel表和.txt表),然后将语料结巴进行分词,然后利用pypinyin工具将分词转换成拼音,用列表存储,最后写出二进制文件保存拼音语料,下列代码仅做个示例,具体操作看自身情况.

Proj_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))Pinyin_Model_Path = os.path.join(Proj_path, "main/PinYinDict.model")CategoryExcle_Path = os.path.join(Proj_path, "main/category_data.xls")class Load_Dump_Model:def __init__(self):# 从数据库表中获取数据self.tenant_name = 'test'self.category_data = self.load_sql_data()# 从excel表中获取数据# self.excle = CategoryExcle_Path# self.category_data = self.load_excle_data(self.excle)def load_excle_data(self, path):xl = xlrd.open_workbook(path)table = xl.sheet_by_index(0)col = table.col_values(0)print(col[1:])return col[1:]def load_sql_data(self):result = []departments = db.session.query(Faq.department_name).filter(Faq.tenant_name == self.tenant_name).group_by(Faq.department_name).all()categories = db.session.query(Faq.category_name).filter(Faq.tenant_name == self.tenant_name).group_by(Faq.category_name).all()for i in departments:result.append(i.department_name)for j in categories:result.append(j.category_name)return resultdef load_pinyin_model(self):pinyin_dict = {}# 获取数据for ele in self.category_data:pinyin = ','.join(lazy_pinyin(ele))pinyin_dict[pinyin] = elefor j in jieba.lcut(ele):pinyin2 = ','.join(lazy_pinyin(j))pinyin_dict[pinyin2] = j# 保存模self.category_data型 使用pickle和文件流方式fp = open(os.path.join(DevConfig.PROJ_PATH, 'main/assets/dataset/PinYinDict.model'), 'wb')pickle.dump(pinyin_dict, fp)fp.close()

三.拼音转中文

思路:加提出载并获取拼音语料模型,然后将字符串进行音节切分,最后遍历拼音语料比对返回中文,如果匹配不上则无结果返回.

代码如下:

class Pinyin2Chinese:def __init__(self):self.model_path = Pinyin_Model_Pathself.pinyin2word = self.load_py2w_model(self.model_path)# self.pinyin2word=Load_Dump_Model().load_pinyin_model()def load_py2w_model(self, model_path):fp = open(model_path, 'rb')data = pickle.load(fp)fp.close()return datadef covert(self, pinyin):pinyin = PinyinCut().cut(pinyin)for key, value in self.pinyin2word.items():if pinyin == key:# result = sorted(value.items(), key=lambda x: x[1], reverse=True)[0][0]return valueelse:continueerror = Falsereturn error

四.总结

至此,三篇文章实现了字符串转拼音,再拼音转字符串的整个过程,是基于规则匹配的方法去实现的,比较简单,有问题或者有疑问的同学,欢迎在下方评论提出.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。