SCWS:
Author:Hightman
算法:基于词频词典的机械中文分词引擎,采用的是采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词
准确率:经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。
性能:45Kb左右的文本切词时间是0.026秒,大概是1.5MB文本/秒,
语言和平台:SCWS 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码。支持PHP4和PHP 5。
版本列表
版本 | 类型 | 平台 | 性能 |
SCWS-1.1.x | C 代码 | *Unix*/*PHP* | 准确: 95%, 召回: 91%, 速度: 1.2MB/sec |
php_scws.dll(1) | PHP扩展库 | Windows/PHP 4.4.x | 准确: 95%, 召回: 91%, 速度: 40KB/sec |
php_scws.dll(2) | PHP扩展库 | Windows/PHP 5.2.x | 准确: 95%, 召回: 91%, 速度: 40KB/sec |
php_scws.dll(3) | PHP扩展库 | Windows/PHP 5.3.x | 准确: 95%, 召回: 91%, 速度: 40KB/sec |
PSCWS23 | PHP源代码 | 不限 (不支持UTF-8) | 准确: 93%, 召回: 89%, 速度: 960KB/min |
PSCWS4 | PHP源代码 | 不限 | 准确: 95%, 召回: 91%, 速度: 160KB/min |
ICTCLAS: 汉语词法分析系统ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System)
性能:分词速度单机996KB/s,API不超过200KB,各种词典数据压缩后不到3M.
准确率:分词精度98.45%,
语言和平台:ICTCLAS全部采用C/C++编写,支持Linux、FreeBSD及Windows系列操作系统,支持C/C++、C#、Delphi、Java等主流的开发语言。
Author:中国科学院计算技术研究所
主要功能:中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典;支持繁体中文;支持GBK、UTF-8、UTF-7、UNICODE等多种编码格式。
算法:完美PDAT大规模知识库管理技术(200510130690.3),在高速度与高精度之间取得了重大突破,该技术可以管理百万级别的词典知识库,单机每秒可以查询100万词条,而内存消耗不到知识库大小的1.5倍。层叠隐马尔可夫模型(Hierarchical Hidden Markov Model) ,该分词系统的主要是思想是先通过CHMM(层叠形马尔可夫模型)进行分词,通过分层,既增加了分词的准确性,又保证了分词的效率.共分五层,如下图所示。基本思路是进行原子切分,然后在此基础上进行N-最短路径粗切分,找出前N个最符合的切分结果,生成二元分词表,然后生成分词结果,接着进行词性标注并完成主要分词步骤.
基于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万 汉字。
算法:采用基于 不限制个数 的词典文件对文章进行有效切分
主要功能:使能够将对词汇分类定义。能够对未知的词汇进行合理解析
主要功能:提供一份以汉语拼音为中文辅助的汉英辞典,截至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 这三个文件,它们分别表示单子人名,双字人名的首字和双字人名的尾字。
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++的版本)。