Datanalytics

Archivo

Entradas Etiquetadas ‘minería de textos’

Un lematizador para el español con R… ¿cutre? ¿mejorable?

Martes, 13 de diciembre de 2011 7 comentarios

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( "&nbsp;", " ", 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?

Predicciones a toro pasado y el perro que no ladró

Jueves, 29 de septiembre de 2011 Sin comentarios

Es fácil predecir a toro pasado. Casi tan fácil que asestarle una gran lanzada al moro muerto (el refranero es así de incorrecto políticamente, lo siento).

Esas son las ideas que me sugirieron fundamentalmente la lectura del un tanto hagiográfico Superordenadores para ‘predecir’ revoluciones y del artículo al que se refería, Culturomics 2.0: Forecasting large-scale human behavior using news media tone in time and space.

El artículo nos explica cómo utilizando resúmenes de noticias de diversas fuentes era posible haber predicho las revoluciones de Egipto, Túnez y Libia. Y, casi, casi, cómo haber encontrado a Bin Laden.

Pero como en aquel episodio de Sherlock Holmes en el que el perro no ladró, la pieza fundamental no es lo que se cuenta sino lo que se calla: ¿qué otras revoluciones se predijeron erróneamente? ¿Qué de los falsos positivos? ¿No habremos redescubierto una suerte de Nostradamus de silicio?

Merece también la pena echar un vistazo al mapa de civilizaciones que revela el dispositivo:

¿Son Francia y Suráfrica parte de la misma civilización? ¿Y Suiza y Afganistán? ¿Y Canadá está más próximo a Marruecos o Irán que a EE.UU.? ¿Y qué tendrán que ver Noruega y Marruecos?

En fin, que la cosa está aún verde, verde, verde y que, en tanto,… cantos de sirena.

Sobre la economía del lenguaje

Martes, 27 de septiembre de 2011 Sin comentarios

De acuerdo con una observación de Zipf (y supongo que de muchos otros y que no hay que confundir con su ley), la longitud de las palabras más corrientes es menor que las que se usan menos frecuentemente.

Un estudio reciente, Word lengths are optimized for efficient communication, matiza esa observación: la cantidad de información contenida en una palabra predice mejor la longitud de las palabras que la frecuencia de aparición pura. En una comparación entre diversos idiomas europeos, parece manifestarse que palabras que aportan poca información son breves; las que aportan mucha, más largas.

La cantidad de información que transmite una palabra depende del contexto. En un contexto c, la cantidad de información que contiene una palabra w es -log P( w | c), el logaritmo de la probabilidad de que w ocurra en dicho contexto. La cantidad global de información que transmite una palabra es la media de dicha cantidad a través de los contextos en que aparece w, es decir

-\sum_c P( c | w ) \log P( w | c ),

cantidad que puede aproximarse por

-1/N \sum_{i = 1}^N \log P( w | c_i ).

Para calcular P( w | c_i ) pueden utilizarse varias técnicas. Por ejemplo, secuencias de palabras (o contextos) tales como “quiero beber…” condicionan la probabilidad del término subsiguiente. Y “cerveza”, “leche” o “agua” será menos informativo (es decir, más probable) que “hidromiel” o “electrones”.

De alguna manera, los hablantes tienden a mantener constante la tasa de transmisión de información acortando lo predecible y haciendo hincapié (y gastando tiempo y sílabas) en los puntos más informativos del discurso.

Y ahora entro en terreno que me es menos propio: la fijación de la sintaxis desde la creación de las primeras gramáticas, la difusión de los libros, la educación, etc. han mantenido el lenguaje relativamente invariable a través de los últimos siglos: los mayores impedimentos para entender textos de hace 400 años son puramente léxicos. Pero eso no ha impedido que hayan evolucionado los contextos y, por lo tanto, la regla que asocia cantidad de información y longitud de palabras.

¿Será el lenguaje que se utiliza en las redes sociales heraldo de movimientos de reajuste tectónico en el lenguaje que lo alinee con el nuevo equilibrio entre las palabras de antaño y los cambios de cantidad de información que han traído los nuevos tiempos?

Hitler era comunista y judío

Lunes, 9 de mayo de 2011 Sin comentarios

O así nos cuenta Google. Y me explico rápidamente para que no me demande nadie.

Uno de los servicios de Google con los que he topado recientemente es Google Squared, un buscador muy particular —y que parece funcionar sólo en inglés— que devuelve tablas: uno puede buscar nikon lenses, o statistical software y obtendrá lo que verá al pinchar en los correspondientes enlaces: tablas en las que las filas corresponden a lentes de Nikon o paquetes estadísticos y las columnas a atributos. Es increíble que Google adivine que los relevantes para las lentes son, entre otros, la distancia focal o la apertura mientras que para el software estadístico lo son la licencia o el desarrollador.

Pero, ¿qué pasa si uno quiere la lista de los comunistas más prominentes? En la fecha de la publicación de esta entrada, junto a Lenin, Marx, Stalin y Trotsky, aparecen Ronald Reagan y Hitler. Y de éste último se dice que es judío (y es digno de mención, además, que en lugar de su foto aparece la del Che).

El motivo de este problema reside en la naturaleza de los algoritmos típicamente usados en minería de textos. Mi primer contacto con la disciplina ocurrió en 2004, cuando era empleado de SAS. Un potencial cliente quería un sistema automático de clasificación de sentencias judiciales y SAS había adquirido recientemente una empresa que desarrollaba algoritmos de minería de textos. Como se trataba de un proyecto raro dentro de los muy de andar por casa de la empresa, acabaron asignándomelo.

Y mi primera reacción al estudiar la naturaleza de los algoritmos que se empleaban fue de infinito asombro. Omitiendo los detalles, los análisis partían del estudio de las frecuencias de las distintas palabras en el texto: cada sentencia acababa transformada en un vector de recuentos. Suficiente, entiendo, para distinguir homicidios de cohechos, pero no tanto para reconstruir, aunque fuese esquemáticamente, qué ocurrió.

De las 30.000 palabras de las que consta la entrada sobre Hitler en la Wikipedia (en inglés), alrededor de 60 tienen que ver con el judaísmo y alrededor de 30 con el comunismo. Intuyo que estas yuxtaposiciones ocurren en muchos otros textos sobre dicho señor. E intuyo también que muchos métodos de predicción siguen basándose en los mismos métodos de preproceso para matematizar o vectorizar los textos, aplanando así la riqueza y sutileza del lenguaje.

No deja de sorprenderme lo que es posible lograr incluso de esta manera: incluso en este ejemplo que cito, es admirable que una máquina tonta, que no sabe (en nuestro sentido de saber) qué puede ser eso del comunismo, asocie esa cadena de caracteres a otras que identifican a un individuo que todos sabemos que algo tuvo que ver con eso.

También es cierto que experiencias como las de Watson, el ordenador de IBM que venció a los campeonísimos de Jeopardy!, un popular juego de preguntas y respuestas de la TV estadounidense; los traductores automáticos de textos como el de Google (que admiro tremendamente) y el mismo Google Squared parecen indicar que habrá progresos.

Pero en tanto llega el futuro, se me ocurren, entre los muchísimos que pudieran hacerse, dos comentarios. El primero: ¿estaremos delegando demasiadas decisiones en máquinas? A la vista de los errores que pueden llegar a cometer, ¿podemos fiarnos demasiado de que puedan gestionar, como apunta el anterior enlace, actividades tan importantes como nuestros ahorros e inversiones?

Y el segundo, tal vez relacionado con el anterior, ¿nos vamos a ver obligados a escribir para las máquinas? El hecho de que algunos de los lectores más importantes de cuanto escribimos sean ordenadores, ¿acabará haciéndonos adecuar nuestro lenguaje a su capacidad y limitaciones de comprensión? En particular, ¿debería yo en esta bitácora escribir como me diera la gana? ¿O me convendría más usar un lenguaje más romo para que Google entendiese mejor qué cuento para que me generase más visitas y fuese capaz de mostrar publicidad contextual más relevante?

¿Dictarán las limitaciones de los ordenadores el criterio para escribir correctamente en el futuro?

¿Dónde están las antípodas de Montevideo?

Sábado, 12 de febrero de 2011 1 comentario

No sé si te lo habrás preguntado alguna vez. Ni siquiera lo sabe Google.

Sin embargo, me admira esto.


¿Usáis Wolfram Alpha? ¿Qué os parece?

Nuevo paquete para procesar texto en R: stringr

Jueves, 20 de enero de 2011 2 comentarios

Hadley Wickman, el autor de plyr, reshape y ggplot2, ha vuelto a la carga en su exitoso empeño por hacernos cambiar de forma de programar en R.

Con su nuevo paquete, stringr, aspira a facilitarnos aún más la vida. En un reciente artículo, enumera sus ventajas:

  • Procesa factores y caracteres de la misma manera (de verdad, muy práctico)
  • Da a las funciones nombres y argumentos consistentes
  • Simplifica las operaciones de procesamiento de cadenas eliminando opciones que apenas se usan
  • Produce salidas que pueden ser utilizadas fácilmente como entradas a otras funciones
  • Incorpora funciones para procesar texto presentes en otros lenguajes pero no en R
Categories: minería de texto, r Tags: ,

Todo está en los libros (en español)

Viernes, 24 de diciembre de 2010 2 comentarios

Hace unos días publicábamos en este blog una entrada en la que dábamos cuenta de la aplicación de la estadística, y de forma más general el uso de diferentes tecnologías, en el análisis de la evolución de diferentes palabras. En ese estudio, centrado en palabras en inglés, se utilizaba una de las colecciones masivas de datos que ha puesto disponible Google para la comunidad.

Estos datos están agrupados de una forma muy interesante de tal forma que un estudio posterior sobre la evolución de la aparición de diferentes palabras en todos los textos escaneados se simplifica de manera notable.

Aunque está siendo fuente de cierta polémica, lo novedad que supone este tipo de estudios estriba en la gran mezcla de disciplinas y conocimientos pueden utilizarse en su análisis. Por un lado el estricto análisis estadístico de una serie temporal, por otro la mezcla entre la explicación histórica y sociológica que se puede asociar a la mayor o menor aparición de un término en la historia de la literatura.

Lo positivo, como otros han reflejado es que se pone sobre la mesa un enfoque adicional a la tradicional explicación e investigación histórica-sociológica del que todas las disciplinas salen enriquecidas.

Centrándonos en la novedad que puede aportar esta entrada, decir que he analizado de forma equivalente aquel estudio inglés, la evolución de ciertas palabras en español.  Los resultados arrojan ciertas sorpresas, y abren muchas incógnitas, algunas pueden explicarse de una forma inmediata, otras en cambio necesitarán de un mayor estudio.

Sin más dilación, estas son algunas de las perlas….

Evolución del término ciencia

Evolución del término "ciencia"

Evolución del término "civil"

Evolución del término "sexo"

Evolución del término "guerra"

Evolución del término "dios"

Evolución del término "igualdad"

Evolución del término "dinero"

Nota: Google-Labs también ha puesto disponible un visualizador en tiempo-real con el mismo fin. A mi me gustó hacerlo por mi mismo.

Cambios cosméticos en el blog

Domingo, 3 de octubre de 2010 5 comentarios

Acabo de realizar unos cuantos cambios, mayormente cosméticos, en mi blog. He añadido una lista de artículos recomendados al final de cada entrada, he eliminado el enlace a la entrada aleatoria, he incluido una lista de los últimos comentarios y, finalmente, he incluido propaganda contextual de Google.

Lo he hecho por dos motivos. El primero es pecuniario, obviamente. No espero que me retire ni que me permita dejar de tener que madrugar. Nada de eso. Pero tal vez sí que me cubra un porcentajillo de los vicios.

El segundo motivo es la curiosidad que me produce ver los algoritmos de Google en acción. De momento, no estoy particularmente satisfecho de la habilidad que tiene la empresa para mostrar propaganda relacionada con el contenido del artículo. Véase si no este ejemplo de apenas hace unos minutos:

Leyendo en diagonal (pero con cuidado)

Lunes, 16 de agosto de 2010 1 comentario

Un profesor mío de historia en primero de BUP nos confesó un día que para corregir exámenes leía en diagonal: pasaba la vista de la esquina superior izquierda de la hoja a la inferior derecha y según las palabras que entendía por el camino ponía una nota u otra.

Justo o no el procedimiento, es cierto que de un mero golpe de vista sobre un texto se pueden adivinar muchas cosas sobre su contenido. Andando los años, además, los ordenadores nos están comenzando a ayudar a realizar este tipo de lecturas superficiales. Si no, véase este gráfico publicado en El País que resume el discurso de Zapatero en el Debate del Estado de la Nación (del 2010):

Se supone que uno debiera hacerse idea de lo que trataba el discurso sin más que pasar la vista por la nube de palabras. Sin embargo, independientemente de nuestra opinión acerca de estos recursos de nuestra pereza para mantenernos en la superficie de las cosas, desde esta bitácora queremos realizar una lectura crítica de la técnica usada en este caso concreto (no del contenido, guárdenos Dios).

Crítica que resultará muy útil, espero, a los lectores que más tarde quieran incursionar en el nada trivial campo de la minería de texto. Porque ha de tenerse en cuenta que el punto de inicio de tal tipo de estudios es un correcto procesamiento del lenguaje. El que el español (en nuestro caso) sea un idioma tan flexible gramaticalmente no hace sino subrayar esta necesidad.

Es denunciable pues que en la nube aparezcan:

  • “economía” y “Economía”, cuando es elemental que antes de agregar frecuencias hay que ignorar las mayúsculas.
  • stop words genéricas como “ello”, “respecto”, “gran”, “cuatro”, “dos”, “sino”, “ahora”, etc. que deberían haber sido filtradas previamente.
  • stop words específicas, tales como “Señorías”. Palabras de este tipo pueden resultar útiles para distinguir un tipo de discurso de otro, pero dentro del contexto de una intervención parlamentaria, “Señorías” se convierte en una redundancia, una palabra que descartar.
  • “hecho”, “hace” y “hacer”; independientemente de que el verbo hacer pueda ser o no considerado un stop word, hay que agregar las raíces (o infinitivos) de los verbos y no sus formas conjugadas.
  • “mercados” y “mercado”, que es una versión de lo anterior para el caso de los sustantivos.
  • “Comunidades” y “Autónomas” por separado, cuando es más que probable que siempre apareciesen juntas y, de alguna manera, inseparables, en el discurso.

Éstos son, por supuesto, problemas extra-estadísticos: pertenecen al ámbito del procesamiento automático del lenguaje y resultan, reitero, especialmente complejos en un idioma tan flexible como el español.