如何使用NLTK和WordNet将简单时态动词转换为现在时、过去时或过去分词形式?
使用NLTK和WordNet,我该如何把简单时态的动词转换成现在时、过去时或过去分词的形式呢?
例如:
我想写一个函数,可以让我得到动词的期望形式,如下所示。
v = 'go'
present = present_tense(v)
print present # prints "going"
past = past_tense(v)
print past # prints "went"
4 个回答
22
对于Python3:
pip install pattern
然后
from pattern.en import conjugate, lemma, lexeme, PRESENT, SG
print (lemma('gave'))
print (lexeme('gave'))
print (conjugate(verb='give',tense=PRESENT,number=SG)) # he / she / it
结果是
give
['give', 'gives', 'giving', 'gave', 'given']
gives
感谢@Agargara的指点,以及Pattern的作者们为他们的精彩作品,去支持他们吧;-)
附言:如果你想在Python 3.7及以上版本中使用Pattern的大部分功能,可能需要使用这里描述的技巧。
27
借助NLTK这个工具,我们也可以做到这一点。它可以给出动词的基本形式。不过,它不能提供确切的时态,但仍然很有用。试试下面的代码。
from nltk.stem.wordnet import WordNetLemmatizer
words = ['gave','went','going','dating']
for word in words:
print word+"-->"+WordNetLemmatizer().lemmatize(word,'v')
运行后会得到这样的结果:
gave-->give
went-->go
going-->go
dating-->date
可以看看Stack Overflow上的一个问题 NLTK WordNet Lemmatizer: 不是应该对一个词的所有变形进行词形还原吗?。
23
我觉得你想要的东西是 NodeBox::Linguistics 这个库。它正好可以做到你想要的事情:
print en.verb.present("gave")
>>> give