Поиск с учетом морфологии

При поиске бывает необходимо указать ограничения на морфологические характеристики слов в запросе (например, найти данное слово только в единственном числе или только в творительном падеже).

Другая частотная задача — поиск всех слов с указанными морфологическими характеристиками (например, всех существительных или всех глаголов прошедшего времени).

Эти задачи можно решить, добавив в поисковый запрос соответствующее грамматическое значение (морфологический тег).

Ограничения на морфологические характеристики слов в запросе

Для ограничения поиска словами, имеющими указанные морфологические характеристики (часть речи, род, число, падеж и т.д.), используются функции lemma()/form()/stem()/partofspeech() с морфологическим тегом в качестве первого опционального параметра.

Использование морфологического тега необходимо, если у слова есть несколько совпадающих по написанию форм с разным грамматическим значением (рабочий (прилагательное) — рабочий (существительное), знать (глагол) — знать (существительное), решения (родительный падеж единственного числа) — решения (именительный/винительный падеж множественного числа).

Пример

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

Запрос lemma(простой) найдет употребления этого слова также в значении «не сложный» или «обыкновенный, однородный»:

Чтобы исключить лишние результаты из поиска, необходимо указать, что нас интересует только существительное «простой», для этого добавив соответствующий морфологический тег (в данном случае часть речи — существительное) в качестве первого параметра функции.

Чтобы указать морфологический тег из нескольких морфологических характеристик (часть речи + род, число + падеж и т.п.), их значения необходимо объединить с помощью символа «_».

Пример

lemma(noun_singular, простой) = lemma(singular_noun, простой) — найдет существительное «простой» в единственном числе («за период простоя», «простой шахты»), но не найдет «издержки из-за простоев».

Чтобы перечислить несколько возможных морфологических тегов, их следует записать через «|». В этом случае запрос сработает, если аргумент соответствует хотя бы одному из перечисленных тегов.

Пример

lemma(genitive|dative, улица) — найдет слово «улица» в родительном или дательном падежах («улицы», «улиц», «улице», «улицам»).

lemma(singular_genitive|plural_dative, улица) — найдет слово «улица» в родительном падеже единственного числа или в дательном падеже множественного числа («улицы», «улицам»).

Порядок следования морфологических характеристик в морфологическом теге значения не имеет.

Кроме того, запись тега не чувствительна к регистру: verb_tensepast = Verb_TensePast = VERB_TENSEPAST.

Список доступных морфологических тегов см. в файле «Морфологические категории».

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

Для поиска слов с определенными морфологическими характеристиками используются эквивалентные для этой задачи функции lemma()/form()/stem()/partofspeech() с единственным аргументом — морфологическим тегом, который может включать одну или несколько категорий.

Пример

partofspeech(noun) = form(noun) = stem(noun) = lemma(noun) — находит все существительные;

partofspeech(verb_tensepast) — найдет все глаголы и глагольные формы (причатия, деепричастия) в прошедшем времени: «остались», «возбуждено», «сообщил» и т.д.;

lemma(adjective_feminine_numbersingular_dative) — найдет все прилагательные женского рода в единственном числе, в винительном падеже: «московской», «уголовной» и т.д.;

partofspeech(noun_dative|noun_accusative) = lemma(noun_dative|noun_accusative) – находит все существительные в дательном и винительном падежах: «полосе», «зарплату» и т.д.