Я использую Lucene и хочу использовать nGrams со стоп-словами.
Я написал собственный анализатор в Lucene относительно немецкого анализатора стоп-слов.
public class GermanNGramAnalyzer extends StopwordAnalyzerBase {
@Override
protected TokenStreamComponents createComponents(String s) {
NGramTokenizer tokenizer = new NGramTokenizer(4,4); //Tokenizer for nGrams
TokenStream result = new StandardFilter(tokenizer);
result = new LowerCaseFilter(result);
result = new StopFilter(result, this.stopwords);
result = new SetKeywordMarkerFilter(result, this.exclusionSet);
result = new GermanNormalizationFilter(result);
result = new NumberFilter(result);
return new TokenStreamComponents(tokenizer, result);
}
(...)
}
Это работает, но не так, как я хочу.Как видите, у нас есть 4 грамма, поэтому это выглядит так: (пробелы маскируются как "_")
Das Haus
das_
as_h
s_ha
_hau
haus
В немецком языке "das" похоже на "the" и должно быть удалено.Но, конечно, он не будет удален, тогда «das_», «as_h», «s_ha» вообще не содержат «das».
Итак, я хочу сначала добавить токенайзер слова, использовать стоп-слово, а затем снова объединить все и использовать ngram, как обычно.
Конечно, я могу "вручную" удалить все стоп-слова из строки перед тем, как добавить ее в Lucene, но я подумал, что это можно сделать с помощью Lucene.
У кого-то есть идея?