2010-09-20 17 views
22

Usando NLTK y WordNet, ¿cómo convierto el verbo de tiempo simple a su forma de participio presente, pasado o pasado?Usando NLTK y WordNet; ¿Cómo convierto el verbo de tiempo simple a su forma participio presente, pasado o pasado?

Por ejemplo:

Quiero escribir una función que me daría verbo en forma esperada de la siguiente manera.

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

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

¿No hay nadie que pueda responder a esta pregunta? –

Respuesta

17

Creo que lo que estás buscando es la biblioteca NodeBox::Linguistics. Se hace exactamente eso:

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

Muy bien, creo que estoy buscando este solo ... Déjame intentarlo. –

+0

parece que tiene algunos errores. por ejemplo en.is_verb ("download") devuelve true, pero en.verb.present ("download") informará algún error – camino

+1

Esa biblioteca no funciona para Python3, por desgracia. – sudo

0

JWI (la biblioteca WordNet por el MIT) también tiene una despalilladora (WordNetStemmer) que convierte diferentes formas morfológicas de una palabra como ("escrito", "escribe", "escribió") a su forma base Parece que solo funciona para sustantivos (como plurales) y verbos.

Word Stemming in Java with WordNet and JWNL también muestra cómo hacer este tipo de derivados usando JWNL, otra biblioteca Wordnet basado en Java:

14

Con la ayuda de NLTK esto también se puede hacer. Puede dar la forma base del verbo. Pero no el tiempo exacto, pero aún puede ser útil. Pruebe el siguiente código.

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

La salida es:

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

Tenga una mirada en desbordamiento de pila pregunta NLTK WordNet Lemmatizer: Shouldn't it lemmatize all inflections of a word?.

+0

Debe tener cuidado con las palabras cuya segunda forma es igual al infinitivo de otro verbo. Mi último desafortunado ejemplo es "cayó". WordNetLemmatizer no lo convierte en 'caída' porque en realidad hay un verbo 'caer'. Otro ejemplo es 'sentido'. Y no hay forma de decirle al lematizador que el verbo está en su segunda forma. – Dany

+0

La respuesta a mi comentario anterior es usar el método "_morphy". Devuelve la lista de posibles formas base. Si sabes que la palabra que estás tratando de identificar no está en su forma base, puedes excluirla de la lista que obtienes de '_morphy' y elegir una de las demás. – Dany

2

Para python3:

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

entonces

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 

produce

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

thnks a @Agargara para señalar & autores de Pattern por su hermoso trabajo, ve a apoyarlos ;-)

Cuestiones relacionadas