El jueves 16 de mayo hablaré en el Grupo de Interés Local de Madrid de R sobre lematizadores probabilísticos.
Hablaré sobre el proceso de lematizacion y trataré de mostrar su importancia dentro del mundo del llamado procesamiento del lenguaje natural (NLP). La lematización es un proceso humilde dentro del NLP del que apenas nadie habla: su ejercicio solo ha hecho famoso a Martin Porter. Lo eclipsan otras aplicaciones más vistosas, como el siempre sobrevalorado análisis del sentimiento. Sin embargo, es una pieza fundamental que subyace (o debería subyacer) en cualquier aplicación seria que analice textos.
En la charla repasaré las tres grandes familias de soluciones para el problema de la lematización:
- las basadas en reglas duras,
- las basadas en diccionarios y, finalmente,
- las más interesantes, las probabilísticas.
Y, en particular, describiré con cierto detalle —aunque tratando de obviar los aspectos técnicos más áridos— un algoritmo que combina oportunísticamente diccionarios y modelos ocultos de Markov y que debería ver la luz en producción dentro del conjunto de APIs lingüísticas de Molino de Ideas.
El otro día publiqué mi pequeño lematizador para el español con R. Era el subproducto de un antiguo proyecto mío de cuyos resultados daré noticia en los próximos días.
Pero veo con infinita satisfacción que Emilio Torres, viejo conocido de quienes, por ejemplo, hayáis asistido a las II o III Jornadas de Usuarios de R, ha estado abundando en el asunto y, ciertamente mejorándolo (cosa que, todo hay que decir, tiene escaso mérito): basta mirar los sus comentarios a la entrada original.
Esta entrada es una invitación para que Emilio lidere un grupo de entusiastas de R y del procesamiento del lenguaje natural para que desarrollen un paquete con un lematizador decente del español y cuantas herramientas concomitantes sean necesarias. Y si puede ser —algún día tengo que comenzar a ejercer de presi para otra cosa que no sean papeleos de ministerio en ministerio— en el seno de la Asociación de Usuarios de R.
Porque, coincido con Emilio, la situación de la NLP en español es lastimosa y diríase que la disciplina no existe en este país (y, de paso, en aquel subcontinente).
Uno de los pasos previos para realizar lo que se viene llamando minería de texto es lematizar el texto. Desafortunadamente, no existen buenos lematizadores en español. Al menos, buenos lematizadores libres.
Existen el llamado algoritmo de porter y snowball pero, o son demasiado crudos o están más pensados para un lenguaje con muchas menos variantes morfológicas que el español.
Sinceramente, no sé a qué se dedican —me consta que los hay— los lingüistas computacionales de la hispanidad entera: ¿no son capaces de liberar una herramienta de lematización medianamente decente que podamos usar los demás? Lo más parecido a esa herramienta aparentemente inexistente que conozco es Grampal, que funciona a través de una interfaz web.
Y me ha servido para construir un lematizador rudimentario y francamente perfectible:
require( XML )
lematiza <- function( frase ){
palabra <- gsub( " ", "+", frase )
base.url <- paste(
"http://cartago.lllf.uam.es/grampal/grampal.cgi?m=etiqueta&e=",
palabra, sep = "" )
tmp <- readLines( base.url, encoding = 'utf8' )
tmp <- iconv( tmp, "utf-8" )
tmp <- gsub( " ", " ", tmp )
tmp <- readHTMLTable( tmp )
tmp <- as.character( tmp[[1]]$V3 )
tmp <- do.call( rbind, strsplit( tmp, " " ) )[,4]
tmp
}
Con él, desde R,
> lematiza( "des" )
[1] "DAR"
> lematiza( "anduve" )
[1] "ANDAR"
> lematiza( "casitas" )
[1] "CASITA"
> lematiza( "comimos" )
[1] "COMER"
> lematiza( "queremos comer patatas" )
[1] "QUERER" "COMER" "PATATA"
No es rapidísimo, debería mejorar el tratamiento de la codificación y muchas cosas más.
¿Se anima a mejorarlo alguno de mis lectores?