2010-09-20 15 views
22

NLTK ve WordNet'u kullanarak, basit zaman fiilini geçmiş, geçmiş veya geçmiş katılım formuna nasıl dönüştürebilirim? ÖrneğinNLTK ve WordNet Kullanımı; Basit zaman fiilini şimdiki, geçmiş veya geçmiş katılımcı formuna nasıl dönüştürebilirim?

:

ben şöyle beklenen formda bana fiilini verecek bir işlev yazmak istiyorum.

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

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

Bu soruya cevap verecek kimse yok mu? –

cevap

17

ne aradığınız NodeBox::Linguistics kütüphane olduğunu düşünüyorum. Bu tam da bunu yapar:

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

Çok iyi, sanırım bunu sadece arıyorum ... Denememe izin ver. –

+0

içinde bazı hatalar var gibi görünüyor. örneğin en.is_verb ("indir") doğru döndürür, ancak en.verb.present ("indirme") bazı hata bildirir – camino

+1

Bu kitaplık Python3 için çalışmıyor, ne yazık ki. – sudo

0

JWI (MIT tarafından WordNet kütüphanesi) aynı zamanda bir sözcük kökü ayırıcı gibi bir kelimenin farklı morfolojik formları dönüştürür (WordNetStemmer) sahiptir ("yazılı", "yazdı" "yazıyor") için taban formu. Sadece isimler (çoğullar gibi) ve fiiller için çalışıyor gibi görünüyor.

14

bu da yapılabilir NLTK yardımıyla:

Word Stemming in Java with WordNet and JWNL da JWNL, başka Java tabanlı WordNet kitaplığı kullanarak kaynaklanan bu tür nasıl yapılacağı gösterilmiştir. Fiil formunu verebilir. Ama tam olarak değil, ama yine de yararlı olabilir. Aşağıdaki kodu deneyin.

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

çıktısı:

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

yığın taşması soruya NLTK WordNet Lemmatizer: Shouldn't it lemmatize all inflections of a word? göz at. Python3 için

+0

İkinci formun, diğer fiilin mastarla aynı olduğu sözcüklerle dikkatli olmalısınız. Son şanssız örneğim "düştü". WordNetLemmatizer onu 'düşme' haline getirmez, çünkü fiilen 'filan' fiili vardır. Başka bir örnek ise 'keçe'. Ve lemmatizer'a fiilin ikinci formda olduğunu söylemenin bir yolu yok. – Dany

+0

Önceki yorumumun cevabı "_morphy" yöntemini kullanmaktır. Olası temel formların listesini döndürür. Eğer lemmatize etmeye çalıştığınız kelimenin temel formda olmadığını biliyorsanız, '_morphy'den aldığınız listeden çıkartabilirsiniz ve geri kalanlardan birini seçebilirsiniz. – Dany

2

:

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

sonra

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 

işaret için @Agargara için

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

thnks verir Güzel çalışmaları içindesen yazarları, onları destekleyin ;-)