Ad verba per numeros

Miscelánea
Monday, February 26, 2007, 12:32 PM
Parece que la oferta de proyectos que hice el otro día ha causado cierto interés y ya se han presentado varios candidatos. Uno de los proyectos para el que me piden más información es el relativo a la segmentación de un texto en pasajes; así pues ahondaré un poco más en el tema.

Un pasaje es un fragmento de texto que exhibe consistencia interna y puede distinguirse del resto de texto circundante; en consecuencia, puede servir de referencia o puede ser leído o comentado de forma autónoma. Como ejemplo, se muestra a continuación un pasaje del capítulo trigésimo quinto de "Don Quijote"

En esto oyeron un gran ruido en el aposento, y que Don Quijote decía a voces: Tente ladrón malandrín, follón, que aquí te tengo y no te ha de valer tu cimitarra. Y parecía que daba grandes cuchilladas por las paredes, y dijo Sancho: No tienen que pararse a escuchar, sino entren a despedir la pelea o ayudar a mi amo; aunque ya no será menester, porque sin duda alguna el gigante está ya muerto y dando cuenta a Dios de su pasada y mala vida, que yo vi correr la sangre por el suelo, y la cabeza cortada y caída a un lado, que es tamaña como un gran cuero de vino. Que me maten, dijo a esta sazón el ventero, si Don Quijote o don diablo no ha dado alguna cuchillada en alguno de los cueros de vino tinto que a su cabecera estaban llenos, y el vino derramado debe de ser lo que le parece sangre a este buen hombre.

Si dispusiéramos de los pasajes de un texto podríamos, entre otras cosas, dirigir con más acierto a un usuario que plantease una consulta. Cuántas veces no hemos obtenido en Google resultados que aunque contienen todos los términos de nuestra consulta no son lo que buscamos puesto que aparecen en puntos dispares del documento (esto es, pasajes).

Obviamente, lo que nos interesa es obtener tales pasajes de manera automática y existen diversas herramientas para obtenerlos (p.ej. JTextTile). La idea básica común a todas estas técnicas es la siguiente:

  1. Se dispone del texto separado en sentencias.
  2. Es posible comparar las sentencias entre sí y determinar el grado de similitud entre las mismas.
  3. Sentencias similares y, además, próximas pueden agruparse.
  4. Los grupos de sentencias similares y próximas que, además, son diferentes del resto de los grupos constituyen los pasajes del texto.

Esto que aquí he descrito es un problema clásico de clustering o agrupamiento. El objeto de cualquier técnica de agrupamiento es identificar, dentro de un conjunto de elementos, grupos que exhiben características. Para lograr esto se puede dividir de manera iterativa el conjunto
original en subconjuntos o comenzar por los elementos aislados e ir agrupando los más parecidos.

Así mismo, existe la posibilidad de operar sobre todo el conjunto simultaneamente o de manera paulativa. El agrupamiento incremental trabaja sobre elementos aislados y parte del supuesto de que es posible considerarlos de uno en uno asignándolos a algún grupo ya disponible; razón por la que está especialmente indicado para conjuntos muy grandes.

Sustitúyase en la descripción anterior "conjunto" por documento y "elemento" por sentencia y se tiene el núcleo del proyecto ofertado: implementar en Java un algoritmo de clustering que permita encontrar pasajes en un texto. Esto que a priori puede parecer difícil no lo es tanto puesto que: (1) el tutor proporcionará a los alumnos documentación muy clara sobre los algoritmos a emplear y (2) en caso necesario podría recurrirse a código fuente de PFCs anteriores.

Espero que esta entrada haya ayudado a aclarar las cosas pero, puesto que esto es un blog :), animo a todos los que estéis interesados en el proyecto aprovechéis los comentarios para plantear cualquier duda que os pueda surgir.



Back Next