IKAnalyzer中文分詞器

1. IKAnalyzer3.0介紹java

IKAnalyzer是一個開源的,基於java語言開發的輕量級的中文分詞工具包。從2006年12月推出1.0版開始,IKAnalyzer已經推出了3個大版本。最初,它是以開源項目Luence爲應用主體的,結合詞典分詞和文本分析算法的中文分詞組件。新版本的IKAnalyzer3.0則發展爲面向Java的公用分詞組件,獨立於Lucene項目,同時提供了對Lucene的默認優化實現。web

1.1 IKAnalyzer3.0特性算法

    採用了特有的「正向迭代最細粒度切分算法「,具備50萬字/秒的高速處理能力。apache

    採用了多子處理器分析模式,支持:英文字母(IP地址、Email、URL)、數字(日期,經常使用中文數量詞,羅馬數字,科學計數法),中文詞彙(姓名、地名處理)等分詞處理。svn

  優化的詞典存儲,更小的內存佔用。支持用戶詞典擴展定義工具

    針對Lucene全文檢索優化的查詢分析器IKQueryParser(做者吐血推薦);採用歧義分析算法優化查詢關鍵字的搜索排列組合,能極大的提升Lucene檢索的命中率。優化

1.2 分詞效果示例google

文本原文1:spa

IK-Analyzer是一個開源的,基於java語言開發的輕量級的中文分詞工具包。從2006年12月推出1.0版開始,IKAnalyzer已經推出了3個大版本。分詞結果:hibernate

ik-analyzer|是|一個|一|個|開源|的|基於|java|語言|開發|的|輕量

級|量級|的|中文|分詞|工具包|工具|從|2006|年|12|月|推出|1.0|版|開始|ikanalyzer|已經|推出|出了|

3|

個大|

個|版本

文本原文2:

永和服裝飾品有限公司。分詞結果:

:永和|和服|服裝|裝飾品|裝飾|飾品|有限|公司

文本原文3:

做者博客:linliangyi2007.javaeye.com 電子郵件地址:linliangyi2005@gmail.com

分詞結果::做者|博客|linliangyi2007.javaeye.com|2007|電子郵件|電子|郵件|

地址|

linliangyi2005@gmail.com|2005


做者博客:linliangyi2007.javaeye.com電子郵件:linliangyi2005@gmail.com

分詞結果分詞結果::做者|博客|linliangyi2007.javaeye.com|2007|電子郵件|電子|郵件|

地址|

linliangyi2005@gmail.com|2005

2.使用指南

2.1 下載地址

GoogleCode開源項目:http://code.google.com/p/ik-analyzer/

GoogleCodeSVN下載:http://ik-analyzer.googlecode.com/svn/trunk/

2.2 安裝部署

IKAnalyzer安裝包包含:

  1. .IKAnalyzer3.0GA.jar

  2. IKAnalyzer.cfg.xml

它的安裝部署十分簡單,將IKAnalyzer3.0GA.jar部署於項目的lib目錄中;IKAnalyzer.cfg.xml文件放置在代碼根目錄(對於web項目,一般是WEB-INF/classes目錄,同hibernate、log4j等配置文件相同)下便可。

2.3  Lucene用戶快速入門

代碼樣例

IKAnalyzerDemo

Demo/**

*IKAnalyzerDemo*@paramargs*/

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;

/**

 * /*@authorlinly

 **/


public class IKAnalyzerDemo {

public static void main(String[] args) {

// LuceneDocument的域名

String fieldName = "text";// 檢索內容

String text = "IKAnalyzer是一個結合詞典分詞和文法分詞的中文分詞開源工具包。它使用了全新的正向迭代最細粒度切分算法。";

// 實例化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:IKAnalyzer是一個結合詞典分詞和文法分詞的中文分詞開源工具包。它使用了全新的正向迭代最細粒度切分算法。>>

相關文章
相關標籤/搜索