使用NLTK和WordNet,如何将简单时态动词转换为现在的,过去的或过去的分词形式?
例如:
我想写一个函数,它会给我预期形式的动词,如下所示。
v = 'go'
present = present_tense(v)
print present # prints "going"
past = past_tense(v)
print past # prints "went"
答案 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)
Word Stemming in Java with WordNet and JWNL 还展示了如何使用另一个基于Java的Wordnet库JWNL进行这种干扰: