Обработка отрицания в НЛП


В настоящее время я работаю над проектом, в котором хочу извлечь эмоции из текста. Поскольку я использую conceptnet5 (семантическую сеть), я не могу, однако, просто приставлять слова в предложении, которое содержит слово отрицания, поскольку эти слова просто не будут отображаться в API conceptnet5.

Вот пример:

Фильм был не настолько хорош.
Таким образом, я решил, что могу использовать функциональность леммы wordnet для замены прилагательных в предложениях, содержащих отрицание-слова типа (не, ...).

В предыдущем примере алгоритм определит wasn't и заменит его на was not. Далее, он обнаружит отрицательное слово not и заменит good его антонимом bad. Предложение будет гласить:

Фильм был настолько плох.

Хотя я вижу, что это не самый элегантный способ, и он, вероятно, во многих случаях приводит к неправильному результату, я все же хотел бы обращаться с отрицанием таким образом, поскольку я, честно говоря, не знаю ни одного лучше подходить.

Учитывая мою проблему: К сожалению, я не нашел библиотеки, которая позволила бы мне заменить все вхождения прилагаемых отрицательных слов (wasn't => was not). Я имею в виду, что я мог бы сделать это вручную, заменив вхождения регулярным выражением, но тогда я застрял бы с английским языком.

Поэтому я хотел бы спросить, знают ли некоторые из вас библиотеку, функцию или лучший метод, который мог бы помочь мне здесь. В настоящее время я использую python nltk, все еще это не похоже, что он содержит такую функциональность, но я могу ошибаться.

Заранее спасибо:)

1 6

1 ответ:

Случаи, подобные wasn't , могут быть просто проанализированы с помощью токенизации (tokens = nltk.word_tokenize(sentence)): wasn't превратится в was и n't.

Но отрицательное значение также может быть сформировано "Квазинегативными словами, такими как вряд ли, едва, редко" и "подразумеваемыми негативами, такими как неудача, предотвращение, нежелание, отрицание, отсутствие", посмотрите в этой статье. Еще более подробный анализ можно найти в книге Кристофера Поттса "о негативности отрицания" [10]. .

Учитывая вашу первоначальную проблему, анализ настроений, большинство современные подходы, насколько мне известно, не обрабатывают отрицания явно; вместо этого они используют контролируемые подходы с n-граммами высокого порядка. Те, кто действительно обрабатывает отрицание, обычно добавляют специальный префикс NOT_ ко всем словам между отрицанием и знаками препинания.