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
- 基本介绍:
paoding:Lucene中文分词“庖丁解牛” Paoding Analysisimdict:imdict智能词典所采用的智能中文分词程序mmseg4j: 用 Chih-Hao Tsai 的 MMSeg 算法 实现的中文分词器ik:采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式 - * 开发者及开发活跃度*:
paoding:qieqie.wang, google code 上最后一次代码提交:2008-06-12,svn 版本号 132imdict: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 - 用户自定义词库:
paoding:支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载imdict:暂时不支持用户自定义词库。但 原版 ICTCLAS 支持。支持用户自定义 stop wordsmmseg4j:自带sogou词库,支持名为 wordsxxx.dic, utf8文本格式的用户自定义词库,一行一词。不支持自动检测。 -Dmmseg.dic.pathik: 支持api级的用户词库加载,和配置级的词库文件指定,无 BOM 的 UTF-8 编码,\r\n 分割。不支持自动检测。 - 速度(基于官方介绍,非自己测试)
paoding:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字imdict:483.64 (字节/秒),259517(汉字/秒)mmseg4j: complex 1200kb/s左右, simple 1900kb/s左右ik:linliangyi2005,google code 中 2009-07-31,版本号 41 - 算法和代码复杂度
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类似,歧义分析算法还没有弄明白。 文档
paoding:几乎无。代码里有一些注释,但因为实现比较复杂,读代码还是有一些难度的。imdict: 几乎无。 ICTCLAS 也没有详细的文档,HHMM隐马尔科夫模型的数学性太强,不太好理解。mmseg4j: MMSeg 算法 是英文的,但原理比较简单。实现也比较清晰。ik: 有一个pdf使用手册,里面有使用示例和配置说明。其他
paoding:引入隐喻,设计比较合理。search 1.0 版本就用的这个。主要优势在于原生支持词库更新检测。主要劣势为作者已经不更新甚至不维护了。imdict:进入了 lucene trunk,原版 ictclas 在各种评测中都有不错的表现,有坚实的理论基础,不是个人山寨。缺点为暂时不支持用户词库。mmseg4j: 在complex基础上实现了最多分词(max-word),但是还不成熟,还有很多需要改进的地方。ik: 针对Lucene全文检索优化的查询分析器IKQueryParse结论
个人觉得,可以在 mmseg4j 和 paoding 中选一个。关于这两个分词效果的对比,可以参考 mmseg4j 多分词模式与 paoding 分词效果对比
或者自己再包装一下,将 paoding 的词库更新检测做一个单独的模块实现,然后就可以在所有基于词库的分词算法之间无缝切换了。
ps,对不同的 field 使用不同的分词器是一个可以考虑的方法。比如 tag 字段,就应该使用一个最简单的分词器,按空格分词就可以了。
lucene学习笔记(四)lucene分词详解的更多相关文章
- IP2——IP地址和子网划分学习笔记之《子网掩码详解》
2018-05-04 16:21:21 在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...
- CDN学习笔记二(技术详解)
一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同 ...
- [读书笔记]C#学习笔记三: C#类型详解..
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
- C#学习笔记二: C#类型详解
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
- 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析
这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...
- jQuery学习笔记之Ajax用法详解
这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...
- MyBatis学习笔记2--配置环境详解
1.MyBatis-config.xml详解 一个完整的配置文件如下所示 <configuration> <!-- <properties resource="jdb ...
- [Spring学习笔记 5 ] Spring AOP 详解1
知识点回顾:一.IOC容器---DI依赖注入:setter注入(属性注入)/构造子注入/字段注入(注解 )/接口注入 out Spring IOC容器的使用: A.完全使用XML文件来配置容器所要管理 ...
- CSS学习笔记(9)--详解CSS中:nth-child的用法
详解CSS中:nth-child的用法 前端的哥们想必都接触过css中一个神奇的玩意,可以轻松选取你想要的标签并给与修改添加样式,是不是很给力,它就是“:nth-child”. 下面我将用几个典型的实 ...
- ubuntu学习笔记-tar 解压缩命令详解(转)
tar 解压缩命令详解 -c: 建立压缩档案 -x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能 ...
随机推荐
- 转转转---js正则表达exec与match的区别说明
正则表达式对象有两个定义方式:: 1.第一种定义: new RegExp(pattern, attributes);如var reg = new RegExp("abc",&quo ...
- 基于Redis实现简单的分布式锁
在分布式场景下,有很多种情况都需要实现最终一致性.在设计远程上下文的领域事件的时候,为了保证最终一致性,在通过领域事件进行通讯的方式中,可以共享存储(领域模型和消息的持久化数据源),或者做全局XA ...
- Introduction to Spring Data MongoDB
Introduction to Spring Data MongoDB I just announced the new Spring 5 modules in REST With Spring: & ...
- 转载 关于restTemplate 内部实现
2016-12-28 by 安静的下雪天 http://www.cnblogs.com/quiet-snowy-day/p/6228198.html 本篇概要 RestTemplate 类图 po ...
- Python单例模式实现方法
一 简介 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源 ...
- 温故而知新-array_walk和sizeof和array_count_values()和extract()
1 array_walk对数组的每一个元素应用任何函数 用户自定义函数中的第一个参数指定为引用:&$value,来改变数组元素的值 如果对一个参数使用取地址,那么会改变数组元素的值 2 siz ...
- Spring启动时获取自定义注解的属性值
1.自定义注解 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documen ...
- linux vim操作技巧
安装: NERDTree 从 http://www.vim.org/scripts/script.php?script_id=1658 下载 unzip NERD_tree.zip cd ~/.vi ...
- Java 目标
Java 技术 其次掌握的技能树主要有三个方面:第一个是基础,比如对集合类,并发包,IO/NIO,JVM,内存模型,泛型,异常,反射,等有深入了解,最好是看过源码了解底层的设计.比如一般面试都会问Co ...
- spring错误处理 Build path is incomplete. Cannot find class file for org.springframework.aop.Advisor
Build path is incomplete. Cannot find class file for org.springframework.aop.Advisor 初学spring,记录一下出现 ...