Исключение результатов из поиска

Отсутствие аргументов на определенном месте в последовательности

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

Отсутствие аргумента проверяется в диапазоне, заданном функцией.

Пример

phrase(not строительный, компания) находит слово «компания», если непосредственно перед ним нет слова «строительный»;

phrase(3, not строительный, компания) находит слово «компания», если на расстоянии не более 3 токенов перед ним нет слова «строительный»;

sentence(not строительный, компания) находит слово «компания» только в тех в предложениях, где нет слова «строительный».

Пример задачи: Поиск слова в определенном значении и контексте

Для поиска слова «производство» только в значении «отрасль промышленности» или «производство материальных благ», но не в значении «ход судебного дела», можно запретить перед ним прилагательные «уголовный», «судебный» или «процессуальный»:

phrase(not orn(уголовный, судебный, процессуальный), производство).

Этот запрос найдет искомое слово во фразах: «российское производство», «предприятие по производству», «производство автомобилей», но не найдет его во фразе «открыто уголовное производство».

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

Чтобы указать, что на определенном месте в последовательности могут находиться любые аргументы за исключением указанных, используется функция except() (или ее аналоги: функция difference() и оператор «/»).

Если функция не поддерживает вложенные аргументы (например, term() или regex(), dictword(), knownword(), unknownword(), number() и т.п.), использование except() недопустимо. В этом случае можно использовать вместо нее оператор «/» или функцию difference().

Пример

phrase(except(строительный), компания) находит фразу из 2 слов: любое слово, кроме «строительный», сразу после которого идет слово «компания»;

case(title, except(компания)) = case(title)/компания = difference(case(title), компания) найдет все слова с заглавной буквы, кроме слова «Компания».

term(positive)/orn(выдающийся, гениальный) = difference(term(positive), orn(выдающийся, гениальный)) найдет все слова из словарного списка «positive», кроме слов «выдающийся» и «гениальный».

regex(“авто\w+”)/автосервис = difference(regex(“авто\w+”), автосервис) найдет все слова, начинающиеся на «авто», кроме слова «автосервис».

Пример задачи: Поиск объектов, имеющих положительную оценку

Для поиска существительных, перед которыми находится слово из списка положительно окрашенных слов, можно составить такой запрос:

phrase(0, term(positive), lemma(noun))

Однако такой запрос найдет в том числе устойчивые словосочетания, в которых слова из списка не являются положительно окрашенными (например, «исполнительный директор», «чистая прибыль», «полезные ископаемые»).

Чтобы исключить их из поиска, можно использовать оператор «/»:

phrase(0, term(positive), lemma(noun))/orn(“чистая прибыль”, “исполнительный директор”, “полезные ископаемые”)

Разница между not и except()

not проверяет отсутствие аргумента.

except() находит любое слово, кроме аргумента.

Пример

phrase(not(orn(уголовный, судебный, процессуальный)), производство) найдет само слово «производство», непосредственно перед которым нет слов «уголовный», «судебный», «процессуальный».

phrase(except(orn(уголовный, судебный, процессуальный)), производство) найдет последовательность: любое слово, кроме слов «уголовный», «судебный», «процессуальный», за которым непосредственно следует слово производство».