IK Analyzer 3.0中国語分詞器のリリース


最新:IKAnalyzer 3.2.3安定版はすでにリリースされており、Lucene 3をサポートしている.0とsolr 1.4
リンク:
http://www.iteye.com/topic/667095
lucene 2.9以前のユーザーはIKAnalyzer V 3を使用してください.1.6GA http://linliangyi2007.iteye.com/blog/512577
IK Analyzerはオープンソースでjava言語に基づいて開発された軽量級の中国語分詞ツールパッケージです.2006年12月にリリースされたバージョン1.0から、IKAnalyzerはすでに3つの大きなバージョンをリリースしています.当初は,オープンソースプロジェクトLuenceを応用主体とし,辞書分詞と文法解析アルゴリズムを組み合わせた中国語分詞コンポーネントであった.新しいバージョンのIK Analyzer 3.0は、Luceneプロジェクトとは独立したJava向けの共通分詞コンポーネントに発展し、Luceneのデフォルトの最適化を実現しました.
1.1 IK Analyzer 3.0構造設計
发布IK Analyzer 3.0 中文分词器
1.2 IK Analyzer 3.0特性
  • は特有の「順方向反復最細粒度分割アルゴリズム」を採用し、80万字/秒の高速処理能力
  • を有する.
  • はマルチサブプロセッサ分析モードを採用し、英語アルファベット(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:
    作者のブログ:linliangyi 2007.iteye.comメール:[email protected]
    分詞結果:
    作者|ブログ|linliangyi 2007.iteye.com|2007|電子メール|電子メール|アドレス|[email protected] |  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中国語分詞器V 3.0使用マニュアル』(本書)
    2. IKAnalyzer3.0GA.jar
    3. IKAnalyzer.cfg.xml
    IKAnalyzer 3のインストールは簡単です.0GA.JArはプロジェクトのlibディレクトリに配置されます.IKAnalyzer.cfg.xmlファイルはコードルートディレクトリ(webプロジェクトの場合、通常はWEB-INF/classesディレクトリであり、hibernate、log 4 jなどのプロファイルと同じ)の下に置けばよい.
    2.3 Luceneユーザークイックスタート
    コードサンプル
    
    /**
     * 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>
    2.4重要API説明
    類org.wltea.analyzer.lucene.IKAnalyzer
    説明:IK分詞器の主クラスは、IK分詞器のLucene Analyzerクラス実装である.
    このクラスの使用方法については、「コードサンプル」章を参照してください.
    類org.wltea.analyzer.lucene.IKQueryParser
     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
    説明:マルチフィールド、単一条件クエリー分析
    パラメータ1:String[]fields、複数のクエリのターゲットドメイン名の配列
    パラメータ2:String query、クエリのキーワード
    戻り値:マルチフィールド、単一条件のクエリーを作成する
     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)
    戻り値:複数フィールド、単一条件、複数Occurのクエリーを作成する
     public static Query parseMultiField(String[] fields , String[] queries) throws IOException
    説明:マルチフィールド、マルチ条件クエリー分析
    パラメータ1:String[]fields、複数のクエリのターゲットドメイン名の配列
    パラメータ2:String[]queries、複数のクエリードメインに対応するキーワード配列
    戻り値:マルチフィールド、マルチ条件のクエリーを作成する
     public static Query parseMultiField(String[] fields , String[] queries , BooleanClause.Occur[] flags) throws IOException
    説明:マルチフィールド、マルチ条件、マルチOccurクエリー
    パラメータ1:String[]fields、複数のクエリのターゲットドメイン名の配列
    パラメータ2:String[]queries、複数のクエリードメインに対応するキーワード配列
    パラメータ3:BooleanClause.Occur[]flags,クエリ条件の組合せ方式(Or/and)
    戻り値:マルチフィールド、マルチ条件、マルチOccurのクエリーを作成する
    類org.wltea.analyzer.lucene.IKSimilarity
    説明:IKAnalyzerの類似度評価器.このクラスはDefaultSimilarityのcoordメソッドを再ロードし、類似度比較におけるシンボルヒット個数の重みの影響を高めます.すなわち、複数のシンボルが一致すると、ドキュメントの類似度が向上します.
    このクラスの使用方法については、「コードサンプル」章を参照してください.
    類org.wltea.analyzer.IKSegmentation
    説明:IK分詞器のコアクラスです.それは本当の意味での分詞器の実現です.IKAnalyzerの3.0バージョンは以前のバージョンとは異なり、Luceneとは独立したJava分詞器で実現できる.Lucene以外の環境でIK中国語の分詞コンポーネントを単独で使用する必要がある場合は、IKSegmentationが探しています.
     public Lexeme next() throws IOException
    説明:分詞器が切り分けた次の意味単位を読み出し、nullを返すと分詞器が終了したことを示します.
    戻り値:Lexemeセマンティックセルオブジェクト、すなわちLuceneに相当するセルオブジェクトToken
    類org.wltea.analyzer.Lexeme
    説明: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、意味ユニットの実際の内容、すなわち分詞の結果
    3.ワードテーブル拡張
    現在、IK分詞器が持っている主辞書は22万程度の中国語単語量を持っている.著者個人の精力が限られているため,収集した辞書を全範囲にフィルタリングし,整理していない.また,分詞コンポーネントの適用シーンに関わる分野の違いについても,各種専門辞書のサポートが必要である.このため,IK分詞器は辞書の拡張をサポートしている.
    APIベースの辞書拡張
    IK分詞器は、APIプログラミングモデルを使用して辞書を拡張することをサポートします.辞書がデータベースに格納されている場合は、この方法が適用されます.APIは以下の通りである.
    類org.wltea.analyzer.dic.Dictionary
    説明:IK分詞器の辞書オブジェクト.中国語の語彙のロード、メモリ管理、マッチング検索を担当します.
     public static void loadExtendWords(List extWords)
    説明:IKのメイン辞書にユーザ拡張語彙リストをロードし、分詞器の識別可能な語彙を追加します.
    パラメータ1:ListextWords,拡張語彙リスト
    戻り値:なし
    3.2構成ベースの辞書拡張
    IK分詞器は、IKAnalyzerを構成することによってもサポートする.cfg.xmlファイルを使用して、独自の辞書を拡張します.
    1.IKAnalyzerを配備するcfg.xml
    IKAnalyzer.cfg.xmlはコードルートディレクトリ(webプロジェクトの場合、通常はWEB-INF/classesディレクトリ)に配置され、hibernate、log 4 jなどのプロファイルと同じです.
    2.辞書ファイルの編集と配置
    分詞器の辞書ファイル形式はBOMのないUTF-8符号化の中国語テキストファイルであり、ファイル拡張子は限定されない.辞書では、中国語の語彙ごとに独立して1行を占め、rのDOS方式で改行する.
    (注意:BOMのないUTF-8形式が分からない場合は、辞書でUTF-8を使用して保存し、ファイルのヘッダに空の行を追加することを保証します).分詞器のソースコードorg.wltea.analyzer.dicパッケージの.dicファイルを参照してください.
    辞書ファイルは、Javaのリソースパス、つまりClassLoaderがロードできるパスに配置する必要があります.
    (IKEAnalyzer.cfg.xmlと一緒に置くことをお勧めします)
    3. IKAnalyzer.cfg.xmlファイルの構成
    
    <?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パケットに対する開始ルートパスです.
    (全文終了)
    ダウンロード:
    IKAnalyzer3.1.1安定版完全パッケージrar
    詳細については、
    『IKAnalyzer中国語分詞器V 3.1.1使用マニュアル.pdf』