2016-05-22 13 views
0

Apache Luceneで独自のアナライザを実装しました。用語が索引付けされる前に適用するフィルタがあります。私はフィルタの適用順序を変更することは問題ではないと思った。しかしそれはそうであるように思われる。例えば;Apache Luceneで "フィルタを適用する順序"の背後にあるロジック

analyzer = new Analyzer(){ 
     @Override 
     protected TokenStreamComponents createComponents(String fieldName){ 
     AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY; 
     Tokenizer source = new NGramTokenizer(factory,3,10); 
     TokenStream filter = new NewlineFilter(source); 
     filter = new LowerCaseFilter(filter); 
     filter = new UsefulGrams(getVersion(), filter, usefulGramSet); 
     filter = new EmptySpaceFilter(filter); 
     return new TokenStreamComponents(source,filter); 
     }; 
    }; 

私のトークナイザはグラムを生成しています。その後、改行がカットされ、すべてのケースが下がります。この後、私は、有用であることがわかっているグラムだけを索引に入れて、そのフィルターが無駄なグラムを排除するようにします。最後に、空のスペースで完全に構成されるグラムをフィルタリングします。

私が保持しているデータセットでは、この順序で316の索引語が生成されます。しかし、私はフィルターの順序を変更する場合。

analyzer = new Analyzer(){ 
     @Override 
     protected TokenStreamComponents createComponents(String fieldName){ 
     AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY; 
     Tokenizer source = new NGramTokenizer(factory,3,10); 
     TokenStream filter = new UsefulGrams(getVersion(), source, usefulGramSet); 
     filter = new NewlineFilter(filter); 
     filter = new EmptySpaceFilter(filter); 
     filter = new LowerCaseFilter(filter); 
     return new TokenStreamComponents(source,filter); 
     }; 
    }; 

これは、350のインデックス付き用語を生成します。 「最初の」フィルタはSOURCE TOKENIZERを使用する必要がありますが、他のフィルタはFILTER TOKENSTREAMを使用することに注意してください。 すべてのパラメータにSOURCEを入れると、「addsuppression」に関する警告が表示されます。

私の質問は、これらのフィルタを適用する順序はどうでしょうか?私はこれらをすべて適用したい(すべて小文字で、私が選んだ言葉だけで、空白のグラムなしで、改行なし)、これは何かによって変更されるとは思わないだろう、明らかにそうである。

+0

インデックスされた用語の番号が変更されることがありますが、問題は他のものから発生しているようです。 – Karavana

答えて

2

はい、ご注文ください。フィルターはテキストに順番に適用されます。

これは、あるフィルタの動作が別のフィルタの結果に影響する場合に重要です。これはステムマーで起こるのはかなり簡単です。

私は同義語シスSynonymFilter持っている場合(バイキングを - >船員)、およびEnglishStemFilter、その後、

  • SynonymFilterなってしまいますバイキング:バイキング - >船員を
  • EnglishStemFilter:船員 - > seafar
    • EnglishStemF:私はSynonymFilter前ステマーを置く場合

    ILTER:バイキング - > vike

  • SynonymFilter:vike(効果なし)

限り、あなたの解析のための正しい順序として、私は知りません。主な質問は、UsefulGramsフィルタを配置する場所にあるように見えますが、実際には何がわかりません。

関連する問題