递归实现前向匹配分词
来源:互联网 发布:新理念外语网络教学app 编辑:程序博客网 时间:2024/06/07 02:25
# -*- coding: utf-8 -*-'''功能:递归实现前向匹配分词说明:zhuanma这个包借鉴自jieba分词源代码用于将任意格式编码的字符串转换为unicode编码,统一字典和待分词语句的编码后,便于句子切分和分词.Author: <jianzhang.zhang@foxmail.com>Date : 2016-04-16'''import refrom zhuanma import strdecode# 递归前向匹配分词def seg(chunk,maxLength,dicList,result): # 句子块长度 cLength = len(chunk) # 句子块小于最大词长 if cLength <= maxLength: # 判断整个句子块是否在词典中 if chunk in dicList: result.append(chunk) # 前向匹配分词 else: for i in range(1,cLength): if chunk[:-i] in dicList: result.append(chunk[:-i]) seg(chunk[-i:],maxLength,dicList,result) # 句子块长度大于最大词长 elif cLength > maxLength: # 按照最大词长截取子串进行分词 subChunk = chunk[:maxLength] # 最大词长截取的子串在字典中 if subChunk in dicList: result.append(subChunk) seg(chunk[maxLength:],maxLength,dicList,result) # 最大词长截取的子串不在字典中 else: # 前向匹配分词 for i in range(1,maxLength): if subChunk[:-i] in dicList: result.append(subChunk[:-i]) seg(subChunk[-i:]+chunk[maxLength:],maxLength,dicList,result) return resultif __name__ == "__main__": # 导入分词字典到列表 with open('dic.txt') as f: dicList = strdecode(f.read()).strip().split('\n') # 确定字典中最大词长 maxLength = 0 for word in dicList: if len(word) > maxLength: maxLength = len(word) # 待分词语句 sentence = strdecode("中华人民共和国成立了,中华民族迎来了新的时代") # 用标点将句子分块 tokenList = re.findall(u"[\u4e00-\u9fa5]+",sentence,re.U) # 用于保存分词结果的列表 result = [] # 使用前向匹配算法分词 for chunk in tokenList: result.extend(seg(chunk,maxLength,dicList,[])) print '\n'.join(result) ''' >>> ================================ RESTART ================================ >>> 中华人民共和国 成立 了 中华 民族 迎来 了 新 的 时代 >>> '''
1 0
- 递归实现前向匹配分词
- 前向最大匹配分词FMM
- 前向算法实现
- python实现前向匹配中查找最大长度的最高重复模式的子字符串
- 中文分词-最长匹配法的实现
- java实现正向最大匹配分词
- java 递归实现通配符匹配
- 分词:词典+正反向全切分/词典+正反向最大匹配切分
- 【前向星】数据结构的实现
- 链式前向星以及代码实现
- prim算法的前向星实现
- 最短路的前向星实现
- Lua实现LSTM 前向传播
- 链式前向星存储实现BFS
- tensorflow简单实现卷积前向过程
- 前向渲染水效果实现
- 通过placeholder实现前向传播算法
- Java实现逆向最大匹配中文分词算法
- 将一个单向链表逆序
- [从头学数学] 第181节 数列
- 精灵王子逃出洞穴
- 第二次_r日记管理
- leetcode 19:Remove Nth Node From End of List
- 递归实现前向匹配分词
- 对一个单链表进行逆序排列。
- Android问题集锦之二十九:Cannot run program "/xx/build-tools/xx/aapt": error=2, No such file or directory
- 剑指offer—旋转字符串
- 我的感想
- fileTom3u8.bat
- 核心动画的简单理解
- 基于Nginx1.9+LuaJIT+Kafka的点播监控系统实战(上海卓越智慧树网点播监控系统)
- leetcode—— 39——Combination Sum