2010-09-20 7 views
22

Wie benutze ich NLTK und WordNet, wie konvertiere ich das einfache gespannte Verb in seine Gegenwart, Vergangenheit oder Partizipform?Verwenden von NLTK und WordNet; Wie konvertiere ich ein einfaches, angespanntes Verb in seine Gegenwart, Vergangenheit oder Partizipform?

Zum Beispiel:

Ich mag eine Funktion schreiben, die mir Verb in erwarteter Form geben würde, wie folgt.

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

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

Gibt es niemanden, der diese Frage beantworten kann? –

Antwort

17

Ich denke, was Sie suchen die NodeBox::Linguistics Bibliothek ist. Es tut genau das:

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

Sehr gut, ich denke ich suche nur dieses ... Lass es mich versuchen. –

+0

es scheint, dass es einige Bugs drin hat. zum Beispiel en.is_verb ("download") gibt true zurück, aber en.verb.present ("download") meldet einen Fehler – camino

+1

Diese Bibliothek funktioniert leider nicht für Python3. – sudo

0

JWI (die WordNet Bibliothek von MIT) hat auch eine stemmer (WordNetStemmer), die wie verschiedene morphologische Formen eines Wortes konvertiert („geschrieben“, „schreibt“, „schrieb“) zu ihre Grundform. Es scheint, dass es nur für Substantive (wie Plural) und Verben funktioniert.

Word Stemming in Java with WordNet and JWNL zeigt auch, wie diese Art zu tun, der mit JWNL stammen, eine andere Java-basierte Wordnet Bibliothek:

14

Mit Hilfe NLTK dies auch getan werden kann. Es kann die Grundform des Verbs geben. Aber nicht die genaue Zeit, aber es kann immer noch nützlich sein. Probieren Sie den folgenden Code aus.

from nltk.stem.wordnet import WordNetLemmatizer 
words = ['gave','went','going','dating'] 
for word in words: 
    print word+"-->"+WordNetLemmatizer().lemmatize(word,'v') 

Die Ausgabe lautet:

gave-->give 
went-->go 
going-->go 
dating-->date 

Werfen Sie einen Blick auf Stack-Überlauf Frage NLTK WordNet Lemmatizer: Shouldn't it lemmatize all inflections of a word?.

+0

Sie sollten vorsichtig mit Wörtern sein, deren zweite Form die gleiche wie der Infinitiv des Verbs ist. Mein letztes unglückliches Beispiel ist "gefallen". WordNetLemmatizer konvertiert es nicht in "fallen", weil es tatsächlich ein Verb "zu fallen" gibt. Ein anderes Beispiel ist "Filz". Und es gibt keine Möglichkeit, dem Lemmatizer mitzuteilen, dass das Verb in seiner zweiten Form ist. – Dany

+0

Die Antwort zu meinem vorherigen Kommentar ist die Methode "_morphy". Es gibt die Liste der möglichen Basisformen zurück. Wenn Sie wissen, dass das Wort, das Sie zu lemmatisieren versuchen, nicht in seiner Grundform ist, können Sie es aus der Liste, die Sie von '_morphy' erhalten, ausschließen und einen der anderen auswählen. – Dany

2

Für Python3:

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

dann

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 

ergibt

give ['give', 'gives', 'giving', 'gave', 'given'] gives

thnks zu @Agargara fürzeigenAutoren von Pattern für ihre schöne Arbeit, geh sie unterstützen ;-)