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

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

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

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

Пример

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

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

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

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

Поиск слова «производство» в газетных статьях дает следующие результаты:

pdl except not 3 rus

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

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

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

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

Чтобы указать, что на определенном месте в последовательности могут находиться любые аргументы за исключением указанных, используется функция 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(уголовный, судебный, процессуальный)), производство) найдет само слово «производство», непосредственно перед которым нет слов «уголовный», «судебный», «процессуальный».

pdl except not 1 rus

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

pdl except not 2 rus