200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 中文分词的python实现-基于FMM算法

中文分词的python实现-基于FMM算法

时间:2019-10-24 10:29:45

相关推荐

中文分词的python实现-基于FMM算法

正向最大匹配算法(FMM)

正向最大匹配算法(FMM)是一种基于词典的分词方法,思想很简单就是从左向右扫描寻找词的最大匹配,比如词典中同时含有“钓鱼”和“钓鱼岛”,那“钓鱼岛属于中国”就会被分词成“钓鱼岛/属于/中国”

过程

限定词的最大长度(例如5)从最大的长度开始在词库中进行匹配,直到匹配成功更新起点的位置继续上一步骤直到全部完成

实验

代码

# -*- coding: utf-8 -*-# 中文正向最大匹配(FMM)分词import sysreload(sys)#动态重新加载sys模块sys.setdefaultencoding('utf8')word_dict = ['新华网', '东京', '记者', '吴谷丰', '日本共同社', '28', '报道']test_str = ' 新华网东京电记者吴谷丰据日本共同社28日报道'# 获取分词def getSeg(text):if not text:return ''if len(text) == 1:return textif text in word_dict:return textelse:small = len(text) - 1text = text[0:small]return getSeg(text)def main():global test_strtest_str = test_str.decode('utf8').strip()max_len = 5# 正向最大匹配分词测试,最大长度5result_str = '' # 保存要输出的分词结果result_len = 0print 'input :', test_strwhile test_str:tmp_str = test_str[0:max_len]seg_str = getSeg(tmp_str)seg_len = len(seg_str)result_len = result_len + seg_lenif seg_str.strip():result_str = result_str + seg_str + ' / 'test_str = test_str[seg_len:]print 'output :', result_strif __name__ == '__main__':main()

结果

input : 新华网东京电记者吴谷丰据日本共同社28日报道output : 新华网 / 东京 / 电 / 记者 / 吴谷丰 / 据 / 日本共同社 / 28 / 日 / 报道 /

分词词典可以自定义或者从此网页下载,然后将word_dict代码更换成下面这行

word_dict = [line.strip() for line in open('dict.txt')]

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