2012-03-01 8 views
8

¿Cuál es la forma más eficiente de obtener el verbo en tiempo pasado, preferiblemente sin utilizar marcos pesados ​​NLP de memoria?¿Cómo se obtiene el tiempo pasado de un verbo?

p. Ej.

  • directo a: vivían
  • tratan de: trataron
  • grifo para: aprovechado
  • ebullición para: hervido
  • venta a: vendido

escribí algo rápido a mí mismo (el desbordamiento de pila no me deja responder por mí mismo) que parece funcionar para los verbos regulares (por ejemplo, los primeros 4 de esa lista), pero no para los verbos irregulares: http://pastebin.com/Txh76Dnb

editar: Gracias por todas las respuestas, parece que no se puede hacer correctamente sin un diccionario debido a verbos irregulares.

+5

* ".. sin necesidad de utilizar los marcos de memoria pesada PNL?" * Utilizar la API de vudú? Muy ligero en la memoria, aunque puede costar algunas gallinas y otros animales pequeños. –

+1

Necesitarás un diccionario. –

+0

@OliCharlesworth, ¿conoce alguna palabra que no sea analizada correctamente por este algoritmo: http://web2.uvcs.uvic.ca/elc/studyzone/330/grammar/pasted.htm que requeriría un diccionario? –

Respuesta

10

Si bien quería hacer esto algorítmicamente sin usar diccionarios, tuve que recurrir al uso de uno.

Encontré que la biblioteca más eficiente era SimpleNLG.

Desde sus documentos no están sincronizados con la API actual, aquí es cómo lograr esto:

XMLLexicon lexicon = new XMLLexicon("path\\to\\default-lexicon.xml"); 
WordElement word = lexicon.getWord("live", LexicalCategory.VERB); 
InflectedWordElement infl = new InflectedWordElement(word); 
infl.setFeature(Feature.TENSE, Tense.PAST); 
Realiser realiser = new Realiser(lexicon); 
String past = realiser.realise(infl).getRealisation(); 
System.out.println(past); 
+0

¿cómo puedo hacer esto al revés? es decir, me gustaría encontrar "jugar" desde la palabra clave "jugada". – talha06

+0

Ya no tengo la biblioteca SimpleNLG en esta PC, así que no la he probado, pero creo que debería ser tan simple como cambiar la 4ª línea para que Tense.PAST sea Tense.FUTURE y cambiar la 2ª línea para ese "vivir" es "jugado". –

+0

no, no es ... Intenté lo que dijiste; pero no funcionó. da salida de "jugado" para la entrada "jugada". – talha06

1

Utilice un servicio web de diccionario.

DictService es bastante popular.

Obtiene resultados de http://www.dict.org. que proporciona varias bases de datos. Hay uno que encontré útil "The Collaborative International Dictionary of English v.0.48" que devuelve definiciones de palabras y también sus tiempos.

Deberás analizar el resultado de alguna manera para encontrar el tiempo pasado.

+0

Gracias por el enlace, pero preferiría una solución fuera de línea para la portabilidad y el rendimiento. –

3

Una forma de hacerlo podría ser crear un diccionario de verbos irregulares (aquellos que no siguen el patrón habitual) y luego buscar la palabra primero en eso. Si la palabra no aparece, usa tu algoritmo. ¿Alguien sabe el número relativo de verbos regulares vs. irregulares en inglés?

+2

http: //en.wikipedia.org/wiki/List_of_English_irregular_verbs No parece mucho, hasta que te das cuenta de que, como muestra la tabla, muchos verbos se pueden combinar y la variedad de verbos que puedes crear de esta manera es prácticamente ilimitada. Mención especial es "colgar" y "mentir", que pueden tener tiempos pasados ​​regulares e irregulares, dependiendo de su semántica. – biziclop

Cuestiones relacionadas