python自然语言处理(NLP)1------中文分词1,基于规则的中文分词方法

python中文分词方法之基于规则的中文分词


目录

常见中文分词方法

推荐中文分词工具

参考链接


一、四种常见的中文分词方法:

  • 基于规则的中文分词
  • 基于统计的中文分词
  • 深度学习中文分词
  • 混合分词方法

基于规则的中文分词

包括, 正向最大匹配法,逆向最大匹配法和双向最大匹配法。
最大匹配方法是最有代表性的一种基于词典和规则的方法,其缺点是严重依赖词典,无法很好地处理分词歧义和未登录词。优点是由于这种方法简单、速度快、且分词效果基本可以满足需求,因此在工业界仍然很受欢迎。

正向最大匹配法

思想:
正如方法名称,正向表示对句子从左到右选择词典中最长的词条进行匹配,获得分词结果。
1、统计分词词典,确定词典中最长词条的字符m;
2、从左向右取待切分语句的m个字符作为匹配字段,查找词典,如果匹配成功,则作为一个切分后的词语,否则,去掉待匹配字符的最后一个继续查找词典,重复上述步骤直到切分出所有词语。

算法详细描述:
可参考博客正向最大匹配法算法详细介绍

Coding举例:

dictA = ['南京市', '南京市长', '长江大桥',  '大桥']

maxDictA = max([len(word) for word in dictA])

sentence = "南京市长江大桥"

def cutA(sentence):
    result = []
    sentenceLen = len(sentence)
    n = 0

    while n < sentenceLen:
        matched = 0
        for i in range(maxDictA, 0, -1):
            piece = sentence[n:n+i]
            if piece in dictA:
                result.append(piece)
                matched = 1
                n = n + i
                break
        if not matched:
            result.append(sentence[n])
            n += 1
    print(result)

cutA(sentence)  # ['南京市长', '江', '大桥']

说明:具体应用中需要去除停用词

逆向最大匹配法

思想:
与正向最大匹配原理相同,主要差异是:
1、对句子从右到左选择词典中最长的词条进行匹配,获得分词结果;
2、当匹配失败时,去掉待匹配字符的最前面的一个继续查找词典。

Coding举例:

dictB = ['南京市', '南京市长', '长江大桥',  '大桥']

maxDictB = max([len(word) for word in dictA])

sentence = "南京市长江大桥"

def cutB(sentence):
    result = []
    sentenceLen = len(sentence)

    while sentenceLen > 0:
        word = ''
        for i in range(maxDictB, 0, -1):
            piece = sentence[sentenceLen-i:sentenceLen]
            if piece in dictB:
                word = piece
                result.append(word)
                sentenceLen -= i
                break

        if word is '':
            sentenceLen -= 1
            result.append(sentence[sentenceLen])

    print(result[::-1])

cutB(sentence)  # ['南京市', '长江大桥']

双向最大匹配法

思想:
将正向最大匹配和逆向匹配得到的分词结果进行比较,按照最大匹配原则,选择切分总词数最少的作为最终分词结果。

举例:
dictA:# [‘南京市长’, ‘江’, ‘大桥’]
dictB: # [‘南京市’, ‘长江大桥’]
最终选择,dictB的结果。


总结:词典简单高效,但是词典构建工作量巨大,对于新词切分总慢一步,很难通过词典覆盖到所有词。


二、推荐中文分词工具

请参考另外一篇文章,链接如下:

python 中文分词工具介绍


三、参考链接

内容:书籍《python自然语言处理算法与实战核心算法与实战》
中文信息处理报告2016
代码:https://github.com/nlpinaction/learning-nlp


posted @ 2022-11-30 18:30  风兮177  阅读(524)  评论(0编辑  收藏  举报