如何使用NLTK和WordNet将简单时态动词转换为现在时、过去时或过去分词形式?

49 投票
4 回答
38601 浏览
提问于 2025-04-16 04:22

使用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

撰写回答