【nlp | 分词】使用最大匹配(max matching)分词

        最大匹配的分词方法是通过设置最大的匹配长度,对输入的sentence基于已有词典进行匹配分词。例如说,词典为“自然,语言,自然语言,处理,自然语言处理”,输入的sentence是“自然语言处理”,当设置max_len为6的时候,“自然语言处理”就会分成一个词,当设置max_len为5的时候,就会分为“自然语言,处理”。

下面是简单的Python代码实现:

class Segmentation:
    def __init__(self, vocab):
        '''
        :param vocab: 词典
        '''
        self.vocab = vocab

    def max_match_forword(self, input_sentence, max_len:int):
        result = []
        tmp = 0
        while tmp < len(input_sentence):
            for i in range(max_len):
                index = tmp + max_len -i
                if input_sentence[tmp: index] in self.vocab:
                    result.append(input_sentence[tmp:index])
                    tmp = index
                    break
                elif index == 1 + tmp:
                    result.append(input_sentence[tmp])
                    tmp = index
        return result



if __name__ == '__main__':
    # import jieba
    # jieba.add_word('自然语言处理')
    # i = jieba.cut_for_search('自然语言处理是计算机科学领域与人工智能领域中的一个重要方向')
    # print('\',\''.join(i))
    vocab = ['自然','语言','自然语言','自然语言处理','处理','计算','算机','科学','计算机','计算机科学','领域','人工','智能','人工智能','领域','一个','重要','方向']
    model = Segmentation(vocab)
    sentence = '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向'
    result = model.max_match_forword(sentence, max_len=7)
    print(result)

输出:['自然语言处理', '是', '计算机科学', '领域', '与', '人工智能', '领域', '中', '的', '一个', '重要', '方向']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值