`
lt200819
  • 浏览: 188913 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

当前几个主要的Lucene中文分词器的比较

    博客分类:
  • JAVA
 
阅读更多

1. 基本介绍:

paoding :Lucene中文分词“庖丁解牛” Paoding Analysis
imdict :imdict智能词典所采用的智能中文分词程序
mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 实现的中文分词器
ik :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式

 

 

2. 开发者及开发活跃度:

paoding :qieqie.wang, google code 上最后一次代码提交:2008-06-12,svn 版本号 132
imdict :XiaoPingGao, 进入了 lucene contribute,lucene trunk 中 contrib/analyzers/smartcn/ 最后一次提交:2009-07-24,
mmseg4j :chenlb2008,google code 中 2009-08-03 (昨天),版本号 57,log为:mmseg4j-1.7 创建分支
ik :linliangyi2005,google code 中 2009-07-31,版本号 41

 

 

3. 用户自定义词库:

paoding :支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载
imdict :暂时不支持用户自定义词库。但 原版 ICTCLAS 支持。支持用户自定义 stop words
mmseg4j :自带sogou词库,支持名为 wordsxxx.dic, utf8文本格式的用户自定义词库,一行一词。不支持自动检测。 -Dmmseg.dic.path
ik : 支持api级的用户词库加载,和配置级的词库文件指定,无 BOM 的 UTF-8 编码,\r\n 分割。不支持自动检测。

 

 

4. 速度(基于官方介绍,非自己测试)

paoding :在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字
imdict :483.64 (字节/秒),259517(汉字/秒)
mmseg4j : complex 1200kb/s左右, simple 1900kb/s左右
ik :具有50万字/秒的高速处理能力

 

 

5. 算法和代码复杂度

paoding :svn src 目录一共1.3M,6个properties文件,48个java文件,6895 行。使用不用的 Knife 切不同类型的流,不算很复杂。
imdict :词库 6.7M(这个词库是必须的),src 目录 152k,20个java文件,2399行。使用 ICTCLAS HHMM隐马尔科夫模型,“利用大量语料库的训练来统计汉语词汇的词频和跳转概率,从而根据这些统计结果对整个汉语句子计算最似然(likelihood)的切分”
mmseg4j : svn src 目录一共 132k,23个java文件,2089行。MMSeg 算法 ,有点复杂。
ik : svn src 目录一共6.6M(词典文件也在里面),22个java文件,4217行。多子处理器分析,跟paoding类似,歧义分析算法还没有弄明白。

 

 

6. 文档

paoding :几乎无。代码里有一些注释,但因为实现比较复杂,读代码还是有一些难度的。
imdict : 几乎无。 ICTCLAS 也没有详细的文档,HHMM隐马尔科夫模型的数学性太强,不太好理解。
mmseg4j : MMSeg 算法 是英文的,但原理比较简单。实现也比较清晰。
ik : 有一个pdf使用手册,里面有使用示例和配置说明。

 

 

7. 其它

paoding :引入隐喻,设计比较合理。search 1.0 版本就用的这个。主要优势在于原生支持词库更新检测。主要劣势为作者已经不更新甚至不维护了。
imdict :进入了 lucene trunk,原版 ictclas 在各种评测中都有不错的表现,有坚实的理论基础,不是个人山寨。缺点为暂时不支持用户词库。
mmseg4j : 在complex基础上实现了最多分词(max-word),但是还不成熟,还有很多需要改进的地方。
ik :  针对Lucene全文检索优化的查询分析器IKQueryParser

 

 

8. 结论

个人觉得,可以在 mmseg4j 和 paoding 中选一个。关于这两个分词效果的对比,可以参考:

http://blog.chenlb.com/2009/04/mmseg4j-max-word-segment-compare-with-paoding-in-effect.html

或者自己再包装一下,将 paoding 的词库更新检测做一个单独的模块实现,然后就可以在所有基于词库的分词算法之间无缝切换了。

 

 

ps,对不同的 field 使用不同的分词器是一个可以考虑的方法。比如 tag 字段,就应该使用一个最简单的分词器,按空格分词就可以了。

 

转自:http://www.iteye.com/news/9637

分享到:
评论

相关推荐

    solr(ik分词器)需要的jar包

    在处理中文文本时,一个关键的组件是分词器,它将连续的汉字序列拆分成有意义的词语,便于索引和查询。Ik分词器(IK Analyzer)是一个专门为Java设计的中文分词库,广泛应用于Solr和Elasticsearch等搜索引擎中。 ...

    lucene

    在Lucene中,倒排索引主要由以下几个部分组成: 1. **词典(Term Dictionary)**:存储了所有唯一词条的有序集合。每个词条都会被赋予一个唯一的ID,这个ID用于后续的索引操作。 2. **倒排列表(Inverted List)*...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-04.Lucene索引深入 共24页.pptx

    11. **分词器(Tokenizers)**:Lucene支持自定义分词器,如标准分词器、中文分词器等,用于将输入文本分割成有意义的词元。分词器的配置影响索引质量和搜索效果。 12. **过滤器(Filters)**:过滤器可以对分词...

    Lucene全文搜索引擎的应用

    具体而言,主要包括以下几个步骤: 1. **统一数据格式**:通过文档对象模型(DOM)技术将不同高校图书馆的数据转换成统一的XML文档格式,便于后续的处理和分析。 2. **索引建立**:使用Lucene对标准化后的XML文档...

    lucene-1.9.1.zip

    Lucene的API设计简洁易用,主要分为以下几个部分: 1. **IndexWriter**:负责创建和更新索引,包括添加、删除和更新文档。 2. **IndexReader**:用于读取索引,提供搜索前的准备操作。 3. **Searcher**:执行搜索...

    web lucene

    基于以上信息,我们可以推测文章可能会涵盖以下几个核心知识点: 1. **Lucene简介**:解释什么是Lucene,它的主要功能,以及为什么在Web开发中选择使用它。 2. **集成Lucene到Web应用**:描述如何将Lucene库添加到...

    luke6.0版本, 支持lucene5.5的索引查看,包含历史版本

    3. 分析分词:查看文本如何被Lucene分词器处理。 4. 检查文档内容:查看每个文档的字段值和元数据。 5. 检验设置:查看和修改文档的评分函数、相似度算法等配置。 6. 测试性能:评估索引的查询速度和效率。 总的来...

    Lucene 原理与代码分析完整版

    主要包括以下几个核心组件: - **IndexWriter**:用于创建和更新索引。 - **IndexReader**:用于读取索引并提供查询能力。 - **Analyzer**:负责文本的分析工作,包括分词和语言处理。 - **QueryParser**:将用户的...

    ikanalyzer2.0.2源码

    ikanalyzer的核心目标是为了解决中文在英文为主导的Lucene等全文检索引擎中的分词难题,提升中文搜索的准确性和效率。 中文分词是自然语言处理的关键步骤,因为中文句子没有明显的空格来区分单词,所以需要通过特定...

    lucene学习资料

    Lucene采用模块化设计,主要包括以下几个核心模块: 1. **索引模块**(Index):负责索引的创建和维护。 2. **搜索模块**(Search):提供搜索功能。 3. **查询解析器**(Query Parser):用于解析用户的查询语句。...

    IK3.2.8原理及源码分析(原创)

    IKAnalyzer3.2.8中的分词算法主要包括以下几个步骤: 1. **初始化**:创建`IKSegmentation`实例,包括缓冲区、上下文(Context)实例、子分析器的创建以及待处理字符串的读入。 2. **分词处理**:调用`IKSegmentation...

    ES stack技术分享

    一个基本的ES Stack架构通常包括几个关键组件,这些组件共同工作以实现数据收集、索引、搜索和可视化。 - Elasticsearch:核心组件,负责数据存储、索引和搜索。 - Logstash:用于数据收集和处理的工具,能够处理...

    Linux源码剖析

    Lucene 提供了丰富的 API 来支持各种开发需求,主要包括以下几个方面: - **核心索引和搜索 API**:包括用于创建和管理索引的 `IndexWriter` 类,用于执行搜索操作的 `IndexReader` 和 `IndexSearcher` 类等。 - **...

    网络爬虫heritrix

    - **分词技术**:针对特定语言(如中文),开发相应的分词器,以提高搜索结果的相关性和准确性。 #### 结论 综上所述,Heritrix作为一种高质量的网络爬虫工具,结合Lucene的强大索引和检索能力,为构建高效的搜索...

Global site tag (gtag.js) - Google Analytics