append()方法_NLP中常用的分词方法和实现

本文介绍了分词的基本概念和三种主要方法:基于字符串匹配、统计和理解的分词。详细阐述了正向、逆向最大匹配算法,以及如何处理歧义和优化。还探讨了基于统计的分词方法,如N元文法模型和动态规划,并提到了基于理解的分词,涉及句法、语义分析。最后,提到了一些常用的中文分词工具,如jieba、SnowNLP、THULAC和NLPIR。
摘要由CSDN通过智能技术生成

a7a25db957feec58a5ec421d10c91932.png

分词简介

分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂得多、困难得多。

现在的分词方法大概可以分为三个类别:基于字符串匹配的分词方法、基于统计的分词方法和基于理解的分词方法。

基于字符串匹配的分词方法

基于字符串匹配的方法我们又可以称之为机械分词方法,它是按照一定的扫描方式将待分词的句子中的词条与语料库中的词进行匹配,然后返回相应的结果。这种匹配的算法按照扫描的方式又可以分成

  1. 正向最大匹配法(由左到右的方向)
  2. 逆向最大匹配法(由右到左的方向)
  3. 最少切分(使每一句中切出的词数最小)
  4. 双向最大匹配法(进行由左到右、由右到左两次扫描)

语料库(词库):[我们,我,今天,特别,特别想,非常,非常想,吃,芒果]

待分词的句子:我今天特别想吃芒果

正向最大匹配算法:首先需要给定一个最大的词条长度,假设定义最大词条长度(滑动窗口的长度)为max_num=3,我们首先取出句子的前3个字符,看前3个字符是否存在于词库中,如果存在,则返回第一个分词,滑动窗口向后滑动3个位置;如果不存在,我们把滑动窗口从右向左缩小1,判断前两个字符是否存在于词库,如果存在,则返回这个分词,滑动窗口向后滑动2,不存在则继续缩小滑动窗口......直至将整个句子遍历完,就得到了最后的分词结果。

一开始滑动窗口的位置在“我今天”,这个词不存在词库里面,我们将滑动窗口缩小1,此时位置在“我今”,仍然不存在词库里,窗口再缩小1,“我”存在词库里,则返回第一个分词结果,将滑动窗口向后滑动1个距离;此时窗口的位置在“今天特”,我们如此重复第一个过程直至遍历完整个句子即可,按照这个方法我们最后的到的分词结果应该是:“我 今天 特别想 吃 芒果”

corpus = ['我们', '我', '今天', '特别', '特别想', '非常', '非常想', '吃', '芒果']
sentence = '我今天特别想吃芒果啊'
max_num = 3
def word_segment1(sentence, corpus, max_num):
    result = []
    start = 0
    end = min(start + max_num,len(sentence))
    while(start!=len(sentence)):
        if start==end:
            result.append(sentence[start])
            if sentence[start] not in corpus:
                corpus.append(sentence[start])  #假如词库中找不到单词,则返回这个单词,并往词库中添加;看具体的场景,如果词库中没有这个词则也可以直接返回空值,表示分词失败
            start +=1
            end = min(start + max_num, len(sentence))
        if sentence[start:end] in corpus:
            result.append(sentence[start:end])
            start += len(result[-1])
            end = min(start + max_num,len(sentence))
        else:
            end -=1
    return corpus, r
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值