Capítulo VIII: El Lenguaje de Reglas Gramaticales 8. EL LENGUAJE DE REGLAS GRAMATICALES 8.0 Introducción al lenguaje de reglas. Un elemento de regla será aquello que se encuentre entre dos espacios en blanco. Una regla puede estar compuesta por un solo elemento o por varios elementos uno detrás de otro con espacios en blanco intermedios ; siempre que se encuentren en la misma línea y que no sobrepasemos los 256 caracteres todo formará una sola regla gramatical. Para nosotros una regla será cada una de las líneas válidas de los ficheros de reglas. En los ficheros de reglas puede haber también líneas de comentario y líneas en blanco. 8.1 Estudio de los distintos elementos del lenguaje de reglas. ✦ Palabra Palabra es un grupo de caracteres alfanuméricos, con la condición de que empiece por una letra. Una palabra, además de caracteres alfanuméricos puede contener cualquier símbolo que nos se clasifique como signo de 70 Capítulo VIII: El Lenguaje de Reglas Gramaticales puntuación excepto : guiones ‘-‘ , subrayados ‘_’ y apóstrofes ‘\’’ (en inglés para indicar genitivo sajón) . En el proceso de comparación de la palabra leída del texto con la palabra de nuestra regla nos es indiferente si los caracteres están en mayúsculas o minúsculas. No somos “case sensitive” . Ejemplo de regla : word Vamos comparando todas las palabras del texto con ésta y cuando sean iguales, se cumple la regla. Sin importarnos si es una está en mayúscula y la otra en minúscula. En cambio si delante de la palabra leída del texto hubiera algún signo de puntuación, la regla no se cumpliría. En este caso, si quisiéramos verificar la igualdad, sería necesario completar la regla con algún otro elemento del lenguaje de reglas. ✦ @ Este símbolo cuando aparece delante de una palabra supone la negación de la palabra, buscamos palabras del texto que no coincidan con la palabra de la regla. Teniendo en cuenta que dos palabras no serán iguales cuando difieran en algún carácter, no siendo suficiente para la desigualdad que uno de los caracteres esté en mayúscula y el otro en minúscula. 71 Capítulo VIII: El Lenguaje de Reglas Gramaticales También hemos de tener en cuenta que si la comparación se realiza con una palabra del texto que lleve un signo de puntuación delante, aunque la palabra de la regla sea idéntica a la leída, el resultado de la comparación será negativo. Ejemplo de regla : @word ✦ ? Delante de una palabra el signo cierre de interrogación busca que la palabra de la regla sea igual a la del texto pero en este caso sí distinguimos entre mayúsculas y minúsculas, sí somos “case sensitive”. Por supuesto, se sigue cumpliendo que un signo de puntuación delante de la palabra leída del texto destruye la posible igualdad. Ejemplo de regla : ?Word 72 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ ¿ Ésta es la negación del elemento anterior, buscamos aquellos términos del texto que sean diferentes a la palabra de la regla. Siendo diferentes desde el momento en unos caracteres vayan en mayúscula y otros en minúscula. Y como siempre, también en el caso de haber algún signo de puntuación delante de la palabra extraída del texto. Ejemplo de regla : ¿Word ✦ - El guión delante de una palabra indica que estamos buscando una terminación, que la palabra de la regla, en realidad, es una terminación y como tal iremos haciendo las comparaciones con las palabras del texto. No vamos a distinguir entre mayúsculas y minúsculas. Pero un signo de puntuación delante de la palabra del texto desharía la posible identidad. Ejemplo de regla : -tion 73 Capítulo VIII: El Lenguaje de Reglas Gramaticales El guión puede combinarse con otros elementos diferentes para formar un único elemento de la regla como veremos más adelante. ✦ # La almohadilla es la negación del elemento anterior. Buscamos aquellos términos del texto cuya terminación no coincida con la especificada en la regla. No es sensible a las mayúsculas y minúsculas, pero sí a la existencia de signos de puntuación delante de la palabra del texto a comparar. Ejemplo de regla : # tion La almohadilla paralelamente al caso del guión se puede combinar con varios elementos diferentes para dar lugar a un único elemento de regla. ✦ + Indica que lo que le sigue es una categoría sintáctica. Las categorías sintácticas pueden ser de dos tipos : genéricas (en este caso lo que sigue al signo ‘+’ es una cadena alfabética) o concretas (en este caso lo que será un número de categoría lo que seguirá al signo ‘+‘) . O sea, la palabra del texto es buscada en el diccionario y se comprueba que pueda tener la categoría especificada en la regla. 74 Capítulo VIII: El Lenguaje de Reglas Gramaticales Los números de categoría concreta son las siguientes : 10 nombre singular. 11 nombre plural. 12 nombre cuyo singular y plural coinciden. 13 abreviaturas, acrónimos y siglas. 14 genitivos sajones. 20 adjetivo en grado positivo. 21 adjetivo en grado comparativo. 22 adjetivo en grado superlativo. 30 pronombre. 40 adverbio. 50 verbo en infinitivo. 51 verbo en tercera persona del singular. 52 verbo en pasado. 53 verbo en participio. 54 verbo en gerundio. 60 interjección. 70 conjunción. 80 preposición. 90 artículo indeterminado. 91 artículo determinado. 75 Capítulo VIII: El Lenguaje de Reglas Gramaticales Las categorías genéricas serán : nombre, engloba las categorías concretas: 10, 11, 12 , 13 y 14. adjetivo, engloba las categorías concretas: 20, 21 y 22. pronombre, que engloba la categoría concreta: 30. adverbio, engloba la categoría concreta: 40. verbo, engloba las categorías concretas: 50, 51 y 52. interjeccion, que engloba la categoría concreta: 60. conjuncion, engloba la categoría concreta: 70. preposicion, engloba la categoría concreta: 80. pronombre, que engloba la categoría concreta: 30. articulo, que engloba las categorías concretas: 90 y 91. 76 Capítulo VIII: El Lenguaje de Reglas Gramaticales Las categorías genéricas se escribirán en los ficheros de reglas sin tildes, en el caso de que las llevaran. Ejemplos de reglas : +nombre +adjetivo +52 +20 El signo ‘+’ puede combinarse con otros elementos diferentes para formar un único elemento de la regla, como posteriormente veremos. Es un elemento sensible a la presencia de algún signo de puntuación delante del termino leído de la entrada. ✦ ! Este elemento es la negación del anterior. Exigimos que la palabra del texto tenga una categoría diferente de la especificada. O mejor dicho, que no pueda tener dicha categoría. Al igual que en el caso anterior puede ir seguido de categorías genéricas y concretas. Las categorías genéricas y concretas son las mismas que en el caso anterior. 77 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplos de reglas : !nombre !adjetivo !52 !20 El signo ‘ !’ puede combinarse con otros elementos diferentes para formar un único elemento de regla. Es un elemento sensible a la presencia de signo de puntuación delante de la palabra sobre la cual aplicamos la regla. ✦ +categoría-genérica_categoria-concreta Este es un elemento de regla formado a partir de los anteriores. Implica que la palabra debe de tener la categoría genérica indicada, pero no la concreta. Se deben de cumplir las dos condiciones a la vez sobre el mismo vocablo de entrada. Ejemplo de regla : +nombre_11 La palabra tomada del flujo entrada tiene que cumplir ser nombre y no ser la categoría concreta 11 , así, la palabra debe ser nombre y no ser plural. 78 Capítulo VIII: El Lenguaje de Reglas Gramaticales Es sensible a la presencia de signos de puntuación delante del elemento del texto a evaluar. Es un elemento de regla compuesto. Los elementos compuestos se forman enlazando con el subrayado ‘_’ . ✦ & Nos indica que hemos de encontrar un signo de puntuación, que sigue a este símbolo, en el flujo de entrada . El formato general sería : ✦ &signo Siendo el caso del punto un caso especial. Pues no puede ir solo, detrás ha de llevar un modificador : ‘+’ o ‘-‘ : ✦ &.+ Indica que el signo que buscamos es un terminador de frase : un punto, un cierre de interrogación, o un cierre de admiración : ‘.’, ‘ ?’ o ‘ !’. ✦ &.- Aquí el signo buscado es exclusivamente el punto : ‘.’. 79 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplos de regla : &.+ &.&, &; ✦ $ Nos indica que hemos de encontrar un signo de puntuación, que ha de ser diferente del que sigue al símbolo. Es la negación del ‘&’. El formato general sería : ✦ $signo Siendo el caso del punto un caso especial. Pues no puede ir solo, detrás ha de llevar un modificador : ‘+’ o ‘-‘ : ✦ $.+ Indica que el signo que buscamos es cualquiera que no sea un terminador de frase : un punto, un cierre de interrogación, o un cierre de admiración : ‘.’, ‘ ?’ o ‘ !’. 80 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ $.- Aquí el signo buscado ha de ser diferente al punto : ‘.’. Ejemplos de regla : $.+ $.$, ✦ [lista] Buscamos la palabra leída del texto en la lista contenida en el fichero. Esta lista está formada por reglas, pudiendo estas reglas ser simples, las formadas por un solo elemento ; o complejas, formadas por el encadenamiento de varios elementos. Estos elementos pueden ser de cualquier tipo, de los vistos hasta ahora o de los que vamos a ir estudiando más adelante. Una lista, por supuesto, puede contener en sus reglas más listas, que a su vez pueden contener a otras. El límite de anidamientos posibles, teóricamente, no existe. Una vez que encontramos la palabra del texto en la lista, se detiene la búsqueda. Habrá una regla por línea del fichero. 81 Capítulo VIII: El Lenguaje de Reglas Gramaticales El nombre de la lista es el nombre del fichero que la contiene sin extensión, el programa automáticamente le añadirá la extensión ‘.rgl’. Tenemos que tener cuidado con esto, pues, al crear el fichero de la lista, es necesario poner la extensión, aunque luego en las reglas los llamemos de forma abreviada. Dentro de una lista podemos tener reglas referentes a signos : ‘&’ y ‘$’. Ejemplo de regla en la página siguiente: [fichero1] El contenido de fichero1 podría ser : &, the is -ed +nombre_11 +51 [fichero2] El resultado de aplicar esta regla sería positivo si la palabra del texto que vamos a analizar, cumple alguna de las reglas contenidas en el fichero1. Evidentemente, las reglas como : +nombre_11 +51 [fichero2], implican un proceso de avance del puntero sobre el texto. Si se cumpliera, habríamos avanzado al menos tres palabras de texto, en función, claro está, del contenido de fichero2 y de posibles anidamientos posteriores. 82 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ <lista> Es la negación del elemento anterior. Buscamos la palabra leída del texto en la lista contenida en el fichero. Esta lista está formada por reglas, pudiendo estas reglas ser : simples (las formadas por un solo elemento) o complejas (formadas por el encadenamiento de varios elementos). Estos elementos pueden ser de cualquier tipo, de los vistos hasta ahora o de los que vamos a ir estudiando más adelante. Una lista, por supuesto, puede contener en sus reglas más listas, que a su vez pueden contener a otras. El límite de anidamientos posibles, teóricamente, no existe. El tipo de listas permitidas para los anidamientos son tanto las positivas como las negativas. Habrá una regla por línea del fichero. El nombre de la lista es el nombre del fichero que la contiene sin extensión, el programa automáticamente le añadirá la extensión ‘.rgl’. Tenemos que tener cuidado con esto, pues al crear el fichero de la lista es necesario poner la extensión, aunque luego en las reglas los llamemos de forma abreviada. Dentro de una lista podemos tener reglas referentes a signos : ‘&’ y ‘$’. 83 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplo0 de regla : <fichero1> El contenido de fichero1 podría ser : &, that are -ing +verbo_51 the [fichero2] El resultado de aplicar esta regla sería positivo, si la palabra del texto que vamos a analizar no cumple ninguna de las reglas contenidas en el fichero1.Evidentemente, las reglas como : +verbo_51 the [fichero2], implican un proceso de avance del puntero sobre el texto. Si se cumpliera, habríamos avanzado al menos tres palabras de texto, en función, claro está, del contenido de fichero2 y de posibles anidamientos posteriores. Pero aquí a diferencia del tipo de lista anterior ‘[ ]’, si se cumple alguna de las reglas contenidas en el fichero1, el resultado de la regla ‘<>’ será negativo. Quedando el puntero del texto en el punto de partida inicial, por lo que tendremos que retroceder todo lo que hayamos avanzado en el interior del fichero1 y anidamientos posteriores. Si no se cumplieran ninguna de las reglas del interior de fichero1, entonces el resultado de aplicar ‘<>’ positivo. Avanzaríamos una palabra en el flujo de entrada o no en función de que termino haya sido el comparado con ‘<>’. Si la comparación ha sido realizada con una palabra simplemente, sin que vaya delante ningún signo de puntuación, avanzaríamos una palabra en el flujo de entrada. En cambio, si la comparación ha sido realizada con una palabra que lleva delante un 84 Capítulo VIII: El Lenguaje de Reglas Gramaticales Continuación del ejemplo0 : signo de puntuación, aunque el resultado de aplicar la regla haya sido positivo, no avanzamos en el flujo de entrada, dado que, claramente, ninguna de las reglas anteriores podrían ser aplicadas a una palabra que fuera precedida por un signo de puntuación. Ejemplo1 de texto con regla aplicada : Texto : “ cinema. The film” Regla : +nombre <fichero1> Contenido de fichero1 : +verbo +preposicion En este caso, la regla se cumple sobre el texto pues después de la palabra “cinema”, que sí que es un nombre, no aparece ninguna palabra con la categoría nombre o con la categoría preposición. Después de la palabra “cinema” lo que tenemos es un punto, por eso no avanzaremos en el flujo de lectura y nos quedaremos en “. The “ para pasar aplicar la siguiente regla. 85 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplo2 de texto con regla aplicada : Texto : “. The film” Regla : <fichero2> +nombre Contenido de fichero2 : +adjetivo -ing Ahora, vemos que “. The “ cumplen el contenido de la lista negativa, por lo tanto aunque haya un punto delante de la palabra “The “, sería necesario avanzar en el texto y pasar a “film” para poder aplicar sobre esta la siguiente parte de la regla : +nombre. Tal y como está la regla escrita ahora el resultado sería negativo. ✦ *<lista> Elemento que funciona de manera parecida al anterior con la diferencia del modo de avance en el texto de entrada. Aquí, si la palabra objeto de la comparación lleva un signo de puntuación delante, sí que avanzaremos. Es útil cuando la lista negativa va al comienzo de una regla compuesta de varios elementos. 86 Capítulo VIII: El Lenguaje de Reglas Gramaticales Retomando el ejemplo2 del elemento anterior, en el que vimos la necesidad de esta modificación . Texto : “. The film” Regla : *<fichero2> +nombre Contenido de fichero2 : +adjetivo -ing Ahora, la regla sí que se cumpliría pues después de aplicar ‘*<fichero2>’ a “. The”, avanzaríamos en el flujo de entrada y aplicaríamos ‘+nombre’ a la palabra “film”. ✦ -terminación_[lista] Este elemento de regla es un elemento compuesto. Formado a partir del símbolo de terminación ‘-‘, enlazado con una lista positiva a través del subrayado ‘_’. Su significado sería : que la palabra tenga la terminación indicada y que, además, cumpla alguna de las condiciones contenidas en la lista. En este tipo de lista que forma parte de un elemento compuesto, no se permiten reglas o condiciones que impliquen un avance en el flujo del texto de 87 Capítulo VIII: El Lenguaje de Reglas Gramaticales entrada, pues son condiciones que ha de cumplir la palabra que estamos inspeccionando. Condiciones que han de cumplirse al mismo tiempo que la condición principal, que sería la terminación, sobre un mismo elemento del texto. Así, esta regla se cumple si la palabra inspeccionada tiene la terminación pedida y cumple alguna de las condiciones de la lista ; una vez que se cumple una condición de la lista, no seguimos inspeccionado el resto. Por lo tanto, si se cumple la regla global, avanzamos una palabra en el flujo de entrada. Ejemplo de regla : -ing_[fichero1] El contenido de fichero1 : +preposicion [fichero2] El contenido del fichero2 : +verbo +conjuncion Estamos pidiendo que la palabra tenga la terminación ‘ing’ y que, al mismo tiempo, pueda ser preposición o que cumpla alguna de las reglas (condiciones) incluidas dentro de la lista : ‘[fichero2]’. 88 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ -terminación_<lista> Este elemento de regla es un elemento compuesto, especular respecto al anterior. Formado a partir del símbolo de terminación ‘-‘, enlazado con una lista negativa a través del subrayado ‘_’. Su significado sería : que la palabra tenga la terminación indicada y que, además, no cumpla ninguna de las condiciones contenidas en la lista. En este tipo de lista que forma parte de un elemento compuesto, no se permiten reglas o condiciones que impliquen un avance en el flujo del texto de entrada, pues son condiciones que ha de cumplir la palabra que estamos inspeccionando. Condiciones que han de cumplirse al mismo tiempo que la condición principal, que sería la terminación, sobre un mismo elemento del texto. Así, esta regla se cumple si la palabra inspeccionada tiene la terminación pedida y no cumple ninguna de las condiciones de la lista. Por lo tanto, si se cumple la regla global, avanzaremos una palabra en el flujo de entrada. Ejemplo de regla : 89 Capítulo VIII: El Lenguaje de Reglas Gramaticales El contenido del fichero2 : -ing_<fichero1> going El contenido doing de fichero1 : making +preposicion reading [fichero2] Estamos pidiendo que la palabra tenga la terminación ‘ing’ y que al mismo tiempo no pueda ser preposición y que no esté en el fichero2. ✦ #terminación_[lista] Este elemento de regla es un elemento compuesto. Formado a partir del símbolo de negación de terminación ‘#‘, enlazado con una lista positiva a través del subrayado ‘_’. Su significado sería : que la palabra no tenga la terminación indicada y que además cumpla alguna de las condiciones contenidas en la lista. En este tipo de lista que forma parte de un elemento compuesto, no se permiten reglas o condiciones que impliquen un avance en el flujo del texto de entrada, pues son condiciones que ha de cumplir la palabra que estamos inspeccionando. Condiciones que han de cumplirse al mismo tiempo que la condición principal, que sería la terminación, sobre un mismo elemento del texto. Así, esta regla se cumple si la palabra inspeccionada tiene la terminación pedida y cumple alguna de las condiciones de la lista, una vez que se cumple una condición de la lista no seguimos inspeccionado el resto. 90 Capítulo VIII: El Lenguaje de Reglas Gramaticales Por lo tanto, si se cumple la regla global, avanzamos una palabra en el flujo de entrada. Ejemplo de regla : # ing_[fichero1] El contenido de fichero1 : +preposicion [fichero2] El contenido del fichero2 : +verbo +conjuncion +adverbio besides Estamos pidiendo que la palabra no tenga la terminación ‘ing’ y que al mismo tiempo pueda ser preposición o que cumpla alguna de las reglas (condiciones) incluidas dentro de la lista : ‘[fichero2]’. ✦ #terminación_<lista> 91 Capítulo VIII: El Lenguaje de Reglas Gramaticales Este elemento de regla es un elemento compuesto, especular respecto al anterior. Formado a partir del símbolo de negación de terminación ‘#‘, enlazado con una lista negativa a través del subrayado ‘_’. Su significado sería : que la palabra no tenga la terminación indicada y que además no cumpla ninguna de las condiciones contenidas en la lista. En este tipo de lista que forma parte de un elemento compuesto, no se permiten reglas o condiciones que impliquen un avance en el flujo del texto de entrada, pues son condiciones que ha de cumplir la palabra que estamos inspeccionando. Condiciones que han de cumplirse al mismo tiempo que la condición principal, que sería la terminación, sobre un mismo elemento del texto. Así, esta regla se cumple si la palabra inspeccionada tiene la terminación pedida y no cumple ninguna de las condiciones de la lista. Por lo tanto, si se cumple la regla global, avanzaremos una palabra en el flujo de entrada. Ejemplo de regla : #ing_<fichero1> El contenido de fichero1 : +preposicion [fichero2] 92 Capítulo VIII: El Lenguaje de Reglas Gramaticales El contenido del fichero2 : +conjuncion about Estamos pidiendo que la palabra no tenga la terminación ‘-ing’ y que al mismo tiempo no pueda ser preposición y que no esté en el fichero2 (que no cumpla ninguna de las reglas contenidas en el fichero2). ✦ [lista1]_[lista2] Elemento compuesto por dos listas positivas enlazadas por un subrayado ‘_’. Su significado es: que la palabra cumpla alguna regla de la primera lista y luego, a su vez, alguna otra de la segunda. Dentro de estas lista2 no se permiten reglas que impliquen avances de lectura sobre el texto. En cambio, en la lista1 sí que se permiten avances, pero aunque el resultado sea positivo siempre se retrocede la última palabra leída para que sea a esta palabra a la que se pasen a aplicar las reglas de la lista2 . Si se cumplen las reglas de las dos listas a la vez, entonces avanzaremos esta última palabra. 93 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplo de regla : [fichero1]_[fichero2] Contenido fichero1 : the [lista-terminaciones] Contenido lista-terminaciones : -ment -ness -tion -ity Contenido fichero2 : +nombre +adjetivo La regla pide que haya un ‘the’ y que la palabra siguiente tenga alguna de las terminaciones de la lista de terminaciones y además pueda tener alguna de las categorías indicadas en el fichero2. ✦ [lista1]_<lista2> 94 Capítulo VIII: El Lenguaje de Reglas Gramaticales Elemento compuesto por dos listas una positiva y otra negativa enlazadas por un subrayado ‘_’. Su significado es: que la palabra cumpla alguna regla de la primera lista y luego, a su vez, no cumpla ninguna de las de la segunda. Dentro de estas lista2 no se permiten reglas que impliquen avances de lectura sobre el texto. En cambio, en la lista1 sí que se permiten avances pero, aunque el resultado sea positivo, siempre se retrocede la última palabra leída para que sea a esta palabra a la que se pasen a aplicar las reglas de la lista2 . Si se cumplen alguna de las reglas de la primera lista y ninguna de la segunda lista, entonces avanzaremos esta última palabra. Ejemplo de regla : [fichero1]_<fichero2> Contenido fichero1 : the [lista-terminaciones] Contenido lista-terminaciones : -ment -ness 95 Capítulo VIII: El Lenguaje de Reglas Gramaticales -tion -ity Contenido fichero2 : +nombre +adjetivo La regla pide que haya un ‘the’ y que la palabra siguiente tenga alguna de las terminaciones de la lista de terminaciones y no tenga ninguna de las categorías indicadas en la lista segunda. ✦ <lista1>_[lista2] Elemento compuesto por dos listas la primera negativa y la segunda positiva enlazadas por un subrayado ‘_’. Su significado es: que la palabra no cumpla ninguna de las reglas de la primera lista y luego a su vez si cumpla alguna de la segunda. Dentro de la lista2 no se permiten reglas que impliquen avances de lectura sobre el texto. Si se cumplen las dos a la vez, entonces avanzaremos. 96 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplo de regla : <fichero1>_[fichero2] Contenido fichero1 : -ment -ness -tion -ity Contenido fichero2 : +nombre +adjetivo La regla pide que la palabra no tenga ninguna de las terminaciones del fichero1 y además obliga a tener alguna de las categorías indicadas en el fichero2. ✦ <lista1>_<lista2> Elemento compuesto por dos listas negativas enlazadas por un subrayado ‘_’. Su significado es: que la palabra no cumpla ninguna regla de la primera lista y luego, a su vez, no cumpla ninguna de las de la segunda. 97 Capítulo VIII: El Lenguaje de Reglas Gramaticales Dentro de la lista2 no se permiten reglas que impliquen avances de lectura sobre el texto. Si se cumplen las dos a la vez, entonces avanzaremos. Ejemplo de regla : <fichero1>_<fichero2> Contenido fichero1 : +nombre +adjetivo Contenido fichero2 : -ment -ness -tion -ity La regla pide que la palabra no tenga ninguna de las categorías del fichero1 y que además no tenga ninguna de las terminaciones indicadas en la lista segunda. 98 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ *<lista1>_[lista2] Elemento compuesto por dos listas la primera es negativa y la segunda es positiva, enlazadas por un subrayado ‘_’. Su significado es: que la palabra no cumpla ninguna de las reglas de la primera lista y luego a su vez si cumpla alguna de la segunda. Funciona casi igual que su versión sin asterisco, sólo que aquí, sí empezáramos a aplicar la regla en un signo seguido de palabra y, si la regla se cumpliera (en función de lo que hubiera dentro de lista1), el signo desaparece (saltamos el signo) y ya la siguiente regla se aplicaría desde la palabra que había después del signo. Dentro de la lista2 no se permiten reglas que impliquen avances de lectura sobre el texto. Si se cumplen las dos a la vez, entonces avanzaremos. Ejemplo de regla : *<fichero1>_[fichero2] Contenido fichero1 : -ment -ness -tion -ity Contenido fichero2 : +nombre +adjetivo 99 Capítulo VIII: El Lenguaje de Reglas Gramaticales La regla pide que la palabra no tenga ninguna de las terminaciones del fichero1 y además obliga a tener alguna de las categorías indicadas en el fichero2. Si aplicáramos la regla sobre el texto : , the theatre Claramente la secuencia de texto : ‘,the’ cumple la regla, pero al aplicar esta regla la siguiente se empezaría a aplicar en el texto : ‘ the theatre’ (como vemos el signo ha desaparecido). ✦ *<lista1>_<lista2> Elemento compuesto por dos listas negativas enlazadas por un subrayado ‘_’. Su significado es: que la palabra no cumpla ninguna regla de la primera lista y luego a su vez no cumpla ninguna de las de la segunda. Funciona casi igual que su versión sin asterisco, solo que aquí si empezáramos a aplicar la regla en un signo seguido de palabra, si la regla se cumpliera (en función de lo que hubiera dentro de lista1), el signo desaparece (saltamos el signo) y ya la siguiente regla se aplicaría desde la palabra que había después del signo. Dentro de la lista2 no se permiten reglas que impliquen avances de lectura sobre el texto. Si se cumplen las dos a la vez, entonces avanzaremos. 100 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplo de regla : *<fichero1>_<fichero2> Contenido fichero1 : +nombre +adjetivo Contenido fichero2 : -ment -ness -tion -ity La regla pide que la palabra no tenga ninguna de las categorías del fichero1 y que además no tenga ninguna de las terminaciones indicadas en la lista segunda. Si aplicáramos la regla sobre el texto : , the theatre Claramente la secuencia de texto : ‘,the’ cumple la regla pero al aplicar esta regla la siguiente se empezaría a aplicar en el texto : ‘ the theatre’, como vemos el signo ha desaparecido. 101 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ +categoría_[lista] Elemento compuesto por una categoría, que puede ser tanto genérica como concreta (numérica), unida mediante un subrayado ‘_’ con una lista positiva ‘[ ]’. El significado es: que la palabra a comparar tenga la categoría especificada y además cumpla alguna de las reglas de la lista. Como todas las listas de un elemento de regla compuesto, en este caso no están permitidas las reglas que conlleven un avance de lectura en el texto. Ejemplo de reglas : +nombre_[fichero1] +11_[fichero1] Contenido fichero1 : -ment -ness -tion -ity En este caso exigimos que la palabra tenga las categorías exigidas y que además cumpla alguna de las reglas contenidas en fichero1. En fichero1 podríamos tener terminaciones por ejemplo. 102 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ +categoría_<lista> Elemento compuesto por una categoría, que puede ser tanto genérica como concreta (numérica), unida mediante un subrayado ‘_’ con una lista negativa ‘<>’. El significado es: que la palabra a comparar tenga la categoría especificada y además no cumpla ninguna de las reglas de la lista. Como todas las listas de un elemento de regla compuesto, en este caso no están permitidas las reglas que conlleven un avance de lectura en el texto. Ejemplo de reglas : +nombre_<fichero1> +11_<fichero1> Contenido fichero1 : -ment -ness -tion En este caso exigimos que la palabra tenga las categorías exigidas y que además no cumpla ninguna de las reglas contenidas en fichero1. En fichero1 podríamos tener terminaciones por ejemplo. 0 sea, que la palabra tenga la categoría pero que no tenga ninguna de las terminaciones especificadas en la lista. 103 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ !categoría_[lista] Elemento compuesto por una negación de categoría, que puede ser tanto genérica como concreta (numérica), unida mediante un subrayado ‘_’ con una lista positiva ‘[]’. El significado es: que la palabra a comparar no tenga la categoría especificada y además cumpla alguna de las reglas de la lista. Como todas las listas de un elemento de regla compuesto, en este caso no están permitidas las reglas que conlleven un avance de lectura en el texto. Ejemplo de reglas : !nombre_[fichero1] !11_[fichero1] Contenido fichero1 : -ment -ness -tion -ity En este caso exigimos que la palabra no tenga las categorías exigidas y que además cumpla alguna de las reglas contenidas en fichero1. En fichero1 podríamos tener terminaciones por ejemplo. 104 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ !categoría_<lista> Elemento compuesto por una negación de categoría, que puede ser tanto genérica como concreta (numérica), unida mediante un subrayado ‘_’ con una lista negativa ‘<>’. El significado es: que la palabra a comparar no tenga la categoría especificada y además no cumpla ninguna de las reglas de la lista. Como todas las listas de un elemento de regla compuesto, en este caso no están permitidas las reglas que conlleven un avance de lectura en el texto. Ejemplo de reglas : !nombre_<fichero1> !11_<fichero1> Contenido fichero1 : -ment -ness -tion En este caso exigimos que la palabra no tenga las categorías exigidas y que además no cumpla ninguna de las reglas contenidas en fichero1. En fichero1 podríamos tener terminaciones por ejemplo. 0 sea, que la palabra no tenga la categoría pero que no tenga ninguna de las terminaciones especificadas en la lista. 105 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ :[lista1][lista2][lista3] Elemento compuesto por los dos puntos ‘ :’ seguidos de tres lista positivas todo ello sin espacios intermedios. Su significado sería : Avanza en el texto de entrada hasta encontrar alguno de los elementos o reglas de la lista1, que serían las condiciones de parada del avance ; en este proceso de avance , a su vez, vamos comprobando las condiciones o reglas de la lista2 y por cada ocurrencia se incrementará un contador asociado a cada una de las condiciones. Al llegar a alguna condición de parada de la lista1, comprobamos que el número de ocurrencias de las condiciones de la lista2 se corresponden con las especificas en la lista3. En caso afirmativo, el resultado de la regla sería positivo ; si no, aunque hayamos encontrado alguna de las condiciones de parada, al no cumplirse los requerimientos referentes a las condiciones de la lista2, el resultado sería negativo. Es un elemento o regla útil para distinguir diferentes tipos de oraciones, pues podemos leer el texto de punto a punto, comprobado condiciones. Vamos a analizar detenidamente las diferentes partes de este elemento : [lista1] Esta lista contiene la condición o condiciones que buscamos, son las condiciones de parada. Se va avanzando en el texto hasta encontrar una de ellas o, en su defecto, un terminador de frase : ‘.’, ‘ ?’ o ‘ !’. Así, no podremos saltarnos los signos de puntuación que sean terminadores de frase. No podremos aplicar ninguna regla que implique dos oraciones diferentes. Si encontráramos un terminador de frase antes que las 106 Capítulo VIII: El Lenguaje de Reglas Gramaticales condiciones de parada, detenemos el proceso de lectura y el resultado del la regla sería negativo. Hay una condición por línea del fichero. [lista2] Esta lista contiene una serie de condiciones o reglas que se irán comprobando durante el proceso de búsqueda de las condiciones de parada. Existe un número máximo posible de condiciones a comprobar, este número máximo es una constante definida en el programa, sujeta a un posible cambio. En este momento la constante está fijada en 10. En cualquier caso, no hay nada que impida aumentarla. Pero teniendo en cuenta que las condiciones pueden ser a su vez listas : ‘[ ]’ o ‘< >’ ; no tenemos muchas limitaciones para poder comprobar un gran numero de elementos o condiciones. Por cada ocurrencia de cada una de estas condiciones, se va incrementando un contador asociado. Al alcanzar alguna de las condiciones de terminación se compararán estos contadores con los modificadores de la lista3 y, si son compatibles, el resultado sería positivo ; si no, sería negativo. Hay una condición por línea del fichero. Todas las condiciones o reglas irán dadas en positivo, será el modificador numérico quien se encargue de negarlas. [lista3] Esta lista contiene modificadores numéricos de las condiciones de la lista2. Es una lista que va en paralelo con la lista2. Hay un modificador numérico por cada condición de la lista2. Si el número de modificadores fuese diferente al numero de condiciones (reglas) de la lista2, se produciría un error sintáctico. Hay un modificador por línea del fichero. 107 Capítulo VIII: El Lenguaje de Reglas Gramaticales Se ha implementado un sencillo lenguaje para estos modificadores numéricos : 0 La condición de la lista2 correspondiente no puede ocurrir ninguna vez. Así, las condiciones de la lista2 se dan siempre en positivo. número La condición de la lista2 correspondiente ha de ocurrir este número concreto de veces. #número La condición de la lista2 correspondiente ha de ocurrir ‘al menos’ este número de veces. ?número La condición de la lista2 correspondiente ha de ocurrir como máximo este número de veces. Puede no ocurrir ninguna vez. 108 Capítulo VIII: El Lenguaje de Reglas Gramaticales ¿número La condición de la lista2 correspondiente ha de ocurrir como máximo este número de veces, pero al menos una vez. Aquí no incluimos el cero. Ejemplo de regla : :[fichero1][fichero2][fichero3] Contenido fichero1 : &.+ Contenido fichero2 : [conjunciones] Contenido fichero3 : 0 Contenido conjunciones : Todas las conjunciones coordinantes. 109 Capítulo VIII: El Lenguaje de Reglas Gramaticales Esta regla va leyendo buscado terminadores de frase, o sea, de punto a punto, luego leemos por oraciones. En este proceso de lectura vamos a ir comprobando todas las palabras que vayamos leyendo y comprobando si están en el fichero2. Este fichero2 contiene las condiciones a comprobar (en este caso sólo una condición, una lista [conjunciones],otro fichero, que contiene las conjunciones coordinantes). Al final, para que el resultado de la regla sea positivo, tenemos que comprobar que el número de ocurrencias de la condición coincide con las indicadas por el modificador. En este caso, el modificador es ‘0’, luego estamos pidiendo que no haya ninguna conjunción de punto a punto. En esta regla nos encontramos con una situación curiosa : al dar la posibilidad de ir avanzando de oración en oración, aunque el resultado sea negativo, no debemos de retroceder en el flujo de lectura y empezar a aplicarla de nuevo desde la palabra siguiente, pues si lo hiciéramos así, llegaría un momento en el que la oración siempre cumpliría la regla aplicada. Volviendo al ejemplo de regla anterior de las conjunciones coordinantes, si aplicásemos la regla al texto : “I wrote the paper and read the article. Claramente, si vamos avanzando de palabra en palabra llegará un momento en el que lleguemos al punto terminador de regla sin haber encontrado una conjunción coordinante en medio, y así, con todas las frases. Por lo tanto, esta regla será necesario que vaya sola en el fichero de reglas. Ya que no permite la aplicación de otras reglas, que se apliquen a una 110 Capítulo VIII: El Lenguaje de Reglas Gramaticales palabra, sobre el trozo de texto en el que ella ha avanzado. Si queremos aplicarla junto a otras reglas que se apliquen a una palabra, o junto a otras reglas del mismo tipo, tendríamos que poder retroceder en el flujo de lectura ; esto se consigue mediante una modificación de la regla. Otra peculiaridad de la regla es que no se permite el anidamiento dentro de una regla del mismo tipo. No permitimos una instrucción :[lista4][lista5][lista6] dentro de otra instrucción similar :[lista1][lista2][lista3]. ✦ *[lista1][lista2][lista3] Modificación de la regla anterior que en el caso de resultado negativo sí que retrocedería en el flujo de entrada. El funcionamiento es idéntico excepto en lo referente al retroceso en caso de resultado negativo de la regla. Este retroceso nos permitirá juntar esta regla, en el mismo fichero, con más reglas del mismo tipo ; por ejemplo, para buscar distintos modelos de un mismo tipo de frase. También sería posible mezclar esta regla con otras reglas de otro tipo, que implique una lectura palabra a palabra, pero esto no es conveniente. No es conveniente porque todas las palabras leídas desde el principio de la aplicación de *[lista1][lista2][lista3] hasta que se encuentran alguno de los terminadores de ‘[lista1]’, quedan fuera del ámbito de las reglas más simples. Si queremos aplicar alguna regla más simple en este proceso de lectura de oración en oración, esta regla de palabra en palabra debe ser introducida dentro de ‘[lista2]’, como parte de elemento a contabilizar dentro de la regla compleja ‘*[lista1][lista2][lista3]’. Si no lo hacemos así estamos expuestos a tener unos resultados erróneos. 111 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplo de fichero con reglas de este tipo : *[lista1][lista2][lista3] *[lista4][lista5][lista6] *[lista7][lista8][lista9] Así, cuando alguna de las reglas sea errónea se retrocede en el flujo de entrada y volvemos a aplicar desde el mismo punto del texto las siguientes. Pero la configuración anterior entraría en un bucle. Supongamos que no se cumple ninguna de las reglas, en este caso, al aplicar la última retrocedemos y volveríamos a aplicar la primera desde el mismo lugar del texto y así indefinidamente. Por lo tanto una configuración correcta del fichero sería : *[lista1][lista2][lista3] *[lista4][lista5][lista6] [lista7][lista8][lista9] Así, en el caso en que la última fuera errónea no se retrocedería en el flujo. Y se podría empezar a aplicar la primera regla desde un punto diferente del texto. Aquí tampoco se permite el anidamiento dentro de una regla del mismo tipo. No permitimos una *:[lista4][lista5][lista6] dentro de otra *:[lista1][lista2][lista3] o de :[lista1][lista2][lista3]. 112 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ . El punto es en realidad, más que una regla un modificador de regla, puede ir delante de otra regla alterando su funcionamiento. Su significado es : avanza en el texto hasta encontrar la regla modificada, en caso de que sea una regla positiva ; ó avanza hasta el siguiente signo de puntuación cumpliéndose siempre una regla en el caso de que sea negativa (o avanza hasta el siguiente signo de puntuación sin encontrar lo que indique la regla negativa) . El supone una avance en el fichero de texto de entrada desde donde empezamos a aplicarla hasta el siguiente signo de puntuación ,queda claro que las reglas que empiecen por ‘.’ no van a saltarse los signos de puntuación. Y son indiferentes al signo de puntuación que sea. Tal y como hemos dicho hay dos casos : REGLA POSTIVA Encuentra la regla especificada antes de llegar al siguiente signo de puntuación. Avanzamos leyendo hasta encontrar la regla pedida, siendo en este caso el resultado positivo y quedándonos en la última palabra que cumple la regla ; en cambio , si encontrásemos antes un signo de puntuación, el resultado sería negativo y retrocederíamos hasta donde hemos empezado a leer. REGLA NEGATIVA Avanza en leyendo en el fichero hasta el siguiente signo de puntuación sin encontrar lo especificado en la regla negativa o expresado de otro modo : avanza hasta el siguiente signo de puntuación 113 Capítulo VIII: El Lenguaje de Reglas Gramaticales cumpliendo todas las palabras la regla negativa, si llegamos a una palabra que no cumpliera la regla negativa retrocederíamos hasta donde hemos empezado a leer y el resultado sería negativo. Si hemos llegado al punto, nos quedamos en él y el resultado sería positivo. Ejemplo1 : .+adjetivo +nombre Esta regla avanza en texto de entrada buscando un adjetivo y si lo encontrase antes de un signo de puntuación comprueba que la palabra siguiente sea un nombre. Ejemplo2 : . !adjetivo Aquí avanzamos hasta el siguiente signo de puntuación y para que el resultado sea positivo no debemos encontrar ninguna palabra que pudiera ser adjetivo antes de llegar a él. Las combinaciones permitidas son : .palabra .-terminación .@palabra .-terminación-[lista] 114 Capítulo VIII: El Lenguaje de Reglas Gramaticales .-terminacion-<lista> .!nºcategoría_[lista] .# terminación .!nºcategoría-<lista> .# terminación_[lista] .[lista] .# terminación_<lista> .[lista1]_[lista2] . ?palabra .[lista1]_<lista2> .¿palabra .<lista> .+categoría .*<lista> .+categoría_[lista] .<lista1>_[lista2] .+categoría_<lista> .<lista1>_<lista2> .+categoría_nºcategoría .*<lista1>_[lista2] .+nºcategoría .*<lista1>_<lista2> .+nºcategoría_[lista] .&.+ .+nºcategoría-<lista> .&.- .!categoría .&signo (distinto del punto) .!categoría_[lista] -$.+ .!categoría_<lista> .$.- .!nºcategoría .$signo (distinto del punto) Tan solo comentar el significado de : .&signo Avanza hasta el siguiente signo de puntuación y que éste sea igual al especificado. .$signo Avanza hasta el siguiente signo de puntuación y que éste sea diferente al especificado. 115 Capítulo VIII: El Lenguaje de Reglas Gramaticales En cualquier caso, un elemento de regla que vaya precedido de un punto, puede ir seguido de cualquier otro elemento de regla, inclusive otro elemento precedido de punto. ✦ = Este al igual que en el caso anterior de ‘.’, más que un nuevo elemento de regla ‘=’ es un modificador de los ya existentes. Su significado es : no importa que al aplicar la regla delante de la palabra que tenemos del texto haya algún signo de puntuación. O sea, en este caso con un ‘=’ delante del elemento de regla venimos a decir que nos es indiferente que haya o que no haya algún signo de puntuación delante de la palabra sobre la que empezamos a aplicar la regla. Ejemplo : =the En este ejemplo buscamos la palabra ‘the’ sin importarnos que delante pueda haber un punto, una coma o cualquier otro signo de puntuación. Las combinaciones permitidas son : =palabra =-terminación-[lista] =@palabra =-terminacion-<lista> =-terminación =#terminación 116 Capítulo VIII: El Lenguaje de Reglas Gramaticales =# terminación_[lista] =$signo (distinto =# terminación_<lista> del punto) = ?palabra = :[lista1][lista2][lista3] =¿palabra =*[lista1][lista2][lista3] =+categoría =.palabra =+categoría_[lista] =.@palabra =+categoría_<lista> =.-terminación =+categoría_nºcategoría =.-terminación-[lista] =+nºcategoría =.-terminacion-<lista> =+nºcategoría_[lista] =.#terminación =+nºcategoría-<lista> =.#terminación_[lista] =!categoría =.#terminación_<lista> =!categoría_[lista] =. ?palabra =!categoría_<lista> =.¿palabra =!nºcategoría =.+categoría =!nºcategoría_[lista] =.+categoría_[lista] =!nºcategoría-<lista> =.+categoría_<lista> =[lista] =.+categoría_nºcategoría =[lista1]_[lista2] =.+nºcategoría =[lista1]_<lista2> =.+nºcategoría_[lista] =<lista> =.+nºcategoría-<lista> =*<lista> =.!categoría =<lista1>_[lista2] =.!categoría_[lista] =<lista1>_<lista2> =.!categoría_<lista> =*<lista1>_[lista2] =.!nºcategoría =*<lista1>_<lista2> =.!nºcategoría_[lista] =&.+ =.!nºcategoría-<lista> =&.- =.[lista] =&signo (distinto =.[lista1]_[lista2] del punto) =.[lista1]_<lista2> =$.+ =.<lista> =$.- =.*<lista> 117 Capítulo VIII: El Lenguaje de Reglas Gramaticales =.<lista1>_[lista2] =.&signo (distinto =.<lista1>_<lista2> del punto) =.*<lista1>_[lista2] =.$.+ =.*<lista1>_<lista2> =.$.- =.&.+ =.$signo (distinto =.&.- del punto) Si colocamos el ‘=’ delante de ‘.’, indica que da igual que haya un signo delante de la palabra de comienzo de aplicación de la regla .elemento_regla : nosotros vamos a avanzar hasta el siguiente. ✦ % Éste al igual que en el caso anterior de ‘=’, más que un nuevo elemento de regla ‘%’ es un modificador de los ya existentes. Su significado es : no importa que al aplicar la regla delante de la palabra que tenemos del texto haya algún signo de puntuación, siempre que este signo no sea un terminador de frase : ‘.’,’ ?’, ‘!’. O sea, en este caso con un ‘%’ delante del elemento de regla venimos a decir que nos es indiferente que haya o que no haya algún signo de puntuación delante de la palabra sobre la que empezamos a aplicar la regla, siempre que ese signo no sea un terminador de frase. 118 Capítulo VIII: El Lenguaje de Reglas Gramaticales Ejemplo : %the En este ejemplo buscamos la palabra ‘the’ sin importarnos que delante pueda haber cualquier signo de puntuación que no sea terminador de frase. Las combinaciones permitidas son: %palabra %+nºcategoría_[lista] %@palabra %+nºcategoría-<lista> %-terminación %!categoría %-terminación-[lista] %!categoría_[lista] %-terminacion-<lista> %!categoría_<lista> %# terminación %!nºcategoría %# terminación_[lista] %!nºcategoría_[lista] %# terminación_<lista> %!nºcategoría-<lista> % ?palabra %[lista] %¿palabra %[lista1]_[lista2] %+categoría %[lista1]_<lista2> %+categoría_[lista] %<lista> %+categoría_<lista> %*<lista> %+categoría_nºcategoría %<lista1>_[lista2] %+nºcategoría %<lista1>_<lista2> 119 Capítulo VIII: El Lenguaje de Reglas Gramaticales %*<lista1>_[lista2] %.+nºcategoría %*<lista1>_<lista2> %.+nºcategoría_[lista] %&.+ %.+nºcategoría-<lista> %&.- %.!categoría %&signo (distinto %.!categoría_[lista] del punto) %.!categoría_<lista> %$.+ %.!nºcategoría %$.- %.!nºcategoría_[lista] %$signo (distinto %.!nºcategoría-<lista> del punto) %.[lista] % :[lista1][lista2][lista3] %.[lista1]_[lista2] %*[lista1][lista2][lista3] %.[lista1]_<lista2> %.palabra %.<lista> %.@palabra %.*<lista> %.-terminación %.<lista1>_[lista2] %.-terminación-[lista] %.<lista1>_<lista2> %.-terminacion-<lista> %.*<lista1>_[lista2] %.# terminación %.*<lista1>_<lista2> %.# terminación_[lista] %.&.+ %.# terminación_<lista> %.&.- %. ?palabra %.&signo (distinto %.¿palabra del punto) %.+categoría %.$.+ %.+categoría_[lista] %.$.- %.+categoría_<lista> %.$signo (distinto %.+categoría_nºcategoría del punto) Si colocamos el ‘%’ delante de ‘.’ indica que da igual que haya un signo, distinto del terminador de frase delante de la palabra de comienzo de aplicación de la regla ‘.’elemento_regla : nosotros vamos a avanzar hasta el siguiente. 120 Capítulo VIII: El Lenguaje de Reglas Gramaticales ✦ | Es un modificador de elementos de regla. Indica que la regla que viene después se comprobará en el texto y, tanto si es cierta como si no, retrocedemos en el flujo de lectura y la siguiente regla comienza en el mismo punto en el que hemos comenzado a aplicar este elemento con modificador ‘|’elemento_regla. Dicho de otro modo sería : “mira que lo que haya delante se corresponda con la regla, pero solo quiero que mires no que se avance en la lectura del fichero”. Ejemplo : [determinantes] +adjetivo +adjetivo +adjetivo |+nombre En este ejemplo buscamos que la primera palabra este en una lista de determinantes, que luego haya tres adjetivos en cadena y miramos que después del último haya un nombre. Si el resultado de la regla fuera positivo, la siguiente regla se empezaría a aplicar desde el nombre mirado. Así después de esta regla podríamos tener otra que fuera : ’ +nombre +verbo’ por ejemplo. Las combinaciones permitidas serian : |palabra |-terminación |@palabra |-terminación-[lista] 121 Capítulo VIII: El Lenguaje de Reglas Gramaticales |-terminacion-<lista> |$.+ |# terminación |$.- |# terminación_[lista] |$signo (distinto |# terminación_<lista> del punto) | ?palabra | :[lista1][lista2][lista3] |¿palabra |*[lista1][lista2][lista3] |+categoría |.palabra |+categoría_[lista] |.@palabra |+categoría_<lista> |.-terminación |+categoría_nºcategoría |.-terminación-[lista] |+nºcategoría |.-terminacion-<lista> |+nºcategoría_[lista] |.#terminación |+nºcategoría-<lista> |.#terminación_[lista] |!categoría |.#terminación_<lista> |!categoría_[lista] |. ?palabra |!categoría_<lista> |.¿palabra |!nºcategoría |.+categoría |!nºcategoría_[lista] |.+categoría_[lista] |!nºcategoría-<lista> |.+categoría_<lista> |[lista] |.+categoría_nºcategoría |[lista1]_[lista2] |.+nºcategoría |[lista1]_<lista2> |.+nºcategoría_[lista] |<lista> |.+nºcategoría-<lista> |*<lista> |.!categoría |<lista1>_[lista2] |.!categoría_[lista] |<lista1>_<lista2> |.!categoría_<lista> |*<lista1>_[lista2] |.!nºcategoría |*<lista1>_<lista2> |.!nºcategoría_[lista] |&.+ |.!nºcategoría-<lista> |&.- |.[lista] |&signo (distinto |.[lista1]_[lista2] del punto) |.[lista1]_<lista2> 122 Capítulo VIII: El Lenguaje de Reglas Gramaticales |.<lista> |=!categoría_[lista] |.*<lista> |=!categoría_<lista> |.<lista1>_[lista2] |=!nºcategoría |.<lista1>_<lista2> |=!nºcategoría_[lista] |.*<lista1>_[lista2] |=!nºcategoría-<lista> |.*<lista1>_<lista2> |=[lista] |.&.+ |=[lista1]_[lista2] |.&.- |=[lista1]_<lista2> |.&signo (distinto |=<lista> del punto) |=*<lista> |.$.+ |=<lista1>_[lista2] |.$.- |=<lista1>_<lista2> |.$signo (distinto |=*<lista1>_[lista2] del punto) |=*<lista1>_<lista2> |=palabra |=&.+ |=@palabra |=&.- |=-terminación |=&signo (distinto |=-terminación-[lista] del punto) |=-terminacion-<lista> |=$.+ |=# terminación |=$.- |=# terminación_[lista] |=$signo (distinto |=# terminación_<lista> del punto) |= ?palabra |= :[lista1][lista2][lista3] |=¿palabra |=*[lista1][lista2][lista3] |=+categoría |=.palabra |=+categoría_[lista] |=.@palabra |=+categoría_<lista> |=.-terminación |=+categoría_nºcategoría |=.-terminación-[lista] |=+nºcategoría |=.-terminacion-<lista> |=+nºcategoría_[lista] |=.#terminación |=+nºcategoría-<lista> |=.#terminación_[lista] |=!categoría |=.#terminación_<lista> 123 Capítulo VIII: El Lenguaje de Reglas Gramaticales |=. ?palabra |%palabra |=.¿palabra |%@palabra |=.+categoría |%-terminación |=.+categoría_[lista] |%-terminación-[lista] |=.+categoría_<lista> |%-terminacion-<lista> |=.+categoría_nºcategoría |%#terminación |=.+nºcategoría |%#terminación_[lista] |=.+nºcategoría_[lista] |%#terminación_<lista> |=.+nºcategoría-<lista> |% ?palabra |=.!categoría |%¿palabra |=.!categoría_[lista] |%+categoría |=.!categoría_<lista> |%+categoría_[lista] |=.!nºcategoría |%+categoría_<lista> |=.!nºcategoría_[lista] |%+categoría_nºcategoría |=.!nºcategoría-<lista> |%+nºcategoría |=.[lista] |%+nºcategoría_[lista] |=.[lista1]_[lista2] |%+nºcategoría-<lista> |=.[lista1]_<lista2> |%!categoría |=.<lista> |%!categoría_[lista] |=.*<lista> |%!categoría_<lista> |=.<lista1>_[lista2] |%!nºcategoría |=.<lista1>_<lista2> |%!nºcategoría_[lista] |=.*<lista1>_[lista2] |%!nºcategoría-<lista> |=.*<lista1>_<lista2> |%[lista] |=.&.+ |%[lista1]_[lista2] |=.&.- |%[lista1]_<lista2> |=.&signo (distinto |%<lista> del punto) |%*<lista> |=.$.+ |%<lista1>_[lista2] |=.$.- |%<lista1>_<lista2> |=.$signo (distinto |%*<lista1>_[lista2] del punto |%*<lista1>_<lista2> 124 Capítulo VIII: El Lenguaje de Reglas Gramaticales |%&.+ |%.+nºcategoría_[lista] |%&.- |%.+nºcategoría-<lista> |%&signo (distinto |%.!categoría del punto) |%.!categoría_[lista] |%$.+ |%.!categoría_<lista> |%$.- |%.!nºcategoría |%$signo (distinto |%.!nºcategoría_[lista] del punto) |%.!nºcategoría-<lista> |% :[lista1][lista2][lista3] |%.[lista] |%*[lista1][lista2][lista3] |%.[lista1]_[lista2] |%.palabra |%.[lista1]_<lista2> |%.@palabra |%.<lista> |%.-terminación |%.*<lista> |%.-terminación-[lista] |%.<lista1>_[lista2] |%.-terminacion-<lista> |%.<lista1>_<lista2> |%.# terminación |%.*<lista1>_[lista2] |%.# terminación_[lista] |%.*<lista1>_<lista2> |%.# terminación_<lista> |%.&.+ |%. ?palabra |%.&.- |%.¿palabra |%.&signo (distinto |%.+categoría del punto) |%.+categoría_[lista] |%.$.+ |%.+categoría_<lista> |%.$.- |%.+categoría_nºcategoría |%.$signo (distinto |%.+nºcategoría del punto) 8.1.1 Comentarios sobre las reglas contenidas por las listas que van precedidas de subrayado : ‘_[lista]’ y ‘_<lista>’ Como ya dijimos, en la explicación de las diferentes reglas, los ficheros de listas precedidas de subrayado solo pueden contener reglas 125 Capítulo VIII: El Lenguaje de Reglas Gramaticales que no impliquen avance de lectura en el texto, pues su función es comprobar algo sobre una palabra que ya ha cumplido la primera parte de la regla. Así, a parte de reglas que impliquen avances de lectura, tampoco tienen sentido reglas relacionadas con signos de puntuación. Y, en cualquier caso, las posibles listas que puedan contener en sus sucesivos anidamientos tendrán que tener las mismas restricciones. Las combinaciones permitidas van a ser : palabra +nºcategoría_[lista] @palabra +nºcategoría-<lista> -terminación !categoría -terminación-[lista] !categoría_[lista] -terminacion-<lista> !categoría_<lista> # terminación !nºcategoría # terminación_[lista] !nºcategoría_[lista] # terminación_<lista> !nºcategoría-<lista> ?palabra [lista] ¿palabra [lista1]_[lista2] +categoría [lista1]_<lista2> +categoría_[lista] <lista> +categoría_<lista> <lista1>_[lista2] +categoría_nºcategoría <lista1>_<lista2> +nºcategoría En el supuesto de que dentro de estas listas tuviéramos una regla como : ‘the +nombre +verbo’, donde, por sí solos, los elementos de la regla no implican avance, pero juntos suponen un avance de tres palabras, sólo procesaríamos el primer elemento de la regla. Por lo tanto, hay que tener cuidado con lo que se escribe dentro de estas listas. 126 Capítulo VIII: El Lenguaje de Reglas Gramaticales 8.2 Comentarios sobre el análisis de una palabra precedida de signo de puntuación . Al intentar aplicar cualquier regla a una palabra precedida de signo de puntuación, en principio, el resultado será negativo. Excepto en aquellas reglas que procesan signo. Las combinaciones que procesan signo son : [lista] .[lista1]_<lista2> [lista1]_[lista2] .<lista> [lista1]_<lista2> .*<lista> <lista> .<lista1>_[lista2] *<lista> .<lista1>_<lista2> <lista1>_[lista2] .*<lista1>_[lista2] <lista1>_<lista2> .*<lista1>_<lista2> *<lista1>_[lista2] .&.+ *<lista1>_<lista2> .&.- &.+ .&signo(distintodel punto) &.- .$.+ &signo (distinto del punto) .$.- $.+ .$signo (distinto del punto) $.$signo (distinto del punto) =REGLA :[lista1][lista2][lista3] *:[lista1][lista2][lista3] %REGLA .[lista] | REGLA QUE PROCESE .[lista1]_[lista2] SIGNOS 127 Capítulo VIII: El Lenguaje de Reglas Gramaticales 8.3 Resumen de las posibles combinaciones de los modificadores de reglas : ‘.’, ’=’, ’%’, ’ *’ y ‘|’. ✦ . Este símbolo puede llevar detrás cualquier cosa excepto : ‘=’, ’%’, ’|’, ’*’, ’ :’, y a si mismo ‘.’. ✦ = Este símbolo puede llevar detrás cualquier cosa excepto : ’%’, ’|’, y a si mismo ‘=’. ✦ % Este símbolo puede llevar detrás cualquier cosa excepto : ’=’, ’|’, 128 Capítulo VIII: El Lenguaje de Reglas Gramaticales y a si mismo ‘%’. ✦ | Este símbolo puede llevar detrás cualquier cosa excepto : a si mismo ‘ |’. ✦ * Este símbolo solo puede llevar detrás : ’<’, ’:’ ✦ Cualquier símbolo. En cualquier caso, ningún símbolo podrá llevar detrás a sí mismo. 8.4 Conclusiones. Como vemos los ficheros de reglas son totalmente flexibles y configurables por el usuario, siendo fácil cambiarlos. Queda abierto todo un campo de investigación en la mejora de las reglas gramaticales. 129 Capítulo VIII: El Lenguaje de Reglas Gramaticales 8.5 Ejemplo de fichero de reglas. "VOZ PASIVA" =@there [vbe] -ed |<v5-0> =@there [vbe] +53 |<v5-0> =@there [vbe] +52 |<v5-0> =@there [vbe] [adverbio] -ed |<v5-0> =@there [vbe] [adverbio] +53 |<v5-0> =@there [vbe] [adverbio] +52 |<v5-0> and -ed |<v5-0> and +53 |<v5-0> "vbe= verbo to be en todos sus tiempos, en activa y pasiva, en afirmativa" "y negativa" "v5-0 = elementos que no pueden ir detrás de un participio en pasiva" "porque presentan ambigüedad: +nombre +verbo y [adj-cad] +nombre +verbo" "adverbio = +adverbio y -ly" 130