Universidad de Costa Rica

 

 

Facultad de Ingenieria

 

 

Escuela de Ciencias de Computación e Informática

 

 

Autómatas y Compiladores

 

 

CI – 1322

 

 

Profesor:

 

Adolfo Di Mare

 

 

Estudiantes:

 

 

Alonso Ramirez Araya                   A44254

aramireza@gmail.com

818 – 13 – 69

 

 

Carlos Gourzong Gómez     A32314

cgourzongg@yahoo.es

829 – 76 – 37

 

 

 

 

Martes 20 de Marzo del 2007

 

 

 

 

 


 

Contenido

Introducción. 3

Descripción del problema. 3

Requerimientos: 3

Abstracción. 4

1. Especificación de clases: 4

Clase Principal: 4

Clase Traductor: 4

Clase Generador: 5

Clase Palabra: 5

Clase Contenedor: 6

2. Eficiencia de la Solución: 6

Implementación. 7

1. Modelo de Clases: 7

2. Arquitectura Interna del programa: 8

Clase principal: 8

Clase traductor: 8

Clase Generador: 9

Clase Palabra: 10

Clase Contenedor: 11

Compilador Usado: 12

Como compilar el programa: 12

Manual de Usuario. 13

Datos de prueba. 13

Código Fuente. 15

Reconocimientos. 28

 


Introducción

 

El presente documento puede ser accesado en formato html en el sitio

www.angelfire.com/planet/automatas/tarea1_xecnx.html

 

Descripción del problema

   

Se requiere implementar un programa traductor de avisos económicos de formato html a xml. El programa deberá tomar los anuncios de la página del diario extra clasificarlos y generar un documento xml con los anuncios ordenados por categorías.

 

Requerimientos:

 
·        El programa debe ser capaz de extraer el texto de los anuncios de un archivo en formato html.
 
·        El programa debe ser capaz de clasificar los anuncios por categorías (casas, vehículos).
 
·        El programa debe generar un archivo en formato xml con los anuncios debidamente clasificados.
 
·        El nuevo archivo solo contendrá la información relevante al documento, es decir, la información que concierne a cada anuncio económico. 
 
·        El programa debe manejar la codificación habitual en este tipo de avisos económicos.
 

 

 

 

 

 

 

 

Abstracción

       

1. Especificación de clases:

       

Clase Principal:

 
Metodos:
       Int main (string).
       

Clase Traductor: 

Atributos:
       Contenedor                 miContenedor;
       ifstream                       lectorHtml;
       ofstream                      escritorXml;
       string                           paginaHTML;
       vector<Palabra>         Diccionario;
 
Metodos:
       Traductor(string); 
       ~Traductor();
       void     lector(); 
       void     abrirXml();
       void     cerrarXml();
       void     ejecutar();
       void     cerrarXML()
       void     cargaDiccionario();
       string   clasifica(string);
       string   ctoken(string);
       bool     numeral(string);
       string   mayusc(string);
 

 


Clase Generador:

Atributos:
       vector<Palabra> lista;
       vector<Palabra> diccionario;
       ifstream           lector;
       ofstream         escritor;
       string               pag;
       string               categoria;
 
Métodos:
       Generador();
       ~Generador();
       void     leeAnuncios(char*,string);
       void     encuentraFrecuentes();
       void     enlistar(string);
       void     ordenaLista();
       bool     numeral(string);
       string   mayusc(string);
       void     guardaDiccionario();
 

Clase Palabra:

Atributos:
       int        cont;
       string   pal;
       string   cat;
       
Metodos:
       Palabra();
       Palabra(string,string);
       ~Palabra();
       bool     menor(Palabra);
       bool     compara(string);
       void     incrementa();
       string   getPal();
       string   getCat();
       int        getCont();
 

Clase Contenedor:

Atributos:
       std::vector<String> categorias                       std::vector<std::vector<string>> anuncios; 
 
