43

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

例如:

我想写一个函数,它会给我预期形式的动词,如下所示。

v = 'go'
present = present_tense(v)
print present # prints "going"

past = past_tense(v)
print past # prints "went"
4

4 回答 4

28

在 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:它不应该对一个单词的所有变形进行词形还原吗?.

于 2014-11-07T13:21:53.127 回答
22

我认为您正在寻找的是NodeBox::Linguistics库。它正是这样做的:

print en.verb.present("gave")
>>> give
于 2010-09-21T13:58:05.760 回答
18

对于 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

感谢@Aggarara 指出 Pattern 的作者和他们的漂亮作品,去支持他们 ;-)

PS。要在 python 3.7+ 中使用大多数模式的功能,您可能需要使用此处描述的技巧

于 2018-01-17T12:16:11.407 回答
0

JWI(麻省理工学院的 WordNet 库)也有一个词干分析器(WordNetStemmer),它可以将一个词的不同形态形式(如“written”、“writes”、“wrote”)转换为其基本形式。它似乎只适用于名词(如复数)和动词。

使用 WordNet 和 JWNL 在 Java 中进行词干提取还展示了如何使用 JWNL(另一个基于 Java 的 Wordnet 库)进行这种词干提取:

于 2011-06-23T23:12:37.373 回答