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


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

  1. 用python实现入门级NLP

    今天看到一篇博文,是讲通过python爬一个页面,并统计页面词频的脚本,感觉蛮有意思的 Python NLP入门教程:http://python.jobbole.com/88874/ 本文简要介绍Py ...

  2. 学习NLP:《精通Python自然语言处理》中文PDF+英文PDF+代码

    自然语言处理是计算语言学和人工智能之中与人机交互相关的领域之一. 推荐学习自然语言处理的一本综合学习指南<精通Python自然语言处理>,介绍了如何用Python实现各种NLP任务,以帮助 ...

  3. Python 自然语言处理(1)中文分词技术

    中文分词技术 中文自动分词可主要归纳为“规则分词”“统计分词”和“混合分词”,规则分词主要是通过人工设立词库,按照一定方式进行匹配切分,实现简单高效,但对新词很难进行处理,统计分词能够较好应对新词发现 ...

  4. Python自然语言处理(1):初识NLP

    由于我们从美国回来就是想把医学数据和医学人工智能的事认真做起来,所以我们选择了比较扎实的解决方法,想快速出成果的请绕道.我们的一些解决方法是:1.整合公开的所有医学词典,尽可能包含更多的标准医学词汇: ...

  5. Python自然语言处理学习——jieba分词

    jieba——“结巴”中文分词是sunjunyi开发的一款Python中文分词组件,可以在Github上查看jieba项目. 要使用jieba中文分词,首先需要安装jieba中文分词,作者给出了如下的 ...

  6. 基于规则的中文分词 - NLP中文篇

    之前在其他博客文章有提到如何对英文进行分词,也说后续会增加解释我们中文是如何分词的,我们都知道英文或者其他国家或者地区一些语言文字是词与词之间有空格(分隔符),这样子分词处理起来其实是要相对容易很多, ...

  7. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  8. hanlp的基本使用--python(自然语言处理)

    hanlp拥有:中文分词.命名实体识别.摘要关键字.依存句法分析.简繁拼音转换.智能推荐. 这里主要介绍一下hanlp的中文分词.命名实体识别.依存句法分析,这里就不介绍具体的hanlp的安装了,百度 ...

  9. 转-Python自然语言处理入门

      Python自然语言处理入门 原文链接:http://python.jobbole.com/85094/ 分享到:20 本文由 伯乐在线 - Ree Ray 翻译,renlytime 校稿.未经许 ...

  10. 国内外自然语言处理(NLP)研究组

     国内外自然语言处理(NLP)研究组 *博客地址 http://blog.csdn.net/wangxinginnlp/article/details/44890553 *排名不分先后.收集不全,欢迎 ...

随机推荐

  1. Logstash:使用ELK堆栈进行API分析

  2. Elasticsearch:mapping定制

  3. PAT (Basic Level) Practice 1028 人口普查 分数 20

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...

  4. POJ2763 Housewife Wind (树链剖分)

    差不多是模板题,不过要注意将边权转化为点权,将边的权值赋给它所连的深度较大的点. 这样操作过后,注意查询ask()的代码有所改变(见代码注释) 1 #include<cstdio> 2 # ...

  5. C#中Math.Round()实现中国式四舍五入问题

    C#中的Math.Round()并不是使用的"四舍五入"法.实际上是四舍六入五取偶. 对于这个问题我们常见的解决方式是使用MidpointRounding.AwayFromZero ...

  6. Nebula Graph介绍和SpringBoot环境连接和查询

    Nebula Graph介绍和SpringBoot环境连接和查询 转载请注明来源 https://www.cnblogs.com/milton/p/16784098.html 说明 当前Nebula ...

  7. 常见的 Kerberos 错误消息

    常见的 Kerberos 错误消息 问题:All authentication systems disabled; connection refused 原因:此版本的 rlogind 不支持任何验证 ...

  8. vulnhub靶场之RED: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:RED: 1,地址我这里设置的桥接,,下载地址:https://download.vulnhub.com/red/Red.ova,下载后直接Vi ...

  9. MISC 网刃杯2022

    ​ MISC 玩坏的winxp 难度系数:4.0 题目描述:小敏的电脑Windows XP Professional不小心被玩坏了,里边有重要的东西,你能帮帮她吗? 利用whihex挂载 查看分区1 ...

  10. 有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来。

    第一题 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...