第一次写博客,写了半个小时,居然不见了,55555,还好后面发现有草稿箱,开森
阅读并感觉好的博客推荐:
http://blog.csdn.net/yhqbsand/article/details/39251495
http://www.itzhai.com/ikanalyzer-lucene-demo-performance-test.html#%E4%BD%BF%E7%94%A8IKSegmenter%E8%BF%9B%E8%A1%8C%E5%88%86%E8%AF%8D
http://blog.csdn.net/lijun7788/article/details/7719166
介绍:
国人林良益写的IK Analyzer应该是最好的Lucene中文分词器之一,IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。到现在,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。
特性:
-
(1) 采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式;
-
(2)在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。
-
(3) 2012版本的智能分词模式支持简单的分词排歧义处理和数量词合并输出。
-
(4)采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符
-
(5)优化的词典存储,更小的内存占用。支持用户词典扩展定义。特别的,在2012版本,词典支持中文,英文,数字混合词语。
使用到的jar包:
IKAnalazer2012.jar , lucene-analyzers-2.2.0.jar , lucence-core-3.6.0.jar
简单测试代码:
Analyzer analyzer = new IKAnalyzer(true); //true智能切分
// Analyzer analyzer = new IKAnalyzer(false); //false 细粒度切分
StringReader reader = new StringReader(strText);
TokenStream ts = analyzer.tokenStream("", reader);
CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);
//遍历分词数据
while(ts.incrementToken()){
System.out.print(term.toString()+"|");
}
System.out.print(term);
reader.close();
项目字典存放的位置如下图:
附加:在项目里面修改字典的话,有时候会出现Resource is uot of sync with the file system的问题或者修改木有效果,refresh项目就ok。
后缀名.dic的词典文件,必须如使用文档里所说的 无BOM的UTF-8编码保存的文件。如果不确定什么是 无BOM的UTF-8编码,最简单的方式就是用Notepad++编辑器打开,Encoding->选择 Encoding in UTF-8 without BOM,然后保存。
字典解析:
配置 IKAnalyzer.cfg.xml 文件来扩充您的专有词典以及停止词典
1.stopword.dic:IKAnalyzer2012发布包自带的里面存的是英文的停用词
比如:stopword.dic里面含有“a”: 原来语句:巫山烤鱼a中汇店ff , 则分词后:巫山|烤鱼|中汇|店|ff| , 否则:巫山|烤鱼|a|中汇|店|ff|
2.chinese_stopword.dic:用来存放中文停用词。chinese_stopword.dic需要使用UTF-8编码。词典中,每个中文词汇独占一行。 (后期自己添加)
比如:chinese_stopword.dic里面含有“年” 原来语句:巫山烤鱼年中汇店 , 则分词后:巫山|烤鱼|中汇|店| , 否则:巫山|烤鱼|年|中汇|店|
3.ext.dic(扩展词典)可以配置多个词典文件,文件使用";"号分隔
比如:ext.dic里面含有“联想笔记本电脑” 原来语句:联想笔记本电脑搜索 , 则分词后:联想笔记本电脑|搜索| , 否则:联想|笔记本电脑|搜索|
4.product_word.dic:是购物经热门词汇,可以选择加入ext.dic
5:IKAnalyzer.cfg.xml:IK 分词器还支持通过配置 文件来扩充自己的专有词典以及停止词典(过滤词典)
KAnalyzer.cfg.xml 部署在代码根目录下( class 根目录)(对于web 项目,通常是WEB-INF/classes 目录)同hibernate、log4j等配置文件相同。
.词典文件的编辑与部署分词器的词典文件格式是无 BOM的 UTF-8编码的中文文本文件,文件扩展名不限。词典中,每个中文词汇独立占一行,使用\r\n的 DOS方式换行。
格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<!--
<entry key="ext_dict">com/xxx/config/ext.dic;com/xxxx/config/product_word.dic</entry>
<entry key="ext_dict">com/xxx/config/ext.dic</entry>
-->
<entry key="ext_dict">com/xxxx/config/ext.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">com/diandian/config/chinese_stopword.dic;com/diandian/config/stopword.dic</entry>
</properties>
配置多个词典文件。文件名使用“;”号分隔
boolean useSmart ,是否采用智能切分策略:
其中true表示智能分词(分词器采用智能切分),false表示细粒度分词(进行最细粒度切分):
1. Analyzer analyzer = new IKAnalyzer(true);
//棉花|糖|交|党费|12345.|觉|gfh|
2.
Analyzer analyzer = new IKAnalyzer(false);
//棉花|糖|交|党费|12345.|12345|觉|gfh|