中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。下面简单介绍几个中文分词工具。中文版本主要介绍ICTCLAS系列,英文版的包括LingPipe,StarnfordWord Segmenter,以及OpenNlp软件包。
1. ICTCLAS
1.1. ICTCLAS 介绍
- ICTCLAS (Institute of Computing Technology, Chinese Lexical Analysis System)分词系统是由中科院计算所的张华平、刘群所等开发的一套获得广泛好评的分词系统,主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。
- ICTCLAS全部采用C/C++编写,支持Linux、FreeBSD及Windows系列操作系统,支持C/C++/C#/Delphi/Java等主流的开发语言。
- ICTCLAS采用了层叠隐马尔可夫模型(Hierarchical Hidden Markov Model),将汉语词法分析的所有环节都统一到了一个完整的理论框架中,获得最好的总体效果,相关理论研究发表在顶级国际会议和杂志上,从理论上和实践上都证实了该模型的先进性。
1.2. ICTCLAC分词原理简介
- 该系统基于隐马尔科夫模型提出了层叠隐马尔科夫模型(CHMM),CHMM实际上是若干个层次的简单HMM组合,各层隐马尔科夫模型之间以以下几种方式相互关联:各层HMM之间共享一个切分词图作为公共数据结构(如图1),每一层隐马尔科夫模型都采用N-Best策略,将产生的最好的若干个结果送到此图中供更高层次的模型使用。
-
- 将下载下的ICTCLAS4J解压缩得到bin,data,src, segtag.bat 4个文件
- 在Eclipse上建立一个project,命名为ictclas4jTest
- 把Data文件夹整个拷贝到Eclipse项目的文件夹下,而bin目录下的org文件夹整个拷贝到Eclipse项目的bin目录下,把src目录下的org文件夹整个拷贝到Eclipse项目的src目录下
- 导入commons-lang.jar http://download.csdn.net/detail/qianwen5201314/7716237
- 分词结果(可以改变源码使其出现词性标注)
BUG与不足
- BUG1: 在使用分词时候,人名会出现漏字问题(如上测试) 。
PosTagger.java文件中人名识别部分personRecognize方法里面出错了,注释掉if (sn.getPos() <4 &&unknownDict.getFreq(sn.getWord(),sn.getPos()) < Utility.LITTLE_FREQUENCY),参见 http://tinypig.iteye.com/blog/250926
- BUG2: AdjustSeg.java里面的 finaAdjust()函数里要注意将while语句的判断条件while (true)改为while (true && i + 1 < optSegPath.size()) ,否则也可能发生越界错误
- BUG3: 当汉字首字节为负如“癵”*(实际上可能是乱码),转换找词表的时候会发生越界错误,这个bug在开源的ictclas里面也存在,但是c++不检查越界,因此不 错。因此在Dictionary.java中的findInOriginalTable方法中加入判断if(index < 0 || index >=Utility.CC_NUM) return -1;
- 不足:速度比较慢。
代码里面用到了很多java的String的操作,这个其实比较废时间,还有词典的组织,也是用的String的数组,再二分查找,用hash应该会快一点。
ICTCLAS因为有一个卖钱的商业版,所以这个开源的版本毛病还是比较多的。比如有一些词库中不存在的词,就会扔空指针的错误,比如“深圳”,“大阪”这样的词。 还有对一些特殊的字符串模式,比如单引 隔几个字符再加一个什么什么的,就会 错还有一些特殊的字符,也会 错。
imdict-chinese-analyzer简单介绍
imdict-chinese-analyzer测试使用
- 下载链接http://ictclas.org/Down_OpenSrc.asp
- 下到的压缩包解压后就是一个java工程,eclipse直接导入即可,但由于其开发的环境是UTF8所以要将eclipse的工作空间的编码也设置为utf8,test包里面的AnalyzerTest就是其用法,看了以后就可以直接用了
imdict-chinese-analyzer优缺点
- 优点
开源,分词速度快,效率高;
- 缺点
不支持自己添加词库,不支持词性标注(开发人员自己说是为了提高速度),data文件夹仅自带了两个字典coredict核心字典、bigramdict词关系字典,这是两个最重要的词典,没有地名和人名的词典,所以要识别人名地名比较麻烦,据说要用层次hmm,先粗分在细分。
1.3.5 ANSJ 版本
ANSJ介绍
- ANSJ1.4在原来ANSJ的基础上做了进一步的改进(类似Stanford word segment)增加了google语义模型+条件随机场模型的中文分词的java实现.提供了给予CRF++ wapiti等条件随即场工具的调用接口.用户可以及自定义训练model。目前实现了中文分词,中文姓名识别 , 用户自定义词典,可以应用到自然语言处理等方面。
- 源码下载:https://github.com/ansjsun/ansj_seg/
- 文档说明:http://ansjsun.github.io/ansj_seg/
ANSJ测试使用
1.3.6 Rwordseg版本
Rwordseg简单介绍
Rwordseg 是一个R环境下的中文分词工具,使用rJava调用Java分词工具Ansj。当前版本的Rwordseg包完全引用了 Ansj 包,只是简单提供了R的接口,并根据R中处理文本的习惯进行了调整,以后可能还会纳入其他的分词工具或者自己开发一些新的功能。
Rwordseg说明
使用说明链接 http://jliblog.com/app/rwordseg
安装与使用
详细的使用可以参照 R包的中文文档 Rwordseg_Vignette_CN.pdf
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
- 将下载下的ICTCLAS4J解压缩得到bin,data,src, segtag.bat 4个文件