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

时间:2010-09-20 15:36:31

标签: python nlp nltk wordnet

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

例如:

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

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

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

4 个答案:

答案 0 :(得分:19)

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

print en.verb.present("gave")
>>> give

答案 1 :(得分:18)

在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: Shouldn't it lemmatize all inflections of a word?

答案 2 :(得分:7)

对于Python3:

git clone https://github.com/clips/pattern
cd pattern
git fetch
git checkout development
pip install mysqlclient
python setup.py install

然后

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的作者为他们的美好工作,支持他们; - )

答案 3 :(得分:0)

JWI(麻省理工学院的WordNet库)也有一个词干分析器(WordNetStemmer),可以转换单词的不同形态形式,如("写","写","写了")到他们的基本形式。它似乎只适用于名词(如复数)和动词。

Word Stemming in Java with WordNet and JWNL 还展示了如何使用另一个基于Java的Wordnet库JWNL进行这种干扰: