Luceneの中国語分詞器
2950 ワード
中国語分詞器
中国語の分詞器とは
英語については、スペース、句読点を付けて分詞する中国語については、具体的な語を付けて分けるべきで、中国語の分詞は語を、意味のある語に分けることです.
例えば、「私の中国人」、分詞:私、の、中国、中国人、国人.
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サンプルダウンロード」