8

如何使用 Python + NLTK 来识别句子是否指代过去/现在/未来?

我可以只使用 POS 标记来做到这一点吗?这似乎有点不准确,在我看来,我需要考虑句子上下文而不仅仅是单词。

对另一个可以做到这一点的图书馆有什么建议吗?

4

2 回答 2

9

POS 标记 - 它为您提供标签,让您查看动词的时态 -已经考虑到句子上下文,因此它解决了您的问题。通过上下文的准确性。事实上,词性标注本身实际上并不能与单词一起正常工作!看看这个来自Ch 的例子。NLTK 书中的第 5 条,根据句子中的上下文,让 NLTK 在给定同音异义词的情况下区分名词和动词(即,给定一个像permit这样的词,它可以作为动词和名词具有不同的含义):

让我们看另一个例子,这次包括一些同音词:

  >>> text = nltk.word_tokenize("They refuse to permit us to obtain the refuse permit")
  >>> nltk.pos_tag(text)
  [('They', 'PRP'), ('refuse', 'VBP'), ('to', 'TO'), ('permit', 'VB'), ('us', 'PRP'),
  ('to', 'TO'), ('obtain', 'VB'), ('the', 'DT'), ('refuse', 'NN'), ('permit', 'NN')]

请注意,reject 和 permit 都以现在时动词 (VBP) 和名词 (NN) 的形式出现。例如,refUSE 是一个动词,意思是“拒绝”,而 REFuse 是一个名词,意思是“垃圾”(即它们不是同音字)。因此,我们需要知道使用了哪个单词才能正确发音。(出于这个原因,文本转语音系统通常执行 POS 标记。)

于 2013-11-14T17:49:25.383 回答
6

自己做这件事不会太难。 该表应该可以帮助您识别不同的动词时态,处理它们只需解析 nltk.pos_tag(string) 的结果

我不确定您是否想了解所有不规则动词时态,例如“可能是”等……但是如果您只想要现在/过去/未来,这是一个非常容易的解析任务。

我不知道有任何图书馆会自己做这件事,而且我一直想训练一些模型来为我决定这个,但从来没有考虑过。

会有一定程度的误差,但不会很大。我建议解析所有动词,以便决定如何处理时态,因为像这样的句子:我很高兴他会见到她。时态存在,但有一个将来时从句([that] he will see her )所以这涉及到你的问题的语言学,你没有详细说明,但你明白了。

于 2013-11-14T15:46:23.800 回答