Metodos:
       void agregarCategoria(string);
       void agregarAnuncio(string,string);
       void guardarXml(ofstream& xml);
       int buscarCategoria(string cat);

2. Eficiencia de la Solución:

La metodología utilizada funciona con un buen diccionario de categorías, sin embargo el generador del diccionario no es del todo eficiente porque existen palabras que se repiten muchas veces en anuncios de varias categorías (ambigüedad), por ejemplo la palabra vendo aparece tanto en carros como en casas. 
 
Por otro lado el traductor tampoco analiza el contexto del anuncio lo que también genera ambigüedad.
 
Concluimos así que para obtener una solución realmente eficiente seria necesario ahondar más en los aspectos anteriormente mencionados.

 


Implementación     

1. Modelo de Clases:

 
 

2. Arquitectura Interna del programa:

 

Clase principal:

 
Es la clase principal se encarga de recibir por parámetro la ruta y nombre del archivo html.
Llama al método identificador de la clase traductor y le envía el argumento que recibe del usuario como parámetro.

 

Clase traductor:

           
Es la clase encargada de leer el documento html, extraer los anuncios, clasificarlos y generar el documento xml.    
 
Métodos: 
 
· Traductor:  Constructor
 
· lector: Busca en la pagina HTML el inicio de la seccion de los anuncios, lo procesa y le pide al clasificador que lo clasifique, finalmente agrega el anuncio ya clasificadoal contenedor.
 
· abrirXml: Abre el flujo de escritura del archivo en formato XML y le solicita al contenedor que dicho documento.
 
· cerrarXml: Cierra el flujo de escritura del archivo en formato XML..
 
· ejecutar:  Metodo principal de la clase. Se encarga de llamar al metodo que lee y procesa la pagina HTML, a los que abren y cierran los flujos de escritura y al encargado de escribir el documento XML.
 
· cargaDiccionario:  Metodo que carga el diccionario que se va a utilizar para clasificar los anuncios.
 
· clasifica: Recibe un anuncio y devuelve la categoria a la que pertenece.
 
· ctoken:  Recibe una hilera de caractares y busca en el diccionario alguna correspondencia.
 
· numeral: Recibe una palabra y devuelve verdadero si corresponde a un numer.
 
· mayusc:  Recibe un string y trasnforma su contenido a mayuscula.
 
Atributos:
 
· miContenedor: almacena los anuncios y sus categorias
 
· lectorHtml: flujo de lectura usado para leer el documento HTML
 
· escritorXml: flujo de escritura usado para escribir el documento XML
 
· paginaHTML: string donde se almacena el nombre de la pagina que se desea traducir
 
· Diccionario: vector que contiene el diccionario que se utiliza para clasificar los anuncios
 
 

Clase Generador:

 

Esta clase se implemento para que analice páginas html de anuncios ya clasificadas y a partir de ellas genere un diccionario de correspondencias entre palabras y categorías. Produce un archivo “diccionario.txt” con las veinte palabras más comunes en anuncios de una categoría. Esta clase no esta dentro del flujo de ejecución del programa ya que el diccionario solamente es necesario generarlo una vez.
 
Métodos:
· Generador : Constructor de la clase. Inicializa los atributos.
 
· leeAnuncios:  Metodo que procesa una pagina HTML y la descompone en sus anuncios.
 
· encuentraFrecuentes: Procesa los anuncios de una pagina HTML y encuentra las palabras que mas se repiten.
 
· enlistar: Metodo que descomponde un anuncio en palabras y estas las almacena en una lista.
 
· ordenaLista: Metodo que ordena el vector de palabras de acuerdo al contador.
 
· numeral: Recibe una hilera de caracteres y evalua si coorresponde a un numero
 
· mayusc:  Recibe una hilera de caracteres y la transforma a mayusculas
 
· guardaDiccionario: Guarda en disco el diccionario resultante.
 
 
Atributos:
 
· lista: almacena las palabras de de un anuncio
 
· diccionario: diccionario que se utiliza para clasificar los anuncios