##正向最大匹配算法
正向最大匹配算法(
F
M
M
FMM
FMM)是一种基于词典的分词方法,同样的基于词典的方法还有逆向最大匹配法(
R
M
M
RMM
RMM),
n
g
r
a
m
ngram
ngram法.
F
M
M
FMM
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()
实验结果
东北林业大学 是 好 学校
这 里 是 个 好地方