Day3-中文分词技术(常用分词技术介绍)

1:分词技术

1.1:规则分词

基于规则的分词是一种机械分词的方法,主要是通过维护词典,在切分语句时,将语句的每个字符串与词表中的词进行逐一匹配,找到则切分,否则不切分。

1.1.1 正向最大匹配法

正向最大匹配法(Maximum Match Method,MM法)的基本思想:假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前子串中的前i个字作为匹配字段,查找字典。如果字典中存在这样的一个i字词,则匹配成功,匹配字段被作为一个词切分出来。如果词典中找不到这样的一个i字词,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串重新进行匹配处理。如此进行下去,直到匹配成功,即切分出一个词或剩余字串的长度为0为止。这样就完成了一轮匹配,然后取下一个i字字串进行匹配处理,直到文档被扫描完为止。

算法描述:

1:从左向右取待切分汉语句的m个字符作为匹配字段,m为机器词典中最长词条的字符数。

2:查找机器词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词切分出来。若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程明知道切分出所有词为止。

例如:

现在有个词典,最长词的长度是5,词典中有“南京市长”和“长江大桥”两个词。

现对“南京市长江大桥”

正向最大匹配法结果:“南京市长”,“江”,“大桥”

示例代码:

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):  # 4,0,-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))

输出结果:

['研究生----', '命----', '的----', '起源----', '真----', '牛皮----', '车----', '呀----']

如此可看结果并不能让人很满意。

1.1.2 逆向最大匹配法

逆向最大匹配法(Reverse Maximum Match Method,RMM法)原理:基本原理与MM法相同,不同的是分词切分的方向与MM法相反。

现对“南京市长江大桥”进行逆向最大匹配法,结果:“南京市”,“长江大桥”。

这样的结果看似是对的,但是如果是 南京的市长 姓名是 "江大桥" 呢?这样分词 还是不对的。

示例代码:

class RMM(object):
    def __init__(self):
        self.window_size = 3

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值