我是NLTK的新手。我想创造一个句子的否定(通常是现在时)。例如,是否有允许我转换的函数: '我跑步'我没有跑#39;
或
'她跑步'她不会跑步#。
我想我可以使用POS来检测动词及其前面的代词,但我只是想知道是否有更简单的内置函数
答案 0 :(得分:7)
不,没有。更重要的是,它是一个非常复杂的问题,可以成为研究的主题,而不是“简单的内置函数”可以解决的问题。这样的操作需要对句子进行语义分析,想一想例如“我认为我可以跑得更快”,哪三个动词应该被否定?我们知道“思考”,但对于算法它们是一样的。即使是检测你是否应该使用“做”或“做”的情况并不容易。考虑“玛丽和简走在路上”和“简走在路上”,没有解析树,你将无法区分单数/复数问题。总而言之,没有,也不可能是任何简单的解决方案。你可以设计你想要的任何类型的启发式(其中一种是基于POS的否定),如果它失败了,就开始在这方面进行研究。
答案 1 :(得分:2)
您应该使用解析器来查找句子谓词的头部(动词)。
如果您认为原始句子在语法上是正确的,您可以依靠属性来克服协议问题(不与不)原始的动词。
如果它是辅助 1 ,请将其替换为其负对应物( > 不,将> 不会, > 没有等)。如果它不是辅助,请添加正确的支持形式 - 执行:如果head-verb是过去的形式,则不(即,走了),不如果它是非第三人称单数形式(即认为),不如果是第三人称单数形式(即运行)。在supportive- 之后立即使用原始head-verb的基本形式( walk ,想,运行 )。
要解决的难题是ShaiCohen在他的回答中所讨论的问题。请注意,您并不总是需要替换这些项目。在许多情况下你不应该这样做。例如:我是在办公室看到某人的人> 我不是那个在办公室看到某人的人。
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。