Поиск слов в отрицательных конструкциях

Для поиска аргументов в составе отрицательных конструкций используется функция negate().

Для поиска аргументов в любых контекстах, кроме отрицательных конструкций, используется функция direct() или ее эквивалент possible(), которая является обратной по отношению к negate().

Синтаксис

negate(аргумент_1 [, аргумент_2,..])

direct(аргумент_1 [, аргумент_2,..]) = possible(аргумент_1 [, аргумент_2,..])

При поиске отрицаний учитываются как грамматические («нарушений нет», «нарушения не зафиксированы»), так и лексические («отсутствие нарушений») способы его выражения.

Пример

negate(нарушение) найдет конструкции: «без нарушений», «отсутствие нарушений», «нарушений нет», «нарушения не зафиксированы», — но не найдет «было выявлено большое число нарушений»

direct(нарушение), напротив, найдет «было выявлено большое число нарушений», но не найдет все остальные конструкции: «мероприятие прошло без нарушений», «отсутствие нарушений», «нарушений нет», «нарушения не зафиксированы».

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

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

phrase(term(positive), partofspeech(noun))

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

Чтобы исключить такие случаи из результатов поиска, следует добавить в запрос функцию direct():

phrase(direct(term(positive)), partofspeech(noun))

С помощью функции negate() можно найти также отрицание негативных оценок:

phrase(direct(term(positive)) or negate(term(negative)), partofspeech(noun))

Примечание

Функция с несколькими аргументами эквивалентна запросу из нескольких функций с одним аргументом, объединенных с помощью оператора or:

negate(нарушение, ущерб) = negate(нарушение) or negate(ущерб)

direct(нарушение, ущерб) = direct(нарушение) or direct(ущерб)