关注其他几个帖子,[例如Detect English verb tenses using NLTK,Identifying verb tenses in python,Python NLTK figure out tense]我编写了以下代码,以使用POS标记确定Python中句子的时态:
from nltk import word_tokenize, pos_tag
def determine_tense_input(sentence):
text = word_tokenize(sentence)
tagged = pos_tag(text)
tense = {}
tense["future"] = len([word for word in tagged if word[1] == "MD"])
tense["present"] = len([word for word in tagged if word[1] in ["VBP", "VBZ","VBG"]])
tense["past"] = len([word for word in tagged if word[1] in ["VBD", "VBN"]])
return(tense)
这将返回过去/现在/未来动词的使用值,我通常将最大值作为句子的时态。准确性适度,但我想知道是否有更好的方法。
例如,现在有没有写出一个更专注于提取句子时态的包? [注意 - 3个堆叠溢出的帖子中有2个是4年,所以现在可能已经改变了]。或者,我应该在nltk中使用不同的解析器来提高准确性吗?如果没有,希望上面的代码可以帮助别人!
答案 0 :(得分:2)
您可以使用Stanford Parser来获取句子的依赖关系解析。依赖关系解析的根将是定义句子的“主要”动词(我不太确定具体的语言术语是什么)。然后,您可以使用此动词上的POS标签来查找其时态,并使用它。
答案 1 :(得分:1)
您可以通过各种方式加强您的方法。您可以更多地考虑英语语法,并根据您观察到的内容添加更多规则;或者你可以推动统计方法,提取一些更多(相关)特征并将整个批次扔到分类器上。 NLTK为您提供了大量的分类器,并且在NLTK书中有很好的记录。
您可以充分利用这两个方面:手写规则可以采用提供给分类器的功能形式,这将决定何时可以依赖它们。
答案 2 :(得分:1)
从http://dev.lexalytics.com/wiki/pmwiki.php?n=Main.POSTags开始,标记的意思是
MD Modal verb (can, could, may, must)
VB Base verb (take)
VBC Future tense, conditional
VBD Past tense (took)
VBF Future tense
VBG Gerund, present participle (taking)
VBN Past participle (taken)
VBP Present tense (take)
VBZ Present 3rd person singular (takes)
这样您的代码就可以了
tense["future"] = len([word for word in tagged if word[1] in ["VBC", "VBF"])