`
z75148885
  • 浏览: 185897 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

IK Analyzer 3.0 中文分词器 - Lucene索引

阅读更多
标签: analyzer  lucene  分词  词典  public 

IK Analyzer 3.0 中文分词器 - Lucene索引

1.IK Analyzer 3.0介绍

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

1.1 IK Analyzer 3.0结构设计


1.2 IK Analyzer 3.0特性

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



1.3 分词效果示例

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

文本原文2:
永和服装饰品有限公司
分词结果:
永和 | 和服 | 服装 | 装饰品 | 装饰 | 饰品 | 有限 |  公司

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

2.使用指南

2.1下载地址
GoogleCode开源项目 :http://code.google.com/p/ik-analyzer/
GoogleCode SVN下载:http://ik-analyzer.googlecode.com/svn/trunk/

2.2安装部署
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等配置文件相同)下即可。


2.3 Lucene用户快速入门

代码样例

Java代码

  1. /**  
  2.  * IK Analyzer Demo  
  3.  * @param args  
  4.  */  
  5. import java.io.IOException;   
  6.   
  7. import org.apache.lucene.analysis.Analyzer;   
  8. import org.apache.lucene.document.Document;   
  9. import org.apache.lucene.document.Field;   
  10. import org.apache.lucene.index.CorruptIndexException;   
  11. import org.apache.lucene.index.IndexWriter;   
  12. import org.apache.lucene.search.IndexSearcher;   
  13. import org.apache.lucene.search.Query;   
  14. import org.apache.lucene.search.ScoreDoc;   
  15. import org.apache.lucene.search.TopDocs;   
  16. import org.apache.lucene.store.Directory;   
  17. import org.apache.lucene.store.LockObtainFailedException;   
  18. import org.apache.lucene.store.RAMDirectory;   
  19. //引用IKAnalyzer3.0的类   
  20. import org.wltea.analyzer.lucene.IKAnalyzer;   
  21. import org.wltea.analyzer.lucene.IKQueryParser;   
  22. import org.wltea.analyzer.lucene.IKSimilarity;   
  23.   
  24. /**  
  25.  * @author linly  
  26.  *  
  27.  */  
  28. public class IKAnalyzerDemo {   
  29.        
  30.     public static void main(String[] args){   
  31.         //Lucene Document的域名   
  32.         String fieldName = "text";   
  33.          //检索内容   
  34.         String text = "IK Analyzer是一个结合词典分词和文法分词的中文分词开源工具包。它使用了全新的正向迭代最细粒度切分算法。";   
  35.            
  36.         //实例化IKAnalyzer分词器   
  37.         Analyzer analyzer = new IKAnalyzer();   
  38.         
  39.            
  40.         Directory directory = null;   
  41.         IndexWriter iwriter = null;   
  42.         IndexSearcher isearcher = null;   
  43.         try {   
  44.             //建立内存索引对象   
  45.             directory = new RAMDirectory();     
  46.             iwriter = new IndexWriter(directory, analyzer, true , IndexWriter.MaxFieldLength.LIMITED);   
  47.             Document doc = new Document();   
  48.             doc.add(new Field(fieldName, text, Field.Store.YES, Field.Index.ANALYZED));   
  49.             iwriter.addDocument(doc);   
  50.             iwriter.close();   
  51.                
  52.             //实例化搜索器      
  53.             isearcher = new IndexSearcher(directory);              
  54.             //在索引器中使用IKSimilarity相似度评估器   
  55.             isearcher.setSimilarity(new IKSimilarity());   
  56.                
  57.             String keyword = "中文分词工具包";   
  58.                
  59.             //使用IKQueryParser查询分析器构造Query对象   
  60.             Query query = IKQueryParser.parse(fieldName, keyword);   
  61.                
  62.             //搜索相似度最高的5条记录   
  63.             TopDocs topDocs = isearcher.search(query , 5);   
  64.             System.out.println("命中:" + topDocs.totalHits);   
  65.             //输出结果   
  66.             ScoreDoc[] scoreDocs = topDocs.scoreDocs;   
  67.             for (int i = 0; i < topDocs.totalHits; i++){   
  68.                 Document targetDoc = isearcher.doc(scoreDocs[i].doc);   
  69.                 System.out.println("内容:" + targetDoc.toString());   
  70.             }              
  71.                
  72.         } catch (CorruptIndexException e) {   
  73.             e.printStackTrace();   
  74.         } catch (LockObtainFailedException e) {   
  75.             e.printStackTrace();   
  76.         } catch (IOException e) {   
  77.             e.printStackTrace();   
  78.         } finally{   
  79.             if(isearcher != null){   
  80.                 try {   
  81.                     isearcher.close();   
  82.                 } catch (IOException e) {   
  83.                     e.printStackTrace();   
  84.                 }   
  85.             }   
  86.             if(directory != null){   
  87.                 try {   
  88.                     directory.close();   
  89.                 } catch (IOException e) {   
  90.                     e.printStackTrace();   
  91.                 }   
  92.             }   
  93.         }   
  94.     }   
  95. }  

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


2.4 关键API说明

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

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

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

 public static Queryn 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的查询器

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

n 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的查询器

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

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

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

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

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

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


3.词表扩展

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

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

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

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

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

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

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


3. IKAnalyzer.cfg.xml文件的配置

Xml代码

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">     
  3. <properties>     
  4.     <comment>IK Analyzer 扩展配置</comment>  
  5.     <!--用户可以在这里配置自己的扩展字典-->  
  6.     <entry key="ext_dict">/mydict.dic ; /mypack/mydict2.dic ; /com/mycompany/dic/mydict3.dic ;</entry>    
  7. </properties>  


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

分享到:
评论

相关推荐

    IKAnalyzer中文分词.rar

    IKAnalyzer继承Lucene的Analyzer抽象类,使用IKAnalyzer和Lucene自带的分析器方法一样,将Analyzer测试代码改为IKAnalyzer测试中文分词效果。 如果使用中文分词器ik-analyzer,就需要在索引和搜索程序中使用一致的...

    IKAnalyzer分词器 下载IKAnalyzer2012FF_u1.jar

    IKAnalyzer分词器版本 2012 兼容Lucene3.3以上版本 对solr1.4提供接口实现 使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IK...

    IKAnalyzer2012FF_u1.jar

    IKAnalyzer分词器版本 2012 兼容Lucene3.3以上版本 对solr1.4提供接口实现 使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IK...

    lucene-IKAnalyzer2012_u6-lukeall.rar

    lucene-IKAnalyzer2012_u6-lukeall.rar压缩包中包含lucene-4.10.3依赖包、中文分词器IKAnalyzer2012_u6的依赖包和索引库查看工具lukeall-4.10.0.jar(将jar拷贝到相应的索引库中双击打开即可查看)。解压后就可以...

    IKAnalyzer中文分词器 jar包 + 使用文档 + 配置文件 + doc

    IKAnalyzer中文分词器 jar包 + 使用文档 + 配置文件 + doc

    ik分词器2012和lucene的资源和jar包以及lucene索引查看工具

    ik分词器2012和lucene的资源和jar包以及lucene索引查看工具

    lucene:基于lucene与IKAnalyzer的中文搜索demo及学习记录

    新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。 开发环境及项目框架介绍 IDE:Intellij IDEA 数据库:MySQL,建立名为lucene的数据库, () 项目框架:...

    IKAnalyzer3.2.8 源码

    IKAnalyzer3.2.8分词器 源码,用户lucene索引开发中

    Apache Lucene全文检索和IKAnalyzer分词工具类

    * Apache Lucene全文检索和IKAnalyzer分词工具类 * &lt;p&gt;Company: 91注册码 * time:2014-04-22 * @author www.91zcm.com * @date * @version 1.1 */ public class LuceneUtil { /**索引创建的路径**/ ...

    Lucene使用

    IKAnalyzer分词 2012版不支持,采用3.2.8版 在使用2012版时异常:ClassNotFoundException: org.apache.lucene.analysis.tokenattributes.CharTermAttribute 庖丁分词 使用 paoding-analysis-2.0.4-beta.zip 版时...

    Lucene Jsceg IkAnalyzer jar包

    使用Lucene 分词器Jsceg IkAnalyzer jar包 ucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了...

    lucene2.9.1所有最新开发包及源码及文档

    C) 第三方的中文分词器:如PaodingAnalyzer、IKAnalyzer 4) IndexWriter.MaxFieldLength: 指定域值的最大长度。 a) UNLIMITED 无限制的。 b) LIMITED 有限制的。值为10000 5) Document: 索引的组成单元. 一...

    Lucene 3.6.1完整案例

    Lucene 3.6.1: 中文分词、创建索引库、排序、多字段分页查询以及高亮显示源 希望对大家有帮助, 我自己建立的mysql数据库 使用了IKAnalyzer分词器源代码,大家可以自己设置停词,也可以自己改写算法

    SearchEngineDemo:学习搜索引擎的一些demo

    IkanalyzerIntegrated IKAnalyze中文分词器集成 扩展 IKAnalyzer的停用词和新词 博客学习地址: luceneIndexDetail Lucene索引详解(IndexWriter详解、Document详解、索引更新)博客学习地址: luceneSearchDetail ...

    人工智能-项目实践-搜索引擎-Web信息检索与处理课程实验1-一个简易的搜索引擎

    2.创建索引(使用中科院中文分词工具ICTCLAS) 3.查询(实现简单的查询界面) 实验环境 编译环境:eclipse-jee-mars-2-win32-x86_64 编程环境:jdk1.8.0_111 编程语言:java、jsp 机器内存:8G (4G+4G) 时钟主频:...

    JAVA中创建搜索引擎

    信大家,在项目中,肯定要用到搜索引擎,搜索引擎用到全文搜索,分词这些,做一个简单的搜索引擎肯定要下两个jar包。... IKAnalyzer2012FF_u1.jar 分词 lucene-core-4.4.0.jar 一个用Java写的全文索引引擎工具包

    毕业论文模板.docx

    3.4 IKAnalyzer中文分词类库 7 3.5 索引与搜索核心算法 7 4 数据库连接技术 8 4.1 JDBC 8 4.2 本实验对数据库连接的封装 9 5 实验环境 9 6 本地文件全文搜索实验方案 10 6.1 系统简介 10 6.2 实现方案介绍 11 6.3 ...

    Java EE常用框架.xmind

    IKAnalyzer分词器:一个比较出名的中文分词器 搜索结果排序 搜索结果摘要 条件搜索 SpringBoot SpringBoot就是为了简化我们的配置:约定大于配置 启动方式 在idea中直接使用启动 使用...

    java开源包1

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包10

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

Global site tag (gtag.js) - Google Analytics