Я использую анализатор немецкого языка для токенизации некоторого контента. Я знаю, что это в основном фильтр макросов для "нижних регистров", "german_stop", "german_keywords", "german_normalization", "german_stemmer".
Моя проблема связана с фильтром нормализации. Вот Документация Elasticsearch и Реализация Lucene фильтр. Проблема в том, что ae ue и oe трактуются как немецкие буквы ä,ö и ü и поэтому преобразуются в a,o,u.
Второе преобразование хорошо, но первое приводит к большему количеству проблем, чем решает. Обычно в немецких текстах нет ae, ue, oe, которые действительно представляли бы ä, ü, ö. В большинстве случаев они на самом деле появляются внутри иностранных слов, происходящих от латинского или английского, таких как «Aearodynamik» (аэродинамика). Затем фильтр интерпретирует «Ae» как «Ä», а затем преобразует его в «A». Это дает «ародинамику» в качестве токена. Обычно это не проблема, так как искомое слово также нормализуется с помощью этого фильтра. Однако это становится проблемой в сочетании с поиском по подстановочным знакам:
Представьте себе такое слово, как «FooEdit», оно будет преобразовано в «foodit». Поиск «редактировать ИЛИ * редактировать *» (это мой обычный поиск, когда пользователь ищет «редактировать») не даст результата, поскольку «е» в «редактировать» потерялось. Поскольку в моем контенте много таких слов, и люди ищут частичные слова, это не такой крайний случай, как кажется.
Итак, мой вопрос: есть ли способ избавиться от преобразований «ae -> a»? Насколько я понимаю, это часть алгоритма снежного кома German2, поэтому, вероятно, это не так. быть изменен. Означает ли это, что мне придется избавиться от всего шага нормализации или я могу предоставить свою собственную версию алгоритма снежного кома, в которой я просто удаляю части, которые мне не нравятся (не нашел никакой документации о том, как использовать пользовательский алгоритм снежного кома для нормализации)?
Ваше здоровье
Том