2. Algoritmo utilizado:
El criterio seguido par el agrupamiento de noticias una vez leídas las
indicaciones que nos proponen es la siguiente:
Antes de aplicar nuestro algoritmo filtramos el título y primer párrafo con el
fichero de palabras vacías, es decir, quitándolas estas del enunciado.
Nos hemos dado cuenta que en las noticias al procesar la etiqueta
MW/LEX/LEM viene una codificación de caracteres que marca el atributo PAR
empezando cuando es un signo de puntuación con F, usamos esta atributo para no
tener en cuenta los signos en el texto del título y el primer párrafo para nuestro
algoritmo, tampoco usamos la fecha de la noticia por no ser un dato característico del
contenido de esta.
Una vez hechas estas operaciones pasamos a aplicar nuestro algoritmo:
Empezamos por hacer un filtrado con SAX de todas las noticias quedándonos con
el título y el primer párrafo de todas las noticias, que a su vez las introducimos en un
array creado a propósito para el procesamiento de estas.
La primera posición de dicho array, es decir, la primera noticia la consideramos
independientemente de cuál sea, la primera del primer grupo de noticias y la damos
por válida porque esta es la que trataremos como base para la comparación con el
resto de noticias.
El método de comparación es el siguiente cogemos primero el título y luego el
primer párrafo y se compara con la segunda noticia si las palabras que coinciden
superan el 70% de estas o la similitud de estas esta entorno a este porcentaje la
agrupamos en el grupo de la primera, si no creamos otro grupo, una vez terminado el
proceso de la segunda noticia hacemos lo mismo con la tercera esta vez si se han
creado dos grupos se compara con la primera, si cumple los requisitos se agrupa en el
grupo 1, si no la comparamos con la segunda, si esta vez cumple los requisitos la
agrupamos con la segunda, si no coincide con ningunas de las dos creamos otro
grupo.
El resultado de procesar todas las noticias con este método termina con la
última noticia que está en la posición final del array, en este momento tenemos
grupos con varias noticias y grupos con solo una noticia por lo que repasamos estas y
como consecuencia de nuestro algoritmo, son noticias que no cumplen con las
condiciones prefijadas de similitud con ninguna de las anteriores, todas estas las
agrupamos en un grupo que denominamos cajón de sastre, este es el último grupo
creado, es decir, el que tenga la numeración mas alta.
3. El primer resultado obtenido una vez ejecutado el algoritmo, nos salían muchos
grupos entorno a 24 y de estos, muchos con una sola noticia.
Modificamos en una segunda versión, desechando los títulos, porque las
palabras clave que resultaban de este, no influían en el resultado del filtrado de una
manera aceptable, por lo que nos quedamos con las palabras clave del primer párrafo
para aplicar el algoritmo, modificamos el porcentaje de similitud a un 50%, además
nos quedamos con los lugares, nombres propios que aparecen en el texto, etc.
El resultado con estos nuevos criterios es óptimo según el contenido de las
noticias y su agrupamiento siendo este punto el que íbamos buscando.
Para el desarrollo de este algoritmo hemos utilizado todas las herramientas propuestas
de la práctica:
• Fichero spanishStoplist.txt de palabras vacías.
• Se han procesado los 38 documentos con noticias para el agrupamiento de estas
según el tipo de contenido buscando preferiblemente textos distintos para una
misma noticia con un proceso automatizado.
• Librería Simmetrics para medir la similitud de ortográfica entre cadenas de
caracteres.
El programa se ha resuelto con varias clases dentro de un entorno JAVA:
1. LeerPalabras.java
Lectura de fichero de palabras vacías para guardarlas y
compararlas.
2. MyHandler.java
Manejador de eventos SAX para extraer la información de los
documentos propuestos.
3. Noticia.java
Clase que contiene la información que se extrae de cada noticia.
4. Transformador.java
A partir del fichero de salida .xml y con la lectura del directorio
XSLT donde está el fichero.xsl genera el fichero .HTML.
5. Main.java
Clase principal que agrupa de una manera automática las noticias
que se encuentran en el directorio de noticias, de un formato
determinado a un fichero XML y un fichero HTML,
organizándolas por contenido en grupos similares de noticias
numerando los grupos.
4. NOTA:
Hemos tenido especial cuidado de comentar el código fuente convenientemente,
explicando detalladamente los métodos seguidos en cada clase y lo que hacen cada uno
de estos.