Яndex.Dict - словарный сервер. Как устроен русский поиск yandex

Аватар пользователя dev
Опубликовано вт, 07/14/2015 - 17:18 пользователем dev

Задача Яndex.Dict - понимание и расширение запроса пользователя и передача обработанного запроса независимому поисковому механизму. Яndex.Dict работает с уже готовым индексом, созданным без учета морфологии языка.

Принцип взаимодействия Яndex.Dict с поисковым механизмом — преобразование ("морфологизация") поискового запроса, то есть каждый элемент поискового запроса, опознаваемый как слово русского языка, заменяется на все его словоформы.

Пример (из жизни) морфологического разбора:

пить квас преобразуется в

(пей OR пейте OR пив OR пивш* OR пивши OR пил OR пила OR пилась OR пили OR пились OR пило OR пилось OR пился OR пит* OR пить OR питься OR пьемOR пьет OR пьете OR пьется OR пьешь OR пью OR пьют OR пьются OR пьющ*) NEAR (квас OR кваса OR квасам OR квасами OR квасах OR квасе OR квасов OR квасом OR квасу OR квасы)

Если слово не существует в словаре ни как имя нарицательное, ни как собственное, то словарный сервер на основании имеющихся у него морфологических правил строит гипотезы возможной нормализации и словоизменения.

Пример (из почты нашего сервера) генерации гипотезы для "неправильного" слова:

компутер анализируется как

компутер образец: футер (СУЩЕСТВИТЕЛЬНОЕ, им вин, ед, муж, неод)

компутер образец: скутер (СУЩЕСТВИТЕЛЬНОЕ,им вин,ед,муж,неод)

компутирать образец: утирать (ГЛАГОЛ,прош,ед,изъяв,муж,сов)

Существует возможность обучить словарь, что означает пополнить его новыми словами с отнесением их к соответствующей морфологической группе.

Яndex.Dict может также производить синтаксический анализ, то есть определять согласование слов и изменять их соответственно.

Пример (из "Записной книжки" А.Кнышева) учета словосочетаний:

для ваучерного фьючерса превратится в:

для NEAR ((ваучерного NEAR фьючерса) OR (ваучерных NEAR фьючерсов) OR ((ваучерного OR ваучернейшего) NEAR фьючерса) OR ((ваучерных OR ваучернейших) NEAR фьючерсов))

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

Свойства поискового интерфейса, необходимые для встраивания Яndex.Dict:

* поддержка операции логического объединения (OR)
* максимальная длина запроса не менее 300-500 символов ( чем больше, тем лучше).

Желательные свойства поискового интерфейса:

* поддержка операции логического пересечения (AND); обязательно наличие скобочных конструкций.
* если максимальная длина запроса невелика (меньше 5K), то желательно наличие wild card по окончанию (например, дерев*).
* способ указания точной словоформы (например, кавычки)

Зачем нужны морфология и синтаксис или Как искать ветра в поле

Распространено мнение, что шаблон "*", означающий любой набор символов, достаточен для поиска в русских текстах. То есть все проблемы, связанные с особенностями морфологии (п. 5.3), решаются путем обеспечения развитого языка запросов (п. 2.2). Но представьте себе - Вы узнали, что искали ветер в поле и нашли. Чтобы найти эту информацию, Вы, вероятно, попросите компьютер поискать слова "ветер" и "поле". Но если в тексте были формы "ветра" или "полях"? Остается вариант шаблона - "вет*" и "пол*", что тут же выдаст Вам материалы о польской ветчине и политике вето! Отсутствие морфологии сильно, а иногда катастрофически влияет на чувствительность и избирательность поиска. Запрос "ветер И поле" уменьшает чувствительность, а "вет* И пол*" - избирательность.

Случаи, когда шаблон не спасает:

* Слова, у которых в разных формах меняется основа (супплетивные формы): идти-шел, плохо хуже, я-меня, человек-люди, ребенок-дети
* Слова с большим количеством словоформ. Привести список всех словоформ русского глагола (с причастными и деепричастными формами - до 250 различных форм) человеку, не имеющему лингвистического образования, очень трудно. Понять, все ли словоформы из этого списка "накрываются" шаблоном "*" - ещё труднее.
* Слова с беглыми гласными и чередованиями. В словаре на 90000 слов, используемом в нашей системе, примерно четверть слов имеет чередования, которые не позволяют найти слово по шаблонам: (искать-ищу, окно-окон, расти-рос: запрос и* или ок* или р* даст много мусора)
* Короткие (три-четыре буквы) слова: дом, хор, ... . Во всех языках, в том числе и в русском, имеется общая закономерность: чем чаще слова используются, тем они короче. Применение шаблона "*" в коротких словах приводит к большому количеству ненужных ссылок в списке найденных документов.