`
z75148885
  • 浏览: 191412 次
  • 性别: 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包的起始根路径。

分享到:
评论

相关推荐

    Lucene的IK Analyzer 3.0 中文分词器 全解

    IK Analyzer 3.0 是一个专为 Lucene 设计的开源中文分词器,它基于 Java 开发,提供轻量级且高效的分词功能。自2006年12月发布1.0版以来,IK Analyzer 经历了多次升级,3.0版已演变为独立于 Lucene 的通用分词组件,...

    IKAnalyzer 支持高版本最新Lucene 5.x、6.x、7.x

    IKAnalyzer 是一个开源的、基于Java实现的中文分词器,专为全文检索和搜索引擎提供高效、快速的分词服务。这款工具广泛应用于Lucene、Elasticsearch、Solr等全文检索框架,以提高中文处理的性能。在给定的标题和描述...

    ik-analyzer-8.5.0-jar

    2. 创建Analyzer对象,通常使用`org.wltea.analyzer.lucene.IKAnalyzer`作为入口。 3. 使用Analyzer对象的`tokenStream`方法获取TokenStream,这是Lucene的抽象概念,代表分词流。 4. 遍历TokenStream,获取分词结果...

    ik分词器ik-analyzer-5.3.0和ikanalyzer-solr6.5-2018

    标题 "ik分词器ik-analyzer-5.3.0和ikanalyzer-solr6.5-2018" 涉及的是两个不同版本的IK分词器,一个是ik-analyzer-5.3.0,适用于Solr 5.5.0,另一个是ikanalyzer-solr6.5-2018,适用于Solr 7.0.0。IK分词器是Java...

    solr中文分词jar包ik-analyzer 含class配置 ik-analyzer-7.5.0

    标签中的"ik-ana"是Ik Analyzer的简称,"solr 中文分词"强调了这个分词器在Solr中的应用场景。文件列表中的"ik-analyzer-7.5.0.jar"即是我们需要集成到Solr中的核心组件。 总之,Ik Analyzer 7.5.0是Solr处理中文...

    ikanalyzer中文分词支持lucene7.1.0

    ikanalyzer中文分词支持lucene7.1.0是一个针对Lucene搜索引擎的中文分词扩展,由林良益先生开发,旨在提供高效、精准的中文词汇拆解功能。Lucene是一个开源全文检索库,它提供了索引和搜索文本的强大工具。然而,...

    ik-analyzer-solr7.zip

    在描述中提到的"ik-analyzer-solr7.zip"是一个专门为Apache Solr 7.x版本定制的IKAnalyzer分词器插件。Solr是Apache软件基金会的一个项目,它是一款强大的全文搜索服务器,提供了诸如索引、搜索、高亮显示、拼写检查...

    ik-analyzer-solr7-7.x.zip

    IK Analyzer,全称为“IntelligentKeyword Analyzer”,是一个为Java设计的高性能中文分词器。它最初是基于Lucene的Analyzer实现,现在也支持Solr等其他搜索框架。IK Analyzer以其优秀的分词效果和高度可扩展性著称...

    中文分词检索IKAnalyzer3.2.3Stable+hibernate-search3.4.0.Final

    - **IKAnalyzer**:这是一款针对中文处理的高效、灵活的分词器,主要用于对文本进行精确的中文分词,支持自定义词典及停用词,广泛应用于搜索引擎、内容管理系统等。 - **Lucene**:作为一款高性能全文检索引擎库,...

    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...

    中文分词库 IKAnalyzer For Lucene 5.2.1(适用Lucene 5.2.1)

    在实际应用中,开发者需要将 `\8878575_IKAnalyzer2012_V5.jar` 添加到项目的类路径中,然后按照 IKAnalyzer 提供的文档进行配置,就可以在 Lucene 中使用这个分词库进行中文文本的索引和搜索操作。同时,根据项目...

    IK分词器-Lucene与Solr学习中使用

    Lucene的核心是其分词和索引机制,而IK分词器作为Lucene的插件,能够很好地适应其需求,提供高质量的中文分词服务。 接着,我们来看Solr。Solr是基于Lucene的搜索服务器,它简化了全文搜索应用的开发和部署。Solr...

    IKAnalyzer中文分词器

    ### IKAnalyzer中文分词器V3.1.6:深入解析与使用指南 #### 一、IKAnalyzer3.0概述 IKAnalyzer是一个基于Java语言开发的高性能中文分词工具包,自2006年发布以来,已历经多次迭代升级。起初作为开源项目Lucene的一...

    ikanalyzer-solr8.4.0_solr8_solr_ikanalyzer_中文分词_

    ikanalyzer 是一个专门为Java开发的中文分词器,它基于 Lucene 库,适用于各种文本处理和搜索引擎场景。在 Solr 环境中,ikanalyzer 的作用是为中文文档提供精确的分词服务,从而提升搜索质量和效率。Solr8.4.0 是 ...

    lucene 所有jar包 包含IKAnalyzer分词器

    总的来说,这个压缩包提供了一套完整的Lucene环境,集成了IKAnalyzer分词器,可以用来构建具备中文处理能力的全文搜索引擎。开发者可以根据实际需求,选择合适的组件进行集成,实现更高效、更精准的文本搜索和处理。...

    ikanalyzer-solr5

    ikanalyzer-solr5 是一个专门为 Solr 5 及以上版本设计的中文分词器插件。在信息检索和自然语言处理领域,分词器是至关重要的工具,它负责将连续的文本切割成有意义的词语,以进行索引和查询操作。ikanalyzer 是一个...

    IKAnalyzer中文分词器V3.2使用

    在Lucene索引构建过程中,你可以将IKAnalyzer作为Analyzer,这样分词器会自动处理文本的分词工作,提升搜索精度。 总之,IKAnalyzer中文分词器以其高效、易用和可扩展性在Java领域的中文处理中占有一席之地。通过...

    模糊查询-lucene-IKAnalyzer

    Lucene是一个高性能、全文本搜索库,而IKAnalyzer是一个专门针对中文分词的开源分析器,它们的结合能够有效地帮助我们处理中文文本的搜索需求。 首先,我们需要了解Lucene的基本概念。Lucene提供了完整的搜索索引...

    Lucene4.7+IK Analyzer中文分词入门教程

    在这个入门教程中,我们将使用Lucene 4.7版本,结合IK Analyzer,一个专门针对中文分词的开源分析器,来学习如何构建一个简单的搜索引擎。 首先,你需要下载Lucene 4.7和IK Analyzer 2012-FF Hotfix 1。Lucene的...

Global site tag (gtag.js) - Google Analytics