1.大致理解
目前了解的分词器IKAnalysis是开源的,基于java开发的轻量级中文分词器,是搜索技术的基石。
最初以Lucene为主体,但最新版发展为面向java的分词组件,独立于Lucene,同时提供默认优化。
2.初步使用
a.pom.xml
<!-- https://mvnrepository.com/artifact/com.janeluo/ikanalyzer -->
<dependency>
<groupId>com.janeluo</groupId>
<artifactId>ikanalyzer</artifactId>
<version>2012_u6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-core -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>4.10.4</version>
</dependency>
b.java练习代码
import java.io.StringReader;
import org.apache.log4j.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class Ikdemo {
static final Logger logger = Logger.getLogger(Ikdemo.class);
public static void main(String[] args) {
// TODO Auto-generated method stub
String text ="ik分词来看一下效果如何呢";
ByLucene(text,false);
}
public static void ByIkAnalysis(String text, boolean useSmart){
try{
StringReader sr = new StringReader(text);
IKSegmenter ik = new IKSegmenter(sr, useSmart);
Lexeme lex = null;
while((lex = ik.next()) != null){
System.out.print(lex.getLexemeText()+"|");
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void ByLucene(String text, boolean useSmart){
try {
//创建分词对象
//true则按照最大长度划分,false则划分出所有可以划分的词
Analyzer anal = new IKAnalyzer(useSmart);
StringReader reader = new StringReader(text);
//分词
TokenStream ts = anal.tokenStream("", reader);
CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);
//遍历分词数据
ts.reset();
while(ts.incrementToken()){
System.out.print(term.toString()+"|");
}
ts.close();
reader.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分词结果如下:
ik|分词|来看|看一下|一下|一|下|效果|果如|如何|呢|
3.配置自定义扩展字典和自定义扩展停止字典
a.创建ext.dic 和 chinese_stopword.dic分别作为扩展字典和扩展停止字典,注意文件为无bom头格式,否则无法识别
ext.dic文件内容
效果如何
ik分词
chinese_stopword.dic文件内容
吧
呢
来
的
b.配置ik加载配置文件,放在src目录下
<?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">ikdic/ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ikdic/stopword.dic;ikdic/chinese_stopword.dic;</entry>
</properties>
c.重新运行程序查看效果如下
加载扩展词典:ikdic/ext.dic
加载扩展停止词典:ikdic/stopword.dic
加载扩展停止词典:ikdic/chinese_stopword.dic
ik分词|ik|分词|来看|看一下|一下|一|下|效果如何|效果|果如|如何|
可以看出"ik分词","效果如何"是自定义扩展字典中的词,而"呢"是自定义扩展停止中的词没有在分词结果中显示。
4.版本对应问题
Lucene版本对应的jdk支持
Lucene版本需要与IKAnalysis版本相对应,否则获取token报错TokenStream ts = anal.tokenStream("", reader);
参考:http://blog.csdn.net/eguid_1/article/details/51908862
参考http://3dobe.com/archives/44/
http://blog.csdn.net/shiyaru1314/article/details/51645110