【中文分词】亲手开发一款中文分词器--前言

原创 2015年07月08日 15:47:35

我曾亲手写过一个中文分词器,分别使用java和c#实现了两个版本。实现原理类似,精度相近,并且java版本发布在了我的个人网站上,这里附上地址。http://august-charter-92912.appspot.com/nlp,注意了,这是Google App Engine上的,所以看到谷歌,你懂的,需要访问,请发功。


一、简介

所谓分词,就是将一个完整的句子按正确的意思将每一个词语提取出来的操作。分词是自然语言处理的第一个关卡,是让计算机处理人类语言的基础。但是计算机是无法识别人类语言中词汇这一概念的,更何况如何去识别理解词语了。所以如何通过有效的手段来进行分词是一个重要节点性问题。


对于英文分词来讲,由于英文词汇间由空格隔开,因此无需程序从句子中去提取词汇。这一点上英文比中文容易多了。英文分词更多的重心是放在如何将各种时态的词汇映射到同一种形式上,以方便计算机理解。这里提供一种英文分词方案,基于词干分词(参考文章《stemming segmentation,基于词干分词》)。对于中文这种词与词之间没有任何间隔的语言来讲,比如日语,韩语等,如何确定一个句子中包含有哪些词语才是重点,时态什么的,反而不是问题了。


首先中文分词有一个很根本的问题,什么是词?其实尚且人类都没有一个准确的定义。不同的人对于同一个词语的认可度是不近相同的,比如:“看一看”,其实分开为“看,一,看”三个词也没有太大问题,又比如“听到”,分解开为“听,到”好像也可以,因此人类都无法准确定义词这一概念,这就使得计算机分词特别困难。同时,句子的歧义也是制约分词准确性的一大因素,比如:“努力的人才能够成功”,其中“人才”需要分开看待,此处不为一个词,但是“公司需要寻找优秀的人才”,此处很明显“人才“必须合并起来。还有一个更绝的例子:”原子组合成分子“,其中”组合成分子“五个字两两组合都能够成为一个词,但是很明显我们应该得到”组合,成,分子“才是正确的结果。最后,还有一种词语是影响分词精度的最严重因素——未登录词,就是诸如人名,地名,专有名词等特殊词语组合,他们无从在字典中查询但是却合法,这类词语需要分词器重点考虑,比如”威廉姆斯“,”集成电路“,”最大熵“,”神马“等等。


二、方法介绍

中文分词发展出了大概三种基本方法,字典匹配分词,统计学习分词,理解分词。我实现的是一个统计学习分词器,所以我之后的文章会重点讨论它。


字典匹配分词有正向最大匹配,逆向最大匹配等。我罗列不完,因为没有花太多时间研究。这里提供两个开源项目供大家下载:IKAnalyzer,下载1下载2

IKAnalyzer是一个java开发的轻量级中文分词工具包,采用正向迭代最细粒度切分算法,号称具有83万字/秒的处理速度。具体信息去链接中看,这里略过。

另外一个是复旦大学计算机学院维护的开元分词工具包,FudanNLP,具体连接可以去Git上搜索。也是一款好用的开源分词器,基于字典匹配分词。


对于理解分词,我从来没有研究过其中的奥秘,但是目前来看,其分词精度还无法与统计学习相提并论。


最后来说说统计学习分词。统计学习分词的原理是使用一个标准的中文语料库通过统计学习的方式来训练分词器,使分词器能够在对大规模数据进行整理的过程中,记录下词语的特性。常用的训练模型有隐马尔科夫(HMM),条件随机场(CRF),最大熵(MEM)等。本博客中有一篇国外论文的译文,《隐马尔科夫模型详解》,可以帮助你系统地学习马尔科夫随机过程。


我的这个中文分词器使用的是一阶隐马尔科夫模型,所以希望继续阅读下去请首先简单学习一下隐马尔科夫模型。分词语料库来自微软亚洲研究院,这里提供下载链接,编程语言为java。准备好了就开始下一篇文章《【中文分词】亲手开发一款中文分词器——原理》,重点讨论我的分词器的原理和代码实现。



版权声明:本文为博主原创文章,未经博主允许不得转载。

基于lucene的案例开发:分词器介绍

在lucene创建索引的过程中,分词技术是一个十分重要的环节,介绍了7中比较常见的分词技术 CJKAnalyzer、KeywordAnalyzer、SimpleAnalyzer、StopAnalyze...

10大Java开源中文分词器的使用方法和分词效果对比

原文地址:http://my.oschina.net/apdplat/blog/412921 本文的目标有两个: 1、学会使用10大Java开源中文分词器 2、对比分析10 大J...
  • yjl33
  • yjl33
  • 2016年06月14日 10:17
  • 4797

中文分词器性能比较

原文: http://www.cnblogs.com/wgp13x/p/3748764.html 摘要:本篇是本人在Solr的基础上,配置了中文分词器,并对其进行的性能测试总结,具...

Lucene 4.4.0中常用的几个分词器

一、WhitespaceAnalyzer 以空格作为切词标准,不对语汇单元进行其他规范化处理。很明显这个实用英文,单词之间用空格。 package bond.lucene.analyzer; ...

10个中文分词器

1、word分词器 2、ansj分词器 3、mmseg4j分词器 4、ik-analyzer分词器 5、jcseg分词器 6、fudannlp分词器 7、smartcn分词器 8、jieba分词器 9...
  • sqzhao
  • sqzhao
  • 2015年08月13日 22:30
  • 470

一个使用中文分词的完整Demo

本文将首先将介绍如何在ES中使用中文分词器IK,然后对比一下IK分词器和默认的standard分词器的差别,最后给出一个Java访问ES的demo 1,安装中文分词器。 下载与ES...

目前几个流行的Lucene中文分词器对比

转载自:http://www.iteye.com/news/9637 1. 基本介绍: paoding :Lucene中文分词“庖丁解牛” Paoding Analysis imdict...
  • lkx94
  • lkx94
  • 2015年03月14日 15:33
  • 2902

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

solr4.7中文分词器(ik-analyzer)配置

solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器。 solr版本:4.7.0 需要ik-a...

中文分词器的总结

0 —— Lucene & Nutch是一种神奇的东西,包含了语义分析,自然语言处理,中文分析,网络爬取,索引建立,html解析等,下面介绍几种常用的中文分词工具 1 —— StandardAna...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【中文分词】亲手开发一款中文分词器--前言
举报原因:
原因补充:

(最多只允许输入30个字)