程正良的空间

我们一直在努力....

IK Analyzer 3.X使用指南

标签: IKAnalyzer 3.X使用指南 lucene结合 高亮
IK Analyzer 3.X特性
采用了特有的“正向迭代最细粒度切分算法“,具有80 万字/秒的高速处理能力。
采用了多子处理器分析模式,支持:英文字母(IP 地址、Email、URL)、数字(日期,
常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
优化的词典存储,更小的内存占用。支持用户词典扩展定义
 针对Lucene 全文检索优化的查询分析器IKQueryParser(作者吐血推荐);采用歧义分
析算法优化查询关键字的搜索排列组合,能极大的提高Lucene 检索的命中率。

分词效果示例
文本原文1:
IKAnalyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包。从2006 年12
月推出1.0 版开始, IKAnalyzer 已经推出了3 个大版本。
分词结果:
ikanalyzer | 是| 一个| 一| 个| 开源| 的| 基于| java | 语言| 开发| 的| 轻量
级| 量级| 的| 中文| 分词| 工具包| 工具| 从| 2006 | 年| 12 | 月| 推出| 1.0
| 版| 开始| ikanalyzer | 已经| 推出| 出了| 3 | 个大| 个| 版本
文本原文2:
永和服装饰品有限公司
分词结果:
永和| 和服| 服装| 装饰品| 装饰| 饰品| 有限| 公司

与相关项目的版本兼容
IK分词器版本Lucene 版本Solr版本
3.1.3GA 及先前版兼容2.9.1 及先前版本没有solr 接口
3.1.5GA 兼容2.9.1 及先前版本对solr1.3 提供接口实现
(详细请参考对应版本使用手册)
3.1.6GA 兼容2.9.1 及先前版本对solr1.3、solr1.4 提供接口实现
(详细请参考对应版本使用手册)
3.2.0GA 兼容Lucene2.9 及3.0版本
不支持Lucene2.4 及先前
版本
仅对solr1.4 提供接口实现
(请参考本手册solr 部分说明)
Lucene用户快速入门:
代码样例
IKAnalyzerDemo
/**
* IK Analyzer Demo
* @param args
*/
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
//引用IKAnalyzer3.0的类
import org.wltea.analyzer.lucene.IKAnalyzer;
import org.wltea.analyzer.lucene.IKQueryParser;
import org.wltea.analyzer.lucene.IKSimilarity;
/**
* @author linly
* */
public class IKAnalyzerDemo {
public static void main(String[] args){
//Lucene Document的域名
String fieldName = "text";
//检索内容
String text = "IK Analyzer是一个结合词典分词和文法分词的中文分词开源
工具包。它使用了全新的正向迭代最细粒度切分算法。";
//实例化IKAnalyzer分词器
Analyzer analyzer = new IKAnalyzer();
Directory directory = null;
IndexWriter iwriter = null;
IndexSearcher isearcher = null;
try {
//建立内存索引对象
directory = new RAMDirectory();
iwriter = new IndexWriter(directory, analyzer, true ,
IndexWriter.MaxFieldLength.LIMITED);
Document doc = new Document();
doc.add(new Field(fieldName, text, Field.Store.YES,
Field.Index.ANALYZED));
iwriter.addDocument(doc);
iwriter.close();
//实例化搜索器
isearcher = new IndexSearcher(directory);
//在索引器中使用IKSimilarity相似度评估器
isearcher.setSimilarity(new IKSimilarity());
String keyword = "中文分词工具包";
//使用IKQueryParser查询分析器构造Query对象
Query query = IKQueryParser.parse(fieldName, keyword);
//搜索相似度最高的5条记录
TopDocs topDocs = isearcher.search(query , 5);
System.out.println("命中:" + topDocs.totalHits);
//输出结果
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (int i = 0; i < topDocs.totalHits; i++){
Document targetDoc = isearcher.doc(scoreDocs[i].doc);
System.out.println("内容:" + targetDoc.toString());
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
if(isearcher != null){
try {
isearcher.close();
} catch (IOException e) {
e.printStackTrace();
}
} if(directory != null){
try {
directory.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
执行结果:
命中:1
内容:Document<stored/uncompressed,indexed,tokenized<text:IK Analyzer是
一个结合词典分词和文法分词的中文分词开源工具包。它使用了全新的正向迭代最细粒度切分算
法。>>

    分享: 收藏到CSDN 收藏到javaeye 收藏到博客园 收藏&分享
  • 浏览 (348)
  • 评论 (0)
  • 发表于 2010-09-27 08:47
  • OECP社区
    评分: 请先登录再投票,同一篇博客一月只能投票一次!
    无人投票

相关博客:


评论


发表评论

关注此文的人们还关注