中文分词(*)
(1)概念:
在处理中文文本的时候,需要进行分词处理,将句子转化为词的表示。这个切词的过程就是中文分词,它是通过计算机自动识别出句子的词,在词间加入边界标记符,分隔出各个词汇,其主要困难在于分词歧义,未登录词、分词粒度粗细。
(2)中文分词方法
(1)规则分词
(2)统计分词
(3)混合分词
1、规则分词
简单高效、但对新词很难处理;基于规则分词是一种机械分词方法,主要通过维护字典,在切分语句时,将语句的每个字符串与词表中的词进行逐一匹配,找到则切分,否则不切分。按照匹配切分的方式,主要有最大匹配法、逆向最大匹配法以及双向最大匹配法。
1-1正向最大匹配法(MM)
1、基本思想:假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前字串中的前i个字作为匹配字段,查找字典。若字典中存在这样一个i字词,则匹配成功,匹配字段被作为一个词切分出来。如果词典中找不到这个一个i字词,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串重新进行匹配处理。如此下去,直到匹配成功,即切分出一个词或者剩余字串的长度为止。这样就完成了一轮匹配,然后取下一个i字字串进行匹配处理,直到文档被扫描完毕为止。
算法描述:
(1)从左向右取待切分汉语句的m个字符作为匹配字段,m为机器词典中最长词条的字符数。
(2)查找机器词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词,切分出来。若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切分出所有词为止。

class MM(object):
    def __init__(self):
        self.window_size=3
    def cut(self,text):
        result=[]
        index=0
        text_length=len(text)
        dic=['研究','研究生','生命','命','的','起源']
        while text_length>index:
            for size in range(self.window_size+index,index,-1):
                piece=text[index:size]
                if piece in dic:
                    index=size-1
                    break
                index=index+1
                result.append(piece+'---')
        print(result)
if __name__ == '__main__':
    text='研究生命的起源'
    tokenizer=MM()
    print(tokenizer.cut(text))