キーワードを取得するApache Lucene
5.5/6.0に基づくモジュールがあります。 1つのこと以外はすべて正常に動作しています - Lucene
はストップワードをフィルタリングしません。Apache LuceneはStopAnalyzerとStopFilterを使用してもストップワードをフィルタリングしません
私は2つの異なるアプローチでストップワードフィルタリングを有効にしようとしました。
アプローチ#1:
tokenStream = new StopFilter(new ASCIIFoldingFilter(new ClassicFilter(new LowerCaseFilter(stdToken))), EnglishAnalyzer.getDefaultStopSet());
tokenStream.reset();
アプローチ#2:
tokenStream = new StopFilter(new ClassicFilter(new LowerCaseFilter(stdToken)), StopAnalyzer.ENGLISH_STOP_WORDS_SET);
tokenStream.reset();
完全なコードはここにあります:
https://stackoverflow.com/a/36237769/462347
私の質問:
- なぜ
Lucene
はストップワードをフィルタリングしないのですか? Lucene
5.5/6.0でストップワードフィルタリングを有効にするにはどうすればよいですか?
問題はLucene'は、このような言葉を除外していない 'ということです「私」、および他の一般的な英語の単語。他の拡張ストップワード辞書を付けるべきですか? 'Lucene'は他のストップワード辞書を提供していますか? –
'EnglishAnalyzer'と' StandardAnalyzer'は同じストップワードセットを使用していますので、luceneにパッケージされたより広範なストップリストがあるとは思われません。だから、おそらくあなたは自分自身を作成する必要があります。 StandardAnalyzerを使用している場合は、ストップワードをプレーンテキストファイルに格納し、リーダーをコンストラクタに渡すのが簡単です。 – femtoRgon
「StandardAnalyzer」または「StandardTokenizer」を意味しますか? 'StandardAnalyzer.STOP_WORDS_SET'を使用しますが、' StandardAnalyzer'のコンストラクタは使用されていません。これに対して、私は 'stdToken.setReader(new StringReader(fullText));'を持っています。どこに私のストップワードリストを置くべきですか? –