分词算法:正向最大匹配算法
2015-12-14 14:28
597 查看
正向最大匹配算法
正向最大匹配算法(FMM)是一种基于词典的分词方法,同样的基于词典的方法还有逆向最大匹配法(RMM),ngram法.FMM故名思意,左向右扫描寻找词的最大匹配,是一种贪心的思想。流程
限定词的最大长度从最大的长度开始在词库中进行匹配只到匹配成功
更新起点的位置继续上一步骤只到全部分完
实验
词库
东北 林业 大学 学校 东北林业大学 好地方 学校
文本
东北林业大学是好学校 这里是个好地方
Code
#!/usr/bin/python import sys Maxlen=6 def max_match(line,dict): line=line.decode("utf8") word=[] i=0 while i<len(line): match = False for id in xrange(Maxlen, 0, -1): tmp=line[i:i+id].encode("utf8") for var in dict: if tmp in var: word.append(tmp) i+=id match=True break if match: break if not match: word.append(line[i].encode("utf8")) i+=1 return word if __name__ == "__main__": words=open(sys.argv[1]) dict = open(sys.argv[2], "r") out=open("./out.txt","w") List = list(dict) try: for line in words: out.write(" ".join(max_match(line.strip(),List))) out.write("\n") finally: out.close() words.close() dict.close()
实验结果
东北林业大学 是 好 学校 这 里 是 个 好地方
相关文章推荐
- 垃圾邮件过滤器 python简单实现
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析