未加星标

基于规则的分词算法(MM RMM算法)及python代码实现

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二04 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

中文分词指的是将一个汉字序列切分成一个一个单独的词。现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。其中,基于字符串匹配的分词方法是按照一定的策略将待分析的汉字串与机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,基于字符串匹配的分词方法可以分为正向最大匹配算法(Maximum Matching,下面简称MM)和逆向最大匹配算法(Reverse Maximum Matching,下面简称RMM)。

本分词系统只是一个简单的演示程序,简单地根据语料库的信息,利用“正向最大匹配”、“逆向最大匹配算法”将一小段文字进行分词。

二、算法描述

正向最大匹配算法(MM):按照人得而自然阅读顺序从左往右对一段话甚至文章进行词库匹配切分。

设MaxLen为最大词长,D为分词词典

(1)从待切分语料中按正向取长度为MaxLen的字符串str,令Len =MaxLen;

(2)将str与D中的词语互相匹配;

(3)if匹配成功,将指针向前移Len个汉字,并返回到(1);

(4)if 不成功:

if( Len>1):

Len = Len-1;

从待切分语料中取长度为Len的字符串str,并返回(2);

else:

得到单个汉字,指针向前移一个汉字,并返回(1)

逆向最大匹配算法(RMM):主要原理与正向最大匹配算法一致,只是切分方向相反,从文章的尾部开始匹配。

三、python 代码实现 MM算法 def mm_cut(self, sentence='', max_len=6):
"""
使用正向最大匹配法划分词语
:param sentence: str 待划分句子
:param max_len: int 最大词长 默认为6
:return: str-list 已分词的字符串列表
"""
sentence = sentence.decode('utf-8')
cur = 0 # 表示分词的位置
sen_len = sentence.__len__() # 句子的长度
word_list = [] # 划分的结果
while cur < sen_len:
l = None
for l in range(max_len, 0, -1):if sentence[cur: cur+l] in self.word_set: break
word_list.append(sentence[cur: cur+l])
cur += l
return word_list
RMM算法 def rmm_cut(self, sentence='', max_len=6):
"""
使用逆向最大匹配法划分词语
:param sentence: str 待划分句子
:param max_len: int 最大词长 默认为6
:return: str-list 已分词的字符串列表
"""
sentence = sentence.decode('utf-8')
sen_len = sentence.__len__() # 句子的长度
cur = sen_len # 表示分词的位置
word_list = [] # 划分的结果
while cur > 0:
l = None
if max_len > cur:max_len = cur
for l in range(max_len, 0, -1):if sentence[cur-l: cur] in self.word_set: break
word_list.insert(0, sentence[cur-l: cur])
cur -= l
return word_list

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

主题: 算法三大
分页:12
转载请注明
本文标题:基于规则的分词算法(MM RMM算法)及python代码实现
本站链接:http://www.codesec.net/view/481687.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(34)