NLP 中的否定处理

Negation handling in NLP

我目前正在做一个项目,我想从文本中提取情感。当我使用 conceptnet5(语义网络)时,我不能简单地在包含否定词的句子中添加前缀,因为这些词根本不会出现在 conceptnet5 的 API.[=20= 中]

这是一个例子:

The movie wasn't that good.

因此,我想我可以使用 wordnet 的引理功能来替换句子中包含否定词的形容词,例如 (not, ...)。

在前面的示例中,算法将检测到 wasn't 并将其替换为 was not。 此外,它会检测到否定词 not,并将 good 替换为其反义词 bad。 该句子将显示为:

The movie was that bad.

虽然我发现这不是最优雅的方式,而且在很多情况下它可能会产生错误的结果,但我仍然希望以这种方式处理否定,因为坦率地说,我不知道有什么更好的方法.

考虑到我的问题: 不幸的是,我没有找到任何库可以让我替换所有出现的附加否定词 (wasn't => was not)。 我的意思是我可以通过用正则表达式替换出现的地方来手动完成,但那样我就会被英语困住。

因此我想问问你们中的一些人是否知道可以在这里帮助我的库、函数或更好的方法。 目前我正在使用 python nltk,但它似乎并没有包含这样的功能,但我可能是错的。

提前致谢:)

wasn't这样的情况可以简单的通过tokenization解析(tokens = nltk.word_tokenize(sentence)):wasn't会变成wasn't.

但'Quasi negative words, like hardly, barely, seldom'和'Implied negatives, such as fail, prevent, reluctant, deny, absent'也可以构成否定意义,请看this paper。更详细的分析可以在 Christopher Potts 的 论否定的消极性中找到 .

考虑到你最初的问题,情绪分析,据我所知,大多数现代方法都没有明确地处理否定;相反,他们使用高阶 n-gram 的监督方法。实际处理否定的通常在否定和标点符号之间的所有单词上附加特殊前缀 NOT_。