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

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

实验结果

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

更多信息/快速联系博主

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值