Lucene之中文分词器

中文分词器

什么是中文分词器

对于英文,是安装空格、标点符号进行分词
对于中文,应该安装具体的词来分,中文分词就是将词,切分成一个个有意义的词。

比如:“我的中国人”,分词:我、的、中国、中国人、国人。

Lucene自带的中文分词器

StandardAnalyzer:

单字分词:就是按照中文一个字一个字地进行分词。如:“我爱中国”,
效果:“我”、“爱”、“中”、“国”。

CJKAnalyzer

二分法分词:按两个字进行切分。如:“我是中国人”,效果:“我是”、“是中”、“中国”“国人”。

上边两个分词器无法满足需求。

第三方中文分词器

名称最近更新速度(网上情报)扩展性支持、其它
mmseg4j2013complex 60W字/s (1200 KB/s)
simple 100W字/s (1900 KB/s)
使用sougou词库,也可自定义(complex\simple\MaxWord)
IKAnalyzer2012IK2012 160W字/s (3000KB/s)支持用户词典扩展定义、支持自定义停止词(智能\细粒度)
Ansj2014BaseAnalysis 300W字/s
hlAnalysis 40W字/s
支持用户自定义词典,可以分析出词性,有新词发现功能
paoding2008100W字/s支持不限制个数的用户自定义词库

注意:
中文分词器可能与最新版本Lucene不兼容,配置好运行时出现TokenStream contractviolation错误,对于mmseg4j需要更改com.chenlb.mmseg4j.analysis.MMSegTokenizer源码,添加super.reset()reset()内,重新编译后替换原jar。

注意:
lucene 4.6.0以上版本使用IKAnalyzer时可能会出现以下异常:

java.lang.illegalstateexception:tokenstream contract violation: reset()/close() call missing, reset() calledmultiple times, or subclass does not call super.reset(). please see javadocs oftokenstream class for more information about the correct consuming workflow.

因为lucene从4.6.0开始tokenstream使用方法更改的问题,在使用incrementtoken方法前必须调用reset方法

解决方法:更改代码为如下代码

IKAnalyzer analyzer = newIKAnalyzer(true);  
StringReader reader = new StringReader(news);  
TokenStream ts = analyzer.tokenStream("", reader);  
CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);  
ts.reset();  
while(ts.incrementToken()){  
   System.out.print(term.toString()+"|");  
}  
analyzer.close();  
reader.close();  

这个是我在学习Lucene时所做的项目,或许对你们有所帮助 《Lucene6.6.2API示例下载》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值