3

Lucene 4.4 を使用して小さなコーパスを分析しています。StopAnalyzer と StopAnalyzer を試しました。ただし、必要のない多くの用語が結果に表示されます。たとえば、「I'll」、「we」、「x」などです。したがって、Lucene が提供するストップワード リストをカスタマイズする必要があります。私の質問は次のとおりです。

  1. 新しいストップワードを追加するにはどうすればよいですか? Lucene には、カスタマイズされたストップワードを使用するためのこのコンストラクターがあることを知っています

    public StopAnalyzer(Version matchVersion, CharArraySet stopWords)

    しかし、ゼロからストップワードを作成したくありません。既存のストップワードを使用したいのですが、必要なストップワードを追加するだけです。

  2. "1"、"20"、"five"、"ten" など、すべての数字を単語と数字の両方として除外するにはどうすればよいですか?

私の解決策

  1. femtoRgon が示したように、Lucene が提供するストップワード リストは非常に小さく、変更できません。ストップワードのリストを取得する CustomizeStopAnalyzer を作成しました。私は StandardTokenizer を使用し、いくつかのフィルターを連鎖させています。
  2. 数値を削除するには、すべてのトークンをチェックして数値かどうかを確認する NumericFilter クラスを追加する必要があります。どうもありがとう、
4

1 に答える 1

4

1 - 標準のストップ ワード セットはStopAnalyzer.ENGLISH_STOPWORD_SETです。これは変更できないため、開始点としてコードをコピーする必要があります。

 final List<String> stopWords = Arrays.asList(
   "a", "an", "and", "are", "as", "at", "be", "but", "by",
   "for", "if", "in", "into", "is", "it",
   "no", "not", "of", "on", "or", "such",
   "that", "the", "their", "then", "there", "these",
   "they", "this", "to", "was", "will", "with"
 );
 final CharArraySet stopSet = new CharArraySet(Version.LUCENE_CURRENT, 
     stopWords, false);

2 - ストップ フィルターは、これに対する適切なアプローチではありません。おそらく、LetterTokenizerトークンを連続した文字列として定義し、文字以外の文字を排除するようなものを探しているのではないかと思います。

于 2013-09-29T22:20:51.187 に答える