一些常用的开源分词工具

SCWS

   Author Hightman

算法: 基于词频词典的机械中文分词引擎,采用的是采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词

准确率:经小范围测试大概准确率在 90% ~ 95%  之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。

性能:45Kb 左右的文本切词时间是 0.026 秒,大概是 1.5MB 文本 / 秒,

  语言和平台: SCWS 采用纯  代码开发,以  Unix-Like OS  为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持  GBK UTF-8 BIG5  等汉字编码。支持 PHP4 PHP 5

版本列表

版本

类型

平台

性能

SCWS-1.1.x

代码

*Unix*/*PHP*

准确: 95%,  召回 : 91%,  速度 : 1.2MB/sec 
PHP扩展分词速度 : 250KB/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 个最符合的切分结果 , 生成二元分词表 , 然后生成分词结果 , 接着进行词性标注并完成主要分词步骤 .

 

 

   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 编码。
     性能:5 8字节的一句话 ——“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  文件,用户只要将需要过滤的词加入到这个文件中,并将停用词过滤开发打开,就可以过滤掉这些词。

  设置分词权值

盘古分词可以让用户对如下特性设置自定义权值

未登录词权值

最匹配词权值

次匹配词权值

再次匹配词权值

强行输出的单字的权值

数字的权值

英文词汇权值

符号的权值

强制同时输出简繁汉字时,非原来文本的汉字输出权值。

* 用户自定义规则

  字典管理

  盘古分词提供一个字典管理工具 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% 

 

i mdict-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++ 的版本 )

你可能感兴趣的:(关于搜索,java,php,数据结构与算法)