lucene学习笔记(四)lucene分词详解

这里写图片描述

分词器的核心类

这里写图片描述

Analyzer

  • SimpleAnalyzer
  • StopAnalyzer
  • WhitespaceAnalyzer
  • StandardAnalyzer

TokenStream

分词器做好处理之后得到的一个流,这个流中存储了分词的各种信息,可以通过TokenStream有效的获取到分词单元信息
这里写图片描述
在这个流中所需要存储的数据
这里写图片描述

Tokenizer

主要负责接收字符流Reader,将Reader进行分词操作。有如下一些实现类
这里写图片描述

TokenFilter

将分词的语汇单元,进行各种各样过滤
这里写图片描述

Attribute

这里写图片描述

自定义分词器

自定义Stop分词器

这里写图片描述

中文分词器

Paoding:庖丁解牛分词器。已经没有更新了
mmseg:使用搜狗的词库()
1、导入包(有两个包:1、带dic,2、不带dic)
如果使用不带dic的,得自己指定词库位置
这里写图片描述
2、创建的时候使用MMSegAnalyzer分词器
这里写图片描述

简单实现同义词索引

这里写图片描述

同义词:最重要的是要在在原来的位置上添加同义词(位置增量为0)

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

2009年的一篇文章http://www.iteye.com/news/9637

  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 :linliangyi2005,google code 中 2009-07-31,版本号 41
  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全文检索优化的查询分析器IKQueryParse

  8. 结论
    个人觉得,可以在 mmseg4j 和 paoding 中选一个。关于这两个分词效果的对比,可以参考 mmseg4j 多分词模式与 paoding 分词效果对比
    或者自己再包装一下,将 paoding 的词库更新检测做一个单独的模块实现,然后就可以在所有基于词库的分词算法之间无缝切换了。
    ps,对不同的 field 使用不同的分词器是一个可以考虑的方法。比如 tag 字段,就应该使用一个最简单的分词器,按空格分词就可以了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐崇拜234

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值