中文分词软件包的使用

 

中文分词 (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++编写,支持LinuxFreeBSDWindows系列操作系统,支持C/C++/C#/Delphi/Java等主流的开发语言
  • ICTCLAS采用了层叠隐马尔可夫模型(Hierarchical Hidden Markov Model),将汉语词法分析的所有环节都统一到了一个完整的理论框架中,获得最好的总体效果,相关理论研究发表在顶级国际会议和杂志上,从理论上和实践上都证实了该模型的先进性

1.2. ICTCLAC分词原理简介

  • 该系统基于隐马尔科夫模型提出了层叠隐马尔科夫模型(CHMM),CHMM实际上是若干个层次的简单HMM组合,各层隐马尔科夫模型之间以以下几种方式相互关联:各层HMM之间共享一个切分词图作为公共数据结构(如图1),每一层隐马尔科夫模型都采用N-Best策略,将产生的最好的若干个结果送到此图中供更高层次的模型使用。
  • 该CHMM由低到高依次为:原子切分,简单未登录词识别,嵌套未登录词识别,这几层中共享二元切分词图,并在每层对该数据结构进行修改,使得传递给基于类地隐马分词的参数越来越准确,最后一层为隐马词性标注。
    中文分词软件包的使用
    • 将下载下的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是 imdict智能词典的智能中文分词模块,作者高小平,算法基于隐马尔科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java),可以直接为lucene搜索引擎提供中文分词支持。

    imdict-chinese-analyzer测试使用

    • 下载链接http://ictclas.org/Down_OpenSrc.asp
    • 下到的压缩包解压后就是一个java工程,eclipse直接导入即可,但由于其开发的环境是UTF8所以要将eclipse的工作空间的编码也设置为utf8test包里面的AnalyzerTest就是其用法,看了以后就可以直接用了

    imdict-chinese-analyzer优缺点

    • 优点

    开源,分词速度快,效率高;

    • 缺点

    不支持自己添加词库,不支持词性标注(开发人员自己说是为了提高速度),data文件夹自带了两个字典coredict核心字典、bigramdict词关系字典,这是两个最重要的词典,没有地名和人名的词典,所以要识别人名地名比较麻烦,据说要用层次hmm,先粗分在细分。


    1.3.5 ANSJ 版本

    ANSJ介绍

    • ANSJ 是一个开源的Java 中文分词工具,基于中科院的 ICTCLAS 中文分词算法,采用隐马尔科夫模型(HiddenMarkov Model, HMM)。孙健(ICTCLAS作者张华平的学生)重写了一个Java版本,并且全部开源,使得 ANSJ可用于人名识别、地名识别、组织机构名识别、多级词性标注、关键词提取、指纹提取等领域,支持行业词典、用户自定义词典。分词效果和速度都超过开源版的ICTCLAS.
    • ANSJ1.4在原来ANSJ的基础上做了进一步的改进(类似Stanford word segment)增加了google语义模型+条件随机场模型的中文分词的java实现.提供了给予CRF++ wapiti等条件随即场工具的调用接口.用户可以及自定义训练model。目前实现了中文分词,中文姓名识别 , 用户自定义词典,可以应用到自然语言处理等方面。
    • 源码下载:https://github.com/ansjsun/ansj_seg/   
    • 文档说明:http://ansjsun.github.io/ansj_seg/
    • 作者微博:http://weibo.com/ansjsun  

    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  

    来源:qianwenhong

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年11月8日
下一篇 2014年11月8日

相关推荐