发布IK Analyzer 3.0 中文分词器

[b][color=red]最新:IKAnalyzer3.2.3稳定版已经发布,支持Lucene3.0和solr1.4[/color][/b]
链接:[url]http://www.iteye.com/topic/667095[/url]

[b][color=red]lucene 2.9以前用户请使用 IKAnalyzer V3.1.6GA[url]http://linliangyi2007.iteye.com/blog/512577[/url][/color][/b]

IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IK Analyzer 3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

[size=large][b]1.1 IK Analyzer 3.0结构设计[/b][/size]
[img]http://linliangyi2007.iteye.com/upload/picture/pic/40736/4c7bc0ee-8e6b-3d9b-aa98-bf289f40b071.png[/img]

[size=large][b]1.2 IK Analyzer 3.0特性[/b][/size]
[list]
[*]采用了特有的“正向迭代最细粒度切分算法“,具有80万字/秒的高速处理能力
[*]采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
[*]优化的词典存储,更小的内存占用。支持用户词典扩展定义
[*]针对Lucene全文检索优化的查询分析器IKQueryParser([color=red]作者吐血[/color][img]http://linliangyi2007.iteye.com/upload/picture/pic/40734/7e88a961-c5c7-3421-89c5-fd53af95fb27.gif[/img][color=red]推荐[/color]);采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。
[/list]

[size=large][b]1.3 分词效果示例[/b][/size]

[b]文本原文1:[/b]
[color=blue]IK-Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。[/color]
[b]分词结果:[/b]
[color=blue]ik-analyzer | 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级 | 量级 | 的 | 中文 | 分词 | 工具包 | 工具 | 从 | 2006 | 年 | 12 | 月 | 推出 | 1.0 | 版 | 开始 | ikanalyzer | 已经 | 推出 | 出了 | 3 | 个大 | 个 | 版本[/color]

[b]文本原文2:[/b]
[color=blue]永和服装饰品有限公司[/color]
[b]分词结果:[/b]
[color=blue]永和 | 和服 | 服装 | 装饰品 | 装饰 | 饰品 | 有限 | 公司[/color]

[b]文本原文3:[/b]
[color=blue]作者博客:linliangyi2007.iteye.com 电子邮件:linliangyi2005@gmail.com[/color]
[b]分词结果:[/b]
[color=blue]作者 | 博客 | linliangyi2007.iteye.com | 2007 | 电子邮件 | 电子 | 邮件 | 地址 | linliangyi2005@gmail.com | 2005[/color]

[size=x-large][b]2.使用指南[/b][/size]

[size=large][b]2.1下载地址[/b][/size]
GoogleCode开源项目 :[url]http://code.google.com/p/ik-analyzer/[/url]
GoogleCode SVN下载:[url]http://ik-analyzer.googlecode.com/svn/trunk/[/url]

[size=large][b]2.2安装部署[/b][/size]
IK Analyzer安装包包含:
1. 《IKAnalyzer中文分词器V3.0使用手册》(即本文档)
2. IKAnalyzer3.0GA.jar
3. IKAnalyzer.cfg.xml
它的安装部署十分简单,将IKAnalyzer3.0GA.jar部署于项目的lib目录中;IKAnalyzer.cfg.xml文件放置在代码根目录(对于web项目,通常是WEB-INF/classes目录,同hibernate、log4j等配置文件相同)下即可。


[size=large][b]2.3 Lucene用户快速入门[/b][/size]

[b]代码样例[/b]

/**
* 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();
}
}
}
}
}

[b]执行结果:[/b]
[color=blue]命中:1
内容:Document<stored/uncompressed,indexed,tokenized<text:IK Analyzer是一个结合词典分词和文法分词的中文分词开源工具包。它使用了全新的正向迭代最细粒度切分算法。>>[/color]


[size=large][b]2.4 关键API说明[/b][/size]

[b] 类org.wltea.analyzer.lucene.IKAnalyzer[/b]
说明:IK分词器的主类,是IK分词器的Lucene Analyzer类实现。
该类使用方法请参考 “代码样例”章节

[b] 类org.wltea.analyzer.lucene.IKQueryParser[/b]
 public static Query parse(String field , String query) throws IOException
说明:单条件,单Field查询分析
参数1 :String field, 查询的目标域名称
参数2 :String query , 查询的关键字
返回值:构造一个单条件,单Field查询器

 public static Query parseMultiField(String[] fields , String query) throws IOException
说明:多Field,单条件查询分析
参数1 :String[] fields, 多个查询的目标域名称的数组
参数2 :String query , 查询的关键字
返回值:构造一个多Field,单条件的查询器

 public static Query parseMultiField(String[] fields , String query , BooleanClause.Occur[] flags) throws IOException
说明:多Field,单条件,多Occur查询分析
参数1 :String[] fields, 多个查询的目标域名称的数组
参数2 :String query , 查询的关键字
参数3 :BooleanClause.Occur[] flags , 查询条件的组合方式(Or/And)
返回值:构造一个多Field,单条件,多Occur的查询器

 public static Query parseMultiField(String[] fields , String[] queries) throws IOException
说明:多Field,多条件查询分析
参数1 :String[] fields, 多个查询的目标域名称的数组
参数2 :String[] queries , 对应多个查询域的关键字数组
返回值:构造一个多Field,多条件的查询器

 public static Query parseMultiField(String[] fields , String[] queries , BooleanClause.Occur[] flags) throws IOException
说明:多Field,多条件,多Occur查询
参数1 :String[] fields, 多个查询的目标域名称的数组
参数2 :String[] queries , 对应多个查询域的关键字数组
参数3 :BooleanClause.Occur[] flags , 查询条件的组合方式(Or/And)
返回值:构造一个多Field, 多条件, 多Occur的查询器

[b] 类org.wltea.analyzer.lucene.IKSimilarity[/b]
说明: IKAnalyzer 的相似度评估器。该类重载了DefaultSimilarity的coord方法,提高词元命中个数在相似度比较中的权重影响,即,当有多个词元得到匹配时,文档的相似度将提高。
该类使用方法请参考 “代码样例”章节

[b] 类org.wltea.analyzer.IKSegmentation[/b]
说明: 这是IK分词器的核心类。它是真正意义上的分词器实现。IKAnalyzer的3.0版本有别于之前的版本,它是一个可以独立于Lucene的Java分词器实现。当您需要在Lucene以外的环境中单独使用IK中文分词 组件时,IKSegmentation正是您要找的。
 public Lexeme next() throws IOException
说明:读取分词器切分出的下一个语义单元,如果返回null,表示分词器已经结束。
返回值:Lexeme 语义单元对象,即相当于Lucene的词元对象Token

[b] 类org.wltea.analyzer.Lexeme[/b]
说明: 这是IK分词器的语义单元对象,相当于Lucene中的Token词元对象。由于3.0版本被设计为独立于Lucene的Java分词器实现,因此它需要Lexeme来代表分词的结果。
 public int getBeginPosition()
说明:获取语义单元的起始字符在文本中的位置
返回值:int , 语义单元相对于文本的绝对起始位置

 public int getEndPosition()
说明:获取语义单元的结束字符的下一个位置
返回值:int , 语义单元相对于文本的绝对终止位置的下一个字符位置

 public int getLength()
说明:获取语义单元包含字符串的长度
返回值:int , 语义单元长度 = getEndPosition – getBeginPosition

 public String getLexemeText()
说明:获取语义单元包含字符串内容
返回值:String, 语义单元的实际内容,即分词的结果


[size=x-large][b]3.词表扩展[/b][/size]

目前,IK分词器自带的主词典拥有22万左右的汉语单词量。由于作者个人的精力有限,并没有对搜集到的词库进行全范围的筛选、清理。此外,对于分词组件应用场景所涉及的领域的不同,也需要各类专业词库的支持。为此,IK分词器提供了对词典的扩充支持。

[size=large][b]基于API的词典扩充 [/b][/size]
IK分词器支持使用API编程模型扩充您的词典。如果您的词典是存储与数据库中,这个方式应该对您适用。API如下:

[b] 类org.wltea.analyzer.dic.Dictionary[/b]
说明: IK分词器的词典对象。它负责中文词汇的加载,内存管理和匹配检索。
 public static void loadExtendWords(List<String> extWords)
说明:加载用户扩展的词汇列表到IK的主词典中,增加分词器的可识别词语。
参数1:List<String> extWords , 扩展的词汇列表
返回值:无

[size=large][b]3.2基于配置的词典扩充 [/b][/size]
IK分词器还支持通过配置IKAnalyzer.cfg.xml文件来扩充您的专有词典。

[b]1. 部署IKAnalyzer.cfg.xml[/b]
IKAnalyzer.cfg.xml部署在代码根目录下(对于web项目,通常是WEB-INF/classes目录)同hibernate、log4j等配置文件相同。

[b]2. 词典文件的编辑与部署[/b]
分词器的词典文件格式是无BOM的UTF-8编码的中文文本文件,文件扩展名不限。词典中,每个中文词汇独立占一行,使用\r\n的DOS方式换行。[color=red](注,如果您不了解什么是无BOM的UTF-8格式, 请保证您的词典使用UTF-8存储,并在文件的头部添加一空行)[/color]。您可以参考分词器源码org.wltea.analyzer.dic包下的.dic文件。

词典文件应部署在Java的资源路径下,即ClassLoader能够加载的路径中。[color=red](推荐同IKAnalyzer.cfg.xml放在一起)
[/color]

[b]3. IKAnalyzer.cfg.xml文件的配置[/b]

<?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">/mydict.dic ; /mypack/mydict2.dic ; /com/mycompany/dic/mydict3.dic ;</entry>
</properties>

在配置文件中,用户可一次配置多个词典文件。文件名使用“;”号分隔。文件路径为相对java包的起始根路径。

[b](全文终)[/b]


下载 :[url=http://ik-analyzer.googlecode.com/files/IKAnalyzer3.1.1Stable_AllInOne.rar]IKAnalyzer3.1.1稳定版完整包.rar[/url]

更多详细请参看[url=http://ik-analyzer.googlecode.com/files/IKAnalyzer%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E5%99%A8V3.1.1%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.pdf]《IKAnalyzer中文分词器V3.1.1使用手册.pdf》[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值