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

正向最大匹配算法

正向最大匹配算法( 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()

实验结果

东北林业大学 是 好 学校
这 里 是 个 好地方

你可能感兴趣的:(算法,自然语言处理,分词)