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


最新文章

  1. mysql循环获取结果集
  2. IE7 -- 鼠标移入显示下拉框 不显示的问题 / 以及宽度问题
  3. ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 The Book List
  4. PL/SQL常用设置 可看引用位置更清晰直观 引自:http://blog.csdn.net/xiaoqforever/article/details/27695569
  5. asp.net 前后台交互
  6. 多台Mac电脑使用一个apple开发者账号
  7. HBase数据存储格式
  8. ubuntu 常用命令记录
  9. JAVA中获取文件MD5值的四种方法
  10. 看不到git远程分支
  11. Vim 复制粘帖格式错乱问题的解决办法
  12. 解析key值不确定的json数据
  13. sublime Text3下载与安装以及解决安装Install Package时遇见的问题
  14. Django中ORM介绍和字段及字段参数
  15. C#设计模式六大原则概述
  16. alert换行警示
  17. css文字超出显示省略号
  18. 好记性不如烂笔头-linux学习笔记2kickstart自动化安装和cacti
  19. C# comport 打印图像
  20. 在Windows Server 2012上安装SharePoint 2010 SP1

热门文章

  1. docker bridge 到 k8s pod 跨节点网络通信机制演进
  2. CentOS7.x安装VNC
  3. Springboot配置文件参数使用docker-compose实现动态配置
  4. 记录Gerrit2.8.4环境迁移、安装、配置以及问题解决
  5. while.for循环和基本数据类型内置方法
  6. 改善C#程序的方法-2 使用TryParse
  7. Linux命令系列之ls——原来最简单的ls这么复杂
  8. Spring MVC(配置、入门)
  9. spring boot+vue前后端项目的分离(我的第一个前后端分离项目)
  10. 推广TrustAI可信分析:通过提升数据质量来增强在ERNIE模型下性能