Universidad politécnica de madrid escuela técnica superior de ingenieros



Descargar 3.96 Mb.
Página23/44
Fecha de conversión18.08.2020
Tamaño3.96 Mb.
1   ...   19   20   21   22   23   24   25   26   ...   44
DatosComprension: Puntero a la estructura DatosComprension




  • p_idioma: Indicador del idioma que se empleará que en este caso será siempre 0 ya que se empleará como único idioma posible el español.




  • p_fichero_textos: Nombre del fichero de comandos a partir del cual se extraerán las reglas.




  • p_debug: Entero en función del cual se escribirán unos u otros mensajes de seguimiento del sistema.




  • p_modo: Entero que determina la forma en la que se leen las frases del fichero de comandos. Si su valor es distinto de cero, lee las frases; si no, no hace nada.

Una vez dentro del método, lo primero es leer las frases del fichero de comandos, mediante el método “leeFrasesFichero”.


5.2.1.1.- Método “leeFrasesFichero”
El objetivo de este método es leer las frases que tiene el fichero de comandos y devolver el número de frases que ha leído. Para ello, necesita los siguientes parámetros:


  • Puntero a la estructura DatosComprension

  • Nombre del fichero de comandos

  • Entero que determina el idioma que va a emplearse. Como se indica anteriormente, el idioma que se empleará es el español.

  • Entero que determina el modo de lectura del fichero.

Además de devolver el número de frases que se han leído, este método es el encargado de crear los siguientes ficheros:




  • Fichero de textos, que contiene una relación de las frases que pueden ser dichas y comprendidas




  • Fichero de traducción que contiene cada frase dividida en palabras, cada una de ellas asociada al valor del concepto por el que se debe traducir esa frase.




  • Fichero de slots que contiene los posibles valores que pueden tomar los conceptos por los que serán traducidas las frases.

Si el modo que se ha pasado como parámetro vale cero, no se realiza ninguna acción. Si, por el contrario, ese valor es diferente de cero, se procede a leer el fichero de comandos.


Las líneas se leen de una en una y a cada una de las mismas se aplica el mismo proceso:


  1. Primero se eliminan los caracteres de retorno que pueda tener la línea




  1. Después se separa la frase de la orden y se actualiza un puntero para que apunte al concepto que lleva asociada la frase y el valor del mismo.




  1. A continuación se calcula el número de palabras que tiene la frase.




  1. Se escribe la frase en el fichero de texto.




  1. Se guarda la frase en la posición correspondiente del array “línea” de la estructura DatosComprension




  1. También se copia la frase al atributo “texto” de las estructuras “SlotsReferencia” y “SlotsPredichos” de la estructura DatosComprension.




  1. Se guarda el valor del concepto en el atributo “slots” de la estructura “SlotsReferencia




  1. Se escriben las correspondientes palabras en los ficheros de traducción y de slots.




  1. Al atributo “comienzoSlot” de la estructura “SlotsReferencia” se le da el valor cero y el atributo “finalslot” se inicializa con el número de palabras que tiene la frase.




  1. Por último se incrementa el número de slots que tiene almacenados la estructura “SlotsReferencia”.

Este proceso se aplica hasta que se han leído todas las líneas del fichero.


5.2.1.2.- Método “procesaFrases”
Una vez hemos leído todas las frases que componen nuestro vocabulario, necesitamos procesarlas para que sea posible aplicarles las reglas. Con cada una de las frases que componen nuestro vocabulario realizamos el siguiente proceso.
Cada una de las frases que componen las posibles órdenes que se pueden dar al sistema puede considerarse como un array de bloques. El método de aplicación de las reglas es ir recorriendo todos los bloques, comprobando si pueden cuadrar con alguna regla. Es por esto que el siguiente paso en la generación de reglas es crear los bloques iniciales.
Toda la información sobre los bloques se guarda en la estructura “bloques” que forma parte de la estructura “datosComprension”. En este primer paso, crean los bloques iniciales asociados a cada una de las frases. Cada palabra de la frase se guarda como un bloque, guardándola en el atributo “textoBloque”.
Cuando ya se ha recorrido toda la frase, se actualiza el atributo “n_bloques” con el número de bloques que se han identificado y guardado.


  • preprocesa_spanish

Una vez se tiene una división inicial de las frases en bloques, éstos son preprocesados para categorizarlos. Cada bloque tendrá una o más categorías o etiquetas asociadas, aunque inicialmente será una. Si el texto del bloque es una palabra función, dicho bloque será etiquetado como “basura”. Por el contrario, si el texto del bloque se corresponde con una palabra contenido, desde un punto de vista pesimista no sabemos cómo categorizarla inicialmente.


El sistema está preparado para emplear categorías, pero al comienzo no disponemos de dichas etiquetas. En un dominio conocido podría disponerse de unos diccionarios de categorías con palabras etiquetadas, caso que no se da en un entorno general. Por este motivo, cada bloque inicial se etiqueta con su propio texto o palabra. Un bloque puede tener hasta cuatro categorías.


  • procesa_spanish

En este método lo primero que se hace es llamar a “aplicaReglas”, cuyo objetivo es ir aplicando los elementos de la estructura “datosLearning”, es decir, ver qué funciones de creación de reglas están pendientes de ser aplicadas. La primera vez que se llama a este método no se lleva a cabo ninguna acción porque todavía no hay ninguna función guardada en “datosLearning”.


El siguiente paso es comprobar concepto por concepto por medio del método “escribe”. Si hay algún bloque que lo tenga almacenado en su lista de categorías, en cuyo caso añadirá ese concepto a la lista de “slotsPredichos” que se asocian con la frase. Si es la primera vez que se entra en el método no hará nada, porque todavía no hay conceptos.


  • evalua

Una vez se han aplicado las reglas y rellenado los slots predichos, se pasa a evaluar las predicciones.


Se van recorriendo los slots predichos de la frase comprobando que no han sido ya evaluados, porque no se computan los slots repetidos. En el caso de que no haya sido evaluado, se recorren todos los slots de referencia de la frase, comprobando si se corresponde con alguno de ellos. En caso de que no lo haga, ese slot predicho se contabiliza como fallo. En caso de que coincida con alguno de los slots de referencia, se comprueba si el slot de referencia comienza a la vez o más tarde que el predicho y que termina antes o al mismo tiempo que el predicho. Si esto ocurre, se ha acertado con la predicción y si no, ha sido una predicción fallida. En caso de que no hubiese ningún slot de referencia, se resetea el contador de fallos, porque no tenía nada con lo que comparar. Por último, recorre los slots de referencia en busca de aquellos que todavía no hayan sido predichos, para tenerlos en cuenta como pendientes.
Ilustrándolo con un ejemplo, supongamos que tenemos las siguientes tablas con los slots predichos y de referencia, asociados a una frase, así como sus instantes de inicio y final:





Slot

Inicio

Final




Atiende

2

296




Avanza

296

400




Gira

400

600


















































Slot

Incio

Final

Atiende

3

296

Gira

296

400

Para

400

600

Tabla 3: Slots de referencia




Compartir con tus amigos:
1   ...   19   20   21   22   23   24   25   26   ...   44


La base de datos está protegida por derechos de autor ©odont.info 2019
enviar mensaje

    Página principal