Языки запросов современных поисковых машин, используемых для поиска текстов в базах данных или полнотекстовых хранилищах документов, разрешают задавать различные ограничения на искомые комбинации слов в тексте, определяя обязательность или необязательность присутствия тех или иных слов, допустимое расстояние между словами и порядок их следования в тексте, а также позволяя искать слова во всех грамматических формах, что дает возможность в принципе формулировать очень сложные запросы, точно и полно описывая возможные способы выражения в тексте искомого смысла.
Проблема создания хороших информационно-поисковых систем на базе поисковых машин заключается в том, что пользователь системы часто желает формулировать свой запрос в виде простого набора слов, словосочетаний или фразы на естественном языке, ожидая от системы понимания хотя бы элементарных способов того, в какой форме соответствующий смысл может быть выражен в тексте. Так, большинство поисковых запросов, по которым пользователь может найти требуемые тексты, состоят более чем из одного слова. Здесь начинаются проблемы: как обработать запрос из нескольких слов, в каком виде транслировать его поисковой машине?
Во-первых, не известно, как искать вхождение слов в документ: как цепочку подряд следующих слов (используя оператор языка запросов для поиска ПО ФРАЗЕ), как набор близко расположенных слов (используя оператор типа РЯДОМ), просто как набор встречающихся совместно в одном документе слов (используя оператор И), или как набор таких слов, из которых лишь некоторые должны обязательно встретиться в документе (используя оператор ИЛИ).
Во-вторых, не ясно, как расширять слова запроса грамматическими формами. Если искать все формы для каждого слова запроса, то точность поиска оказывается невысока по двум причинам. Без учета грамматических связей слов запроса нет возможности разрешить омонимию: например, при обработке запросов решение суда и грузовые суда все варианты словоформы судаследует строить в первом случае от слова суд, а во втором — от слова судно. При поиске словосочетаний допустимыми являются не все грамматические формы слов: например, при обработке запроса президент России словопрезидент следует искать во всех вариантах, а слово Россия стоит искать только в заданной форме родительного падежа, иначе можно найти фрагменты текста следующего вида: к встрече американского президента Россия готовилась заблаговременно. Кроме того, поиск слова во всех грамматических формах обычно увеличивает нагрузку на поисковую машину.
В итоге обычно информационно-поисковые системы инициируют поиск всех слов запроса по ИЛИ либо по И, допуская каждое слово во всех грамматических формах, используя особенность поисковых машин: они обычно ранжируют найденные документы по релевантности таким образом, что первыми в результатах поиска выдаются документы, содержащие наибольшее количество слов из запроса, в которых эти слова расположены наиболее близко. Поскольку при этом никак не учитывается связанность слов в запросе, результаты поиска могут содержать ошибки, вызванные случайной близостью в тексте не связанных по смыслу слов. Так, все слова словосочетаний президент России и российский президент целесообразно искать в тексте только рядом, поскольку большинство других случаев их близкого положения будут соответствовать совершенно иным смыслам. Напротив, слова словосочетания зарегистрировать изобретение могут находиться в тексте рядом в любом порядке, будучи разделенными другими словами: изобретение способа преобразования запросов, которое так и не было зарегистрировано. Помимо невысокой точности, избыточный поиск по ИЛИ обычно также увеличивает нагрузку на поисковую машину.
Для решения указанных выше проблем предназначен модуль расширения поисковых запросов RCO Query Parser. Модуль разбирает контекстный поисковый запрос на русском языке и, с учетом грамматики и семантики, строит оптимальное поисковое выражение для обработки в поисковой машине, которая индексирует текст, ничего не зная о языке, за исключением того, что слова разделяются пробелами. Полезный результат, достигаемый при использовании RCO Query Parser, заключается в повышении точности поиска при сохранении его высокой полноты, а также в снижении нагрузки на поисковую машину.
Основные особенности RCO Query Parser:
- Возможность грамматического анализа неизвестных слов, синтез всех словоформ;
- Снятие омонимии слов в запросе. Для многословных запросов за счет учета синтаксических связей между словами запроса. Для однословных запросов за счет системы приоритетов, отражающей де-факто принятые нормы формулирования запросов: высокий приоритет на именительный падеж существительных, низкий — на формы первого лица и повелительного наклонения глаголов, краткие формы прилагательных и причастий и т.п. Влияние регистра написания на приоритет имя собственное/имя нарицательное;
- Формирование базовой структуры оптимального поискового выражения: cегментация запроса на фрагменты, которые ищутся КАК ФРАЗА, комбинация таких фрагментов с использованием операторов NEAR и AND. Так, связки прилагательных или причастий и существительных в составе согласованных именных групп следует искать как единые фразы; сочетания предложно-падежных и свободных словоформ (именных групп) следует связывать через AND; связки предикатов (глаголы в личной форме и событийные существительные) с аргументами следует связывать через NEAR (а если язык запросов позволяет — задавать поиск в пределах предложения) и т.п.
- Расширение поискового выражения корректными грамматическими формами слов с использованием синонимов. Не исключено порождение нетривиальных синонимических трансформаций с модификацией синтаксической структуры (указ президента = президентский указ).
- Возможность включения специальных режимов обработки запросов, например, выделение из запроса и стандартизация формальных атрибутов искомых документов.
Подробное описание принципов работы RCO Query Parser вместе с примерами преобразования запросов изложено в первой из указанных ниже статей.
Вторая статья описывает результаты экспериментального исследования данного метода поиска на коллекции нормативно-правовых документов.