如何在nltk中创建句子的否定

时间:2014-05-13 14:56:47

标签: python nlp nltk

我是NLTK的新手。我想创造一个句子的否定(通常是现在时)。例如,是否有允许我转换的函数:  '我跑步'我没有跑#39;

'她跑步'她不会跑步#。

我想我可以使用POS来检测动词及其前面的代词,但我只是想知道是否有更简单的内置函数

3 个答案:

答案 0 :(得分:7)

不,没有。更重要的是,它是一个非常复杂的问题,可以成为研究的主题,而不是“简单的内置函数”可以解决的问题。这样的操作需要对句子进行语义分析,想一想例如“我认为我可以跑得更快”,哪三个动词应该被否定?我们知道“思考”,但对于算法它们是一样的。即使是检测你是否应该使用“做”或“做”的情况并不容易。考虑“玛丽和简走在路上”和“简走在路上”,没有解析树,你将无法区分单数/复数问题。总而言之,没有,也不可能是任何简单的解决方案。你可以设计你想要的任何类型的启发式(其中一种是基于POS的否定),如果它失败了,就开始在这方面进行研究。

答案 1 :(得分:2)

您应该使用解析器来查找句子谓词的头部(动词)。

如果您认为原始句子在语法上是正确的,您可以依靠属性来克服协议问题()原始的动词。

如果它是辅助 1 ,请将其替换为其负对应物( > > 不会 > 没有等)。如果它不是辅助,请添加正确的支持形式 - 执行:如果head-verb是过去的形式,则(即,走了),如果它是非第三人称单数形式(即认为),如果是第三人称单数形式(即运行)。在supportive- 之后立即使用原始head-verb的基本形式( walk 运行 )。

要解决的难题是ShaiCohen在他的回答中所讨论的问题。请注意,您并不总是需要替换这些项目。在许多情况下你不应该这样做。例如:我是在办公室看到某人的人> 我不是那个在办公室看到某人的人

查看Contextors API

1 小心看起来像辅助词的词汇动词。 她有一只狗......

答案 2 :(得分:1)

除了上一个答案中讨论的挑战之外,还存在负极性项所带来的挑战,词汇项需要先前的非肯定元素。请考虑以下句子:

a. I didn’t see anyone at the office
b. * I saw anyone at the office
c. I saw someone at the office  

(a)的正面形式不是(b)而是(c),其中任何人某人取代。

负极性项目在释义任务的背景下也是一个挑战,例如将句子的声音从主动变为被动,反之亦然。您可以在帖子中详细了解此主题:Voice Alternation and Negative Polarity Items