KeywordAnalyzer для обработки различных вариантов написания слов с помощью умлаутов - PullRequest
0 голосов
/ 07 марта 2020

Как я могу заставить KeywordAnalyzer распознавать такие имена, как Мюллер независимо от написания?

KeywordAnalyzer ожидает точное совпадение, и я хотел бы, чтобы оно совпадало Мюллер , но также Мюллер ( уэ диграмма) и Мюллер .

1 Ответ

1 голос
/ 07 марта 2020

Следующий пользовательский анализатор справляется с задачей:

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.core.KeywordTokenizer;
import org.apache.lucene.analysis.de.GermanNormalizationFilter;
import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilter;

public final class KeywordAnalyzerDE extends Analyzer {
    public KeywordAnalyzerDE() {
    }

    @Override
    protected TokenStreamComponents createComponents(final String fieldName) {
        final Tokenizer source = new KeywordTokenizer();

        TokenStream result;
        result = new GermanNormalizationFilter(source);
        result = new ASCIIFoldingFilter(result);

        return new TokenStreamComponents(source, result);
    }
}

Ключ GermanNormalizationFilter:

Он учитывает тот факт, что ä, ö и ü иногда пишутся как ae, oe и ue.

  • 'ß' заменяется на 'ss'
  • 'ä', 'ö', 'ü' заменяются на 'a', ' o ',' u 'соответственно.
  • ' ae 'и' oe 'заменены соответственно на' a 'и' o '.
  • ' ue 'заменено на' u ', когда не следует гласная или q.

Я добавил ASCIIFoldingFilter на всякий случай, если в обработанном тексте есть другие диакритические знаки c.

Просмотр Исходный код был действительно полезным:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...