Страницы

Поиск по вопросам

понедельник, 18 марта 2019 г.

Поиск текста с учетом звучания на русском и английском языках

Какими средствами лучше всего организовать индексирование и поиск русских слов, которые являются записью английской транскрипции? Например, слово vision в русском варианте будет записано как вижн или вижен, но значение сути не меняется. Поиск, соответственно, должен быть произведен как по vision так и по вижн без потери результатов на выходе. Soundex и Metaphone, на сколько я понимаю, работают строго в одном языке без скрещиваний.


Ответ

Мне кажется, в большинстве случаев, будет достаточно функционала синонимов. База данных, скорее всего, имеет определенную тематическую направленность, например медицина или электротехника. И чтобы настроить поиск с учетом транслита/звучания слов на разных языках достаточно заполнить 500-1000 синонимов. Но использовать анализатор с фильтром типа synonym не для индексации, а для анализа поискового запроса.
Синонимы лучше вынести в отдельный файл, а не хранить в настройках.
{ "index" : { "analysis" : { "analyzer" : { "synonym" : { "tokenizer" : "whitespace", "filter" : ["synonym"] } }, "filter" : { "synonym" : { "type" : "synonym", "synonyms_path" : "analysis/synonym.txt" } } } }

Пример содержимого файла synonym.txt:
vision, вижн, вижен

Если этого недостаточно, то получаем очень сложную задачу.
Если дело ограничивается транслитом, то смотреть в сторону плагина ICU Transform Token Filter Если нет, и нужно vision, вижн, вижен для всех возможных слов, то смотреть в сторону машинного обучения. Это решение Rosette for Elasticsearch, видимо платное.
Полезные ссылки.
Обсуждение данной темы Rosette name translator - есть поддержка русского языка
Soundex и Metaphone - это фонетические алгоритмы, работают, как вы написали, в одном языке. Это не то, что вам нужно.

Комментариев нет:

Отправить комментарий