Para toda la gestión del aprendizaje es necesario ir almacenando la información en todos los pasos, para que sea un aprendizaje eficiente. Es por esto que a lo largo del programa se van utilizando diversos ficheros en los que se guardan los resultados de las diversas clases por las que pasan las oraciones. A continuación se muestra un gráfico que resume este sistema de ficheros.
Koro Irusta Gonzalo 55 Figura 40. Ficheros utilizados.
Para todo el tratamiento de los diversos ficheros, se ha creado una clase con este mismo nombre, Fichero, que se encarga de la apertura, lectura, escritura o cierre de los mismos. Así, cada una de las clases que llevan a cabo algún tipo de tratamiento de estos ficheros, podrá realizar una llamada a esta clase y se evita el estar repitiendo código en cada uno de los procesos. Las funciones con las que cuenta esta clase son las siguientes:
escribeFichero(String nombreFichero,String cadena,boolean append): Se utiliza en la escritura de las oraciones en los diversos documentos de texto.
limpiaFichero(String nombreFichero): Se trata de una función que realiza la apertura del fichero y al cerrarlo borra el contenido. Se utiliza fundamentalmente para ir borrando los ficheros que sirven como intermediarios en el proceso de aprendizaje.
openFichRead(String nombreFichero): Mediante un buffer de entrada esta función sirve para abrir un fichero para su lectura.
leeFichRead(BufferedReader buffEntrada): Permite la lectura de los archivos.
closeFichRead(BufferedReader buffEntrada) : Cierra los ficheros.
Todas estas funciones son las que permiten el tratamiento de los ficheros que se han utilizado en el programa. Es el momento por tanto de conocer el contenido de cada uno de esos ficheros y el porqué de su creación. Algunos de ellos son meros intermediarios y se va borrando su contenido según van siendo procesados. Otros sin embargo son permanentes.
En primer lugar, de la búsqueda de contenido en Wikipedia, se extrae un fichero que contiene las sentencias con la información de los términos buscados. A este fichero se le ha denominado input.txt y tiene el aspecto que se proporciona en la imagen siguiente. Las "@"
56 Escuela Técnica Superior de Ingenieros Industriales (UPM)
que aparecen al final de la frase son un recurso para conocer dónde termina la información de cada término. Esto facilita la creación de las tripletas, puesto que así se es capaz de saber dónde comienza y dónde termina cada frase.
Figura 41. Fichero input.txt
Por otro lado, una vez que este fichero pasa por el analizador sintáctico, se obtiene otro fichero de salida, al que se ha denominado output.txt. Este fichero de salida contiene el análisis sintáctico de toda esta información. A continuación se muestra una figura en la que se ve el contenido del mismo. Como se observa en cada línea, la primera palabra es la palabra que toma del fichero input.txt, la segunda es la palabra genérica que hace referencia a la anterior; por ejemplo si se tiene la palabra es, la segunda palabra que aparece será el verbo ser. Por último, en tercer lugar aparece el tipo de palabra de la que se trata: verbo, sintagma nominal, adjetivo, etc. proporcionando también información sobre el género y número si procede; la cuarta palabra es el índice de confianza del análisis de dicho término.
Koro Irusta Gonzalo 57
Este fichero se pasa a la clase TripletaAnalizador. En esta clase lo que se hace es leer este fichero de salida del analizador y extraer una tripleta en base a esta salida. De esta forma lo que se hace con esta función es mediante un bucle de lectura ir recorriendo los elementos de la frase. En primer lugar se almacenará el sintagma nominal que aparezca en primer lugar. Posteriormente se almacenará el verbo y por último otro sintagma nominal que será el que proporcione la información del primer nombre almacenado. Actualmente no se están teniendo en cuenta adjetivos y otros elementos puesto que el análisis del lenguaje no es objetivo de este proyecto. Se ha creado esta clase para poder almacenar el contenido pero se han visto ejemplos de este analizador que directamente puedes extraer la tripleta como salida del analizador sintáctico. En un futuro se quieren unificar estos dos procesos y trabajar más con el analizador para que se extraigan las tripletas, de esta forma de cada frase podrían obtenerse un mayor número de tripletas y con mayor fiabilidad. Aun así, en la información que se ha ido procesando con esta clase se han obtenido buenas tripletas y se ha creado una base de conocimiento inicial con bastantes definiciones muy interesantes.
El fichero de texto que se obtiene tras pasar el fichero output.txt por esta clase se ha denominado tripletas.txt y presenta el aspecto que se muestra en la figura. Es importante remarcar que este fichero procede solamente del aprendizaje automático. El aprendizaje a través de la información que proporciona el usuario en forma de tripletas es añadido a otro fichero que se ha denominado frases.txt y que es añadido en otro proceso a la ontología. Por tanto en tripletas.txt sólo aparecen las tripletas de la búsqueda de contenido en Wikipedia.
Figura 43. Fichero tripletas.txt
Una vez que se tienen creadas las tripletas, este archivo tiene que ser añadido a la ontología. Para ello lo que se ha hecho es crear una clase, TratFrases, en la que se realiza esta acción. En esta clase lo primero que se mira es que la tripleta esté formada por tres palabras, un sujeto, un predicado y un objeto. Esto es fundamental puesto que si no se poseen las tres palabras el programa no va a saber el elemento que está ausente y hay una gran probabilidad de que no se almacenen correctamente los términos. Si el número de palabras es superior a tres, se vuelve a pasar la frase por el analizador para ver si es posible reducirla a una tripleta. Si no estuviesen las tres palabras, lo que se hace es copiar esta frase a un fichero denominado rechazados.txt y no se almacena aún en la ontología. De este modo, en un futuro se puede buscar más información sobre las frases que vayan siendo rechazadas y de esta forma generar
58 Escuela Técnica Superior de Ingenieros Industriales (UPM)
tripletas correctamente para ser añadidas a la ontología. Este sería un proceso que podría ser llevado a cabo en el robot en momentos de inactividad, fomentando la capacidad de analizar por qué no ha entendido antes esa información y realizando búsquedas en internet que le permitan comprender esos conceptos. Esto sería una parte muy importante en un proceso de aprendizaje autónomo. A continuación se muestra un extracto de este fichero, donde se puede observar el tipo de oraciones que actualmente no pueden ser procesadas por el programa.
Figura 44. Fichero rechazados.txt
Como se observa en la imagen, son oraciones impersonales o palabras que han quedado sueltas. Las palabras sueltas pueden ser fácilmente consultadas en internet y se podría obtener una definición de las mismas. En el caso de las oraciones impersonales su tratamiento sería bastante más complejo, sin embargo se podría obtener información sobre qué es gente o qué es pronto y así se estaría obteniendo un conocimiento de las oraciones, aunque no se puedan tratar directamente.
Por otro lado, si se observa que las tripletas contienen la estructura deseada y cumplen los requisitos, son añadidas a la ontología tal y como se explicaba al inicio de este capítulo. Una vez que son añadidas a la ontología, esta tripleta se copia en un fichero denominado historicos.txt. Este fichero contendrá todas las tripletas que se han añadido a la ontología, para tener así un fichero que recoja todos los datos que han sido almacenados en la base de conocimiento. El aspecto de este fichero, como se puede observar en la figura, es similar al fichero tripletas.txt pero de mayor extensión, puesto que los ficheros historicos.txt y rechazados.txt son los únicos en los que nunca se elimina contenido. Los demás ficheros, son meros intermediarios, de modo que cuando la información que contienen pasa de una etapa a otra del aprendizaje se borran para evitar repeticiones innecesarias en el tratamiento.
Además, esta estructura de ficheros permite que en un momento dado cualquier tipo de fichero pueda ser introducido al analizador sintáctico y realizar este mismo proceso. Esto es interesante de cara a un futuro, puesto que con esta consideración sería posible el tratamiento de cualquier fichero independientemente de su procedencia o de su extensión. Es cierto que para que esto sea posible habría que cambiar algunas configuraciones del analizador sintáctico, pero se ha visto algún ejemplo y es posible realizar este cambio. Por ello este será un tema susceptible a tratar en proyectos futuros.
Koro Irusta Gonzalo 59 Figura 45. Fichero historico.txt