如何使用Python + NLTK识别句子是指过去/现在/将来?
我可以仅使用POS标记吗?这似乎有点不准确,在我看来,我需要考虑句子上下文而不仅仅是单词。
对于另一个能够做到这一点的图书馆有什么建议吗?
答案 0 :(得分:6)
自己做这件事并不难。 This table应该帮助你识别不同的动词时态,处理它们只需要解析nltk.pos_tag(string)的结果
我不确定你是否想要进入所有不规则的动词时态,比如'本来可以'等......但是如果你只想要现在/过去/将来这是一个非常容易解析的任务。
我不知道任何库会自己做这件事,而且我一直想到训练一些模型来为我决定这个但是从来没有接触到它。
会有一定程度的错误,但不会很大。我建议解析所有动词以决定你想要如何处理时态,因为在句子中: 我很高兴他会见到她。 时态是存在的,但是有一个未来时态条款(他会看到她)所以这进入你的问题的语言学,你没有详细说明,但你明白了。
答案 1 :(得分:6)
POS标记 - 它为您提供标记,让您查看动词的时态 - 已经考虑句子上下文,因此它解决了您的问题。通过背景准确。事实上,POS标签实际上并不适用于单词本身!从Ch. 5 of the NLTK book看这个例子,考虑到句子中的上下文,让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')]
请注意,拒绝和许可都显示为现在时态动词 (VBP)和名词(NN)。例如。 refUSE是一个动词意思是“拒绝”,而 REFuse是一个名词,意思是“垃圾”(即它们不是同音字)。从而, 我们需要知道正在使用哪个单词才能发音 文字正确。 (出于这个原因,通常是文本到语音系统 执行POS标记。)