2016-07-31 3 views
0

を拡張します。特に私はLuceneの</strong><strong>に特別な分析ニーズを持っているが、私は<strong>StandardAnalyzer</strong>メカニズムの部品を使用して保存しておきたいのLuceneアナライザ

、私は、文字列

"-apple? - carrot-トマト" をしたいですトークン化する

  1. "-apple-" 2 "-carrot-" 3 "トマト"

(で囲まれた文字列 - は、別々のトークンとして扱われ)

これを実現するには、アナライザーとトークナイザをカスタマイズする必要があります。しかし、私は一からそれを書き直さなければならないのですか?たとえば、私はtokenizer(またはトークンフィルタ)に "apple"の疑問符を省略する必要があると伝える必要はありません。

既存のアナライザーを変更する方法はありますか?

答えて

3

の最終クラスのため、基本的にはStandardAnalyzerを拡張できませんでした。しかし、独自のトークナイザを使って同じトリックを行うことができます。それは簡単です。また、それは悪い考えであるので、既存のものを変更することはできませんでした。

私はこのような何かを想像することができます:

public class CustomAnalyzer extends Analyzer { 

    protected TokenStreamComponents createComponents(String s) { 
     // provide your own tokenizer, that will split input string as you want it 
     final Tokenizer standardTokenizer = new MyStandardTokenizer(); 

     TokenStream tok = new StandardFilter(standardTokenizer); 
     // make everything lowercase, remove if not needed 
     tok = new LowerCaseFilter(tok); 
     //provide stopwords if you want them 
     tok = new StopFilter(tok, stopwords); 
     return new TokenStreamComponents(standardTokenizer, tok); 
    } 

    private class MyStandardTokenizer extends Tokenizer { 

     public boolean incrementToken() throws IOException { 
      //mimic the logic of standard analyzer and add your rules 
      return false; 
     } 
    } 
} 

を私はちょうどそれが簡単にここに投稿できるようにすること、一つのクラスにすべてをかけます。一般的に、あなたはStandardAnalyzer(それの最後、ありませんので、再び拡張)からコードをコピーして、ダッシュであなたのロジックのincrementTokenアドオンに必要なものにできた例(MyStandardTokenizerで独自のロジックを必要としています。それは願っています

+0

ありがとうございます。私は理解できませんでしたが、あなたはIncrementToken内のStandardAnalyzerのロジックを模倣すべきだと言っています。ソースからコードをコピーしてから、論理?そのコードは非常に複雑で、私はロジックを追加する場所と方法を知るために十分に理解できるだろうか、あるいは同じ結果を達成するために自分のコードを書くことを意味したのだろうか? – Person1

+1

大丈夫です、質問はそのように実装することで、期待される動作を得ることができます – Mysterion

関連する問題

 関連する問題