Использование NLTK и WordNet; как преобразовать простой напряженный глагол в его нынешнюю, прошлую или прошлую форму причастия?

Используя NLTK и WordNet, как мне преобразовать простой напряженный глагол в его нынешнюю, прошлую или прошлую форму причастия?

Например:

Я хочу написать функцию, которая даст мне глагол в ожидаемой форме следующим образом.

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

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

Ответ 1

Я думаю, что вы ищете библиотеку NodeBox:: Linguistics. Он делает именно это:

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

Ответ 2

С помощью 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

Посмотрите на вопрос о переполнении стека NLTK WordNet Lemmatizer: не следует ли леммитировать все перегибы слова?.

Ответ 3

JWI (библиотека WordNet от MIT) также имеет стебельщика (WordNetStemmer), который преобразует различные морфологические формы слова типа ( "написано", "пишет", "написал" ) в их базовую форму. Кажется, что это работает только для существительных (например, множественных чисел) и глаголов.

Word Stemming в Java с WordNet и JWNL также показывает, как это сделать, используя JWNL, другую Java-библиотеку Wordnet:

Ответ 4

Для 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

thnks @Agargara для указания и авторов шаблона для их прекрасной работы, обратитесь за ними; -)