一些常用的开源分词工具
?
HTTPCWS:
基于HTTP协议的开源中文分词系统,
语言和平台:目前仅支持Linux系统
算法:HTTPCWS?使用“ICTCLAS?3.0?2009共享版中文分词算法”的API进行分词处理,得出分词结果。HTTPCWS?将取代之前的?PHPCWS?中文分词扩展。
PHPCWS(PHP中文分词扩展)
author:张宴
语言和平台:PHPCWS?是一款开源的PHP中文分词扩展,目前仅支持Linux/Unix系统。
算法:PHPCWS?先使用“ICTCLAS?3.0?共享版中文分词算法”的API进行初次分词处理,再使用自行编写的“逆向最大匹配算法”对分词和进行词语合并处理,并增加标点符号过滤功能,得出分词结果。ICTCLAS?3.0?商业版是收费的,而免费提供的?ICTCLAS?3.0?共享版不开源,词库是根据人民日报一个月的语料得出的,很多词语不存在。所以本人对ICTCLAS分词后的结果,再采用逆向最大匹配算法,根据自己补充的一个9万条词语的自定义词库(与ICTCLAS词库中的词语不重复),对ICTCLAS分词结果进行合并处理,输出最终分词结果。由于?ICTCLAS?3.0?共享版只支持GBK编码,因此,如果是UTF-8编码的字符串,可以先用PHP的iconv函数转换成GBK编码,再用phpcws_split函数进行分词处理,最后转换回UTF-8编码。
?????性能:58字节的一句话——“2009年2月13日,我编写了一款PHP中文分词扩展:PHPCWS?1.0.0。”,分词速度只需0.0003秒。对于那些采用二元交叉切分的搜索引擎,PHPCWS用在前端搜索层对用户输入的搜索关键字、短语进行分词处理,同样适合。PHPCWS开发的目的正在于此,对于短句、小文本中文分词切分,速度非常之快。
庖丁解牛分词:
语言和平台:Java?提供lucence??3.0?接口,仅支持Java语言。
性能:在PIII?1G内存个人机器上,1秒?可准确分词?100万?汉字。
算法:采用基于?不限制个数?的词典文件对文章进行有效切分
主要功能:使能够将对词汇分类定义。能够对未知的词汇进行合理解析
?
CC-CEDICT:
主要功能:提供一份以汉语拼音为中文辅助的汉英辞典,截至2009年2月8日,已收录82712个单词。其词典可以用于中文分词使用,而且不存在版权问题。Chrome中文版就是使用的这个词典进行中文分词的。
????亿思拓(ESTinside)中文分词组件
?可以作为lucene的一个模块调用,作为二元分词方法的替代。该组件直接扩展org.apache.lucene.analysis.Tokenizer和org.apache.lucene.analysis.Analyzer?类。
准确率:98%以上。
主要功能:同时支持分词和词性标注,提供参数调节分词准确性和切分速度。针对多线程使用优化,占用内存少。
语言和平台:100%采用java实现的分词组件,无内存泄漏问题。可长期不间断运行。
算法:采用多种分词方法结合,包括基于概率的n元切分方法,隐马尔科夫模型,未登录词识别算法,歧义识别算法和基于规则的方法??等。采用多个大规模语料库训练概率词库。
?
?
盘古分词
是一个中英文分词组件?
主要功能:
中文分词功能
?中文未登录词识别
?词频优先
?盘古分词可以根据词频来解决分词的歧义问题
多元分词
?盘古分词提供多重输出解决分词粒度和分词精度权衡的问题
中文人名识别
?强制一元分词
?繁体中文分词
?同时输出简体和繁体
?中文词性输出
?盘古分词可以将以登录词的中文词性输出给用户,以方便用户做进一步处理。
?全角字符支持
?盘古分词可以识别全角的字母和数字
英文分词
?英文专用词识别
一些英文简写是字母符号混合,或者是字母数字混合,这个分词起来就不能按照空格符号这样分割了,对于字母符号混合的如?U.S.A?,只要将这个词录入到字典中,盘古分词就可以分出整词。对于字母和数字混合的,盘古分词会自动作为整词输出。
?英文原词输出
?英文大小写同时输出
其他功能
?停用词过滤
对于一些标点符号,连词,助词等有时候需要在分词时过滤掉,盘古分词提供一个?StopWord.txt?文件,用户只要将需要过滤的词加入到这个文件中,并将停用词过滤开发打开,就可以过滤掉这些词。
?设置分词权值
盘古分词可以让用户对如下特性设置自定义权值
1?未登录词权值
2?最匹配词权值
3?次匹配词权值
4?再次匹配词权值
5?强行输出的单字的权值
6?数字的权值
7?英文词汇权值
8?符号的权值
9?强制同时输出简繁汉字时,非原来文本的汉字输出权值。
*用户自定义规则
?字典管理
?盘古分词提供一个字典管理工具?DictManage?通过这个工具,你可以增加,修改,和删除字典中的单词
?动态加载字典
?通过字典工具增加,修改,和删除字典中的单词后,保持字典,盘古分词会自动将新的字典文件加载进去,而不需要重新启动。
?关键词高亮组件
Lucene?提供了一个关键词高亮组件,但这个组件对中文的支持不是特别好,特别是如果还有多元分词的情况,处理的就更不好。盘古分词提供了一个针对中文和英文的关键词高亮组件?PanGu.HighLight?,其对中文的支持要好于Lucene?那个高亮组件。
?同义词输出(后续版本提供)
?Lucene.net?接口及示例
在PanGu4Lucene?这个包里面有我做的一个盘古+Lucene?的简单新闻搜索Web示例程序,Release?包里面有使用说明。
性能:Core?Duo?1.8?GHz?下单线程?分词速度为?390K?字符每秒,2线程分词速度为?690K?字符每秒。
算法:盘古分词提供的字典包括17万个中文常用单词,但这个字典依然不够完整,如果要分词更准确,需要适当维护一下这个字典。中文人名的识别能力取决于?ChsSingleName.txt,?ChsDoubleName1.txt,?ChsDoubleName2.txt?这三个文件,它们分别表示单子人名,双字人名的首字和双字人名的尾字。?
?
libmmseg
Author:李沫南
语言和平台:用C++编写的开源的中文分词软件,libmmseg主要被作者用来实现Sphinx全文检索软件的中文分词功能,因此作者给Sphinx提供了一个补丁文件,可以让Sphinx集成libmmseg,从而支持对于中文文章的全文检索功能。libmmseg从0.7.2版本开始,作者提供了ruby调用的接口,所以我们可以直接在ruby程序里面调用libmmseg进行分词了。特别是我们可以用ferret去调用libmmseg分词功能,从而让ruby原生支持中文的全文检索。?
算法:“基于词库的最大匹配算法”
性能:分词速度为每秒300KB左右。?
IKAnalyzer
开源轻量级的中文分词工具包
语言和平台:基于java语言开发,最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。
算法:采用了特有的“正向迭代最细粒度切分算法“。采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。优化的词典存储,更小的内存占用。支持用户词典扩展定义。针对Lucene全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。
性能:60万字/秒
mmseg4j
算法:Chih-Hao?Tsai?的MMSeg算法实现的中文分词器,并实现lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。
算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex加了四个规则过虑。?
准确率:98.41%?
?
imdict-chinese-analyzer
是imdict智能词典的智能中文分词模块
算法:基于隐马尔科夫模型(Hidden?Markov?Model,HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java)
可以直接为lucene搜索引擎提供简体中文分词支持?
主要功能:
1,?完全Unicode支持
分词核心模块完全采用Unicode编码,无须各种汉字编码的转换,极大的提升了分词的效率。
2.?提升搜索效率
根据imdict智能词典的实践,在有智能中文分词的情况下,索引文件比没有中文分词的索引文件小1/3
3.?提高搜索准确度
imdict-chinese-analyzer采用了HHMM分词模型,极大的提高了分词的准确率,在此基础上的搜索,比对汉字逐个切分要准确得多!
4.?更高效的数据结构
为了提高效率,针对常用中文检索的应用场景,imdict-chinese-analyzer对一些不必要的功能进行了删减,例如词性标注、人名识别、时间识别等等。另外还修改了算法的数据结构,在内存占用量缩减到1/3的情况下把效率提升了数倍。
?
?
ictclas4j
imdict-chinese-analyzer
ICTCLAS?3.0
分词速度(字节/秒)
13.86
483.64
678.15
分词速度(汉字/秒)
7439
259517
363888
测试环境为:酷睿E7200双核,内存2G,JDK参数为:"-Xms512m?-Xmx1024m?"
由此对比可以看出,?imdict-chinese-analyzer的分词效率与C++实现的ICTCLAS?3.0的分词效率在同一个数量级,是?ictclas4j?的?36?倍!
ictclas4j中文分词系统是sinboy在中科院张华平和刘群老师的研制的FreeICTCLAS的基础上完成的一个java开源分词项目,简化了原分词程序的复杂度,旨在为广大的中文分词爱好者一个更好的学习机会。?
?
OpenCLAS
是一个开源的中文词法分析库。
主要功能:其中包括了中文分词、词性标注等功能。系统使用基于概率的多层HMM。可以对已登录词和未登录词进行识别分析。
OpenCLAS是对原有的ICTCLAS?(中科院中文词法分析系统)进行的重写。OpenCLAS将不包含任何ICTCLAS中的源代码,并且以BSD协议发布。因此其代码可以在满足BSD协议的前提下,用于包括商用在内的各种场合。
OpenCLAS将包含三个语言分支,C++,?Java和C#。(目前只实现了C++的版本)。