Luceneの中国語分詞器


中国語分詞器


中国語の分詞器とは


英語については、スペース、句読点を付けて分詞する中国語については、具体的な語を付けて分けるべきで、中国語の分詞は語を、意味のある語に分けることです.
例えば、「私の中国人」、分詞:私、の、中国、中国人、国人.

Luceneが持参した中国語分詞器


StandardAnalyzer:


単字分詞:中国語に従って一字一字分詞する.例えば、「私は中国を愛している」、効果:「私」、「愛」、「中」、「国」.

CJKAnalyzer


二分法分詞:二つの字で切り分ける.例えば、「私は中国人です」、効果:「私は」、「はい中」、「中国」、「国人」.
上の2つの分詞器は需要を満たすことができません.

サードパーティ中国語分詞器


名前
最近の更新
スピード(ネット情報)
拡張サポート、その他
mmseg4j
2013
complex 60 Wワード/s(1200 KB/s)simple 100 Wワード/s(1900 KB/s)
sougou辞書を使用して、カスタマイズすることもできます(complexsimpleMaxWord)
IKAnalyzer
2012
IK 2012 160 Wワード/s(3000 KB/s)
ユーザー辞書拡張定義のサポート、カスタムストップワードのサポート(スマート細粒度)
Ansj
2014
BaseAnalysis 300 W/shlAnalysis 40 W/s
ユーザーのカスタム辞書をサポートし、語性を分析し、新語発見機能がある.
paoding
2008
100 Wワード/s
数を制限しないユーザー定義辞書のサポート
注意:中国語分詞器は最新バージョンのLuceneと互換性がない可能性があり、構成が完了するとTokenStream contractviolationのエラーが発生し、mmseg 4 jについてはcom.chenlb.mmseg4j.analysis.MMSegTokenizerのソースコードを変更し、super.reset()reset()に追加し、再コンパイルして元jarに置き換える必要があります.
注意:lucene 4.6.0以降のバージョンでIKAnalyzerを使用すると、次の異常が発生する可能性があります.
java.lang.illegalstateexception:tokenstream contract violation: reset()/close() call missing, reset() calledmultiple times, or subclass does not call super.reset(). please see javadocs oftokenstream class for more information about the correct consuming workflow.
luceneが4.6.0からtokenstreamメソッドの変更を開始する問題のため、incrementtokenメソッドを使用する前にresetメソッドを呼び出す必要があります.
解決方法:コードを次のコードに変更します.
IKAnalyzer analyzer = newIKAnalyzer(true);  
StringReader reader = new StringReader(news);  
TokenStream ts = analyzer.tokenStream("", reader);  
CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);  
ts.reset();  
while(ts.incrementToken()){  
   System.out.print(term.toString()+"|");  
}  
analyzer.close();  
reader.close();  

これは私がLuceneを勉強している間にやったプロジェクトです.あなたたちに役立つかもしれません.「Lucene 6.6.6.2 APIサンプルダウンロード」