の最終クラスのため、基本的には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で独自のロジックを必要としています。それは願っています
ありがとうございます。私は理解できませんでしたが、あなたはIncrementToken内のStandardAnalyzerのロジックを模倣すべきだと言っています。ソースからコードをコピーしてから、論理?そのコードは非常に複雑で、私はロジックを追加する場所と方法を知るために十分に理解できるだろうか、あるいは同じ結果を達成するために自分のコードを書くことを意味したのだろうか? – Person1
大丈夫です、質問はそのように実装することで、期待される動作を得ることができます – Mysterion