您的位置:首页 > 其它

分词算法:正向最大匹配算法

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()


实验结果

东北林业大学 是 好 学校
这 里 是 个 好地方
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息