基于Trie树进行拆分字符串变成拼音音节(二):字符串拼音拆分
一.前言
上一篇文章已经介绍了如何将所有中文拼音音节都基于Trie树生成模型,文章地址基于Trie树进行拆分字符串变成拼音音节(一):构建拼音音节模型,本篇文章主要介绍如何基于拼音模型将字符串进行拆分音节,下一篇文章将要介绍拼音识别拼音转功能.
二.代码流程
首先看一下拆分效果:输入zhuanye,打印
print(PinyinCut().cut(‘zhuanye’))
然后直接上代码:
先有一个遍历Trie树的类SearchIndex
class SearchIndex:def __init__(self, index, char=None, parent=None):self.index = indexself.char = charself.parent = parent
初始化拼音分割类PinyinCut,导入拼音模型文件
class PinyinCut:def __init__(self):self.trie_path = Pinyin_Trie_Pathself.trie = self.load_trie(self.trie_path)
导入拼音模型数据
def load_trie(self, trie_path):fp = open(trie_path, 'rb')data = pickle.load(fp)return data
音节切分,总体思路就是根据索引来遍历拼音模型Trie树,找到一个完成的音节就用逗号’,'分开,以列表形式返回
def cut(self, sent):# 获取总长度len_sent = len(sent)# 存储切分序列chars = []strs = ''# 存储候选序列,SearchIndex(0)表示第一个字符candidate_index = [SearchIndex(0)]# 当前单词的最后一个位置last_index = Nonewhile candidate_index:p = candidate_index.pop()# 如果当前字符所在索引为句子长度,那么最后一个index为本身,即直接到句子末尾。if p.index == len_sent:last_index = pbreakmatches = self.trie.search(sent[p.index:])for m in matches:new_index = SearchIndex(len(m) + p.index, m, p)candidate_index.append(new_index)index = last_indexwhile index:if index.parent:# print(join(index.char))chars.insert(0, index.char)# chars.append(index.char)index = index.parentnew_str = ','.join(chars)return new_str
三.完整代码
class PinyinCut:def __init__(self):self.trie_path = Pinyin_Trie_Pathself.trie = self.load_trie(self.trie_path)def load_trie(self, trie_path):fp = open(trie_path, 'rb')data = pickle.load(fp)return data# 音节切分def cut(self, sent):# 获取总长度len_sent = len(sent)# 存储切分序列chars = []strs = ''# 存储候选序列,SearchIndex(0)表示第一个字符candidate_index = [SearchIndex(0)]# 当前单词的最后一个位置last_index = Nonewhile candidate_index:p = candidate_index.pop()# 如果当前字符所在索引为句子长度,那么最后一个index为本身,即直接到句子末尾。if p.index == len_sent:last_index = pbreakmatches = self.trie.search(sent[p.index:])for m in matches:new_index = SearchIndex(len(m) + p.index, m, p)candidate_index.append(new_index)index = last_indexwhile index:if index.parent:# print(join(index.char))chars.insert(0, index.char)# chars.append(index.char)index = index.parentnew_str = ','.join(chars)return new_str
有问题的,欢迎评论一起讨论!
基于Trie树进行拆分字符串变成拼音音节(二):字符串拼音拆分相关推荐
- 基于Trie树的拼音切分算法
基于Trie树的拼音切分算法 Trie树也叫做单词查找树,是一个非常有效的索引结构,trie是由retrieval演化而来的.具体介绍请参看–> [ 维基百科 ] Trie树结构的简单说明 Tr ...
- 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法
文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...
- 基于Trie 树实现简单的中文分词
中文分词简介 中文分词是中文自然语言处理的基础,中文分词的正确率如何直接影响后续的词性标注(也有些词性标注算法不需要事先分词,但标注效果往往比先分词后标注差),实体识别.句法分析.语义分析.常用的分词 ...
- C++字符串完全指引之二 —— 字符串封装类
C++字符串完全指引之二 -- 字符串封装类 原著:Michael Dunn 作者:Chengjie Sun 原文出处:CodeProject:The Complete Guide to C++ St ...
- 怎样实现基于Trie树和字典的分词功能
前言 目前做分词比较流行的是用深度学习来做,比如用循环神经网络和条件随机场,也有直接用条件随机场或隐马尔科夫模型的.前面也实现过上面几种,效果挺不错,基于隐马尔科夫模型的差一点,条件随机场的效果较好, ...
- 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)
图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...
- 字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全
文章目录 1. 算法背景 2. Trie 树实现原理 2.1 Trie 树的构建 2.2 Trie树的查找 2.3 Trie树的遍历 2.4 Trie树的时间/空间复杂度 2.5 Trie 树 Vs ...
- 自然语言--Trie树详解及其应用
链接:http://blog.csdn.net/hackbuteer1/article/details/7964147 参考链接:https://segmentfault.com/a/11900000 ...
- 【图解算法】Trie树
欢迎来到我的算法专栏,今天我们来讲一种常见的数据结构:Trie树. 我们会对Trie树的性质,相关操作,应用进行讲解,并模拟实现一个简版的Trie树. 目录 1. Trie树 简介 2. Trie树的 ...
最新文章
- 【c语言】蓝桥杯算法训练 大小写判断
- 从Python代码到APP,你只需要一个小工具:GitHub已超3000星
- sql server 2005 sa登录失败解决方法
- JavaScript 里 window, document, screen, body 这几个名词的区别
- postgresql 不同数据库不同模式下的数据迁移
- 运算符面试题(剑指offer,面试宝典,牛客网)
- MMKV集成与原理,先收藏了
- mysql innodb redolog_MySQL · 引擎特性 · InnoDB redo log漫游(转)
- 网络编程之	application/x-www-form-urlencoded MIME编码
- 【ElasticSearch】Es 源码之 NodeConnectionsService 源码解读
- 漫射光层析成像的正问题理论模型(一)——蒙特卡洛模型概述
- Nacos:快速不停打印获取配置 c.a.n.client.config.impl.ClientWorker : get changedGroupKeys[${dataId}+${grou
- ​下一代无服务器的发展形态:Serverless2.0
- Java多线程模拟医院排号叫号系统
- OpenCV之光流法运动目标跟踪
- PhpSpreadsheet常用操作
- 解决:操作必须使用一个可更新的查询
- 在win7安装theano
- STM32 HAL库 CubeMx 按键中断控制LED
- Apache HTTP Server 2.4.49 路径穿越漏洞复现及利用
热门文章
- mtk平台typec模拟耳机补丁
- 【android 应用】Android(安卓)APP(应用)如何推广?整理
- R语言医学实例分析:代码解析
- 黑灰产程序员被抓,背后隐藏的黑色产业链怎么破?
- java 判断cmyk_Java判断图片是grb还是cmyk
- 如何用python处理excel中时间重合_python读取Excel文件中的时间,并计算时间间隔...
- Oracle 12cR1 RAC 在VMware Workstation上安装(上)—OS环境配置
- 4pics1word android,4 Pics 1 word Answers
- 重磅!被称“新材料之王”“黑黄金”,中石化大丝束碳纤维投产,全球仅4家能产 | 美通社头条...
- Vue Echarts绘制世界地图