0

ngramのセットをコンパイルしたい約500の文があります。ストップワードを削除するのに問題があります。lucene StandardFilterとStopFilterを追加しようとしましたが、それでも同じ問題が発生します。これが私のコードです:

for(String curS: Sentences)
{
          reader = new StringReader(curS);
          tokenizer = new StandardTokenizer(Version.LUCENE_36, reader);
          tokenizer = new StandardFilter(Version.LUCENE_36, tokenizer);
          tokenizer = new StopFilter(Version.LUCENE_36, tokenizer, stopWords);
          tokenizer = new ShingleFilter(tokenizer, 2, 3);
          charTermAttribute = tokenizer.addAttribute(CharTermAttribute.class);

    while(tokenizer.incrementToken())
    {
        curNGram = charTermAttribute.toString().toString();
        nGrams.add(curNGram);                   //store each token into an ArrayList
    }
}

たとえば、私がテストしている最初のフレーズは、「聞くすべての人のために」です。この例では、curNGramは「For」に設定されています。これは私のリストstopWordsのストップワードです。また、この例では、「every」はストップワードであるため、「person」を最初のngramにする必要があります。

  1. StopFilerを使用しているときに、ストップワードがリストに追加されるのはなぜですか?

すべての助けに感謝します!

4

1 に答える 1

1

あなたが投稿したものは私には問題ないように見えるので、stopWordsがフィルターに必要な情報を提供していないのではないかと思います。

次のようなものを試してください:

//Let's say we read the stop words into an array list (A simple array, or any list implementation should be fine)
List<String> words = new ArrayList();
//Read the file into words.
Set stopWords = StopFilter.makeStopSet(Version.LUCENE_36, words, true);

生成したストップワードのリスト(私が「words」と名付けたもの)があなたが思っているように見えると仮定すると、これはそれらをStopFilterで使用できる形式にする必要があります。

あなたはすでにそのようなストップワードを生成していましたか?

于 2012-11-21T22:28:53.107 に答える