使用 NLTK 和WordNet,我如何将简单时态动词转换为其现在、过去或过去分词形式?
例如:
我想写一个函数,它会给我预期形式的动词,如下所示。
v = 'go'
present = present_tense(v)
print present # prints "going"
past = past_tense(v)
print past # prints "went"
在 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:它不应该对一个单词的所有变形进行词形还原吗?.
我认为您正在寻找的是NodeBox::Linguistics库。它正是这样做的:
print en.verb.present("gave")
>>> give
对于 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+ 中使用大多数模式的功能,您可能需要使用此处描述的技巧
JWI(麻省理工学院的 WordNet 库)也有一个词干分析器(WordNetStemmer),它可以将一个词的不同形态形式(如“written”、“writes”、“wrote”)转换为其基本形式。它似乎只适用于名词(如复数)和动词。
使用 WordNet 和 JWNL 在 Java 中进行词干提取还展示了如何使用 JWNL(另一个基于 Java 的 Wordnet 库)进行这种词干提取: