6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf ·...

49
Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este capítulo, como ya se dijo en el anterior, se va a encargar de explicar lo más detalladamente posible, la nueva funcionalidad que se le ha dado al analizador del que hemos partido y el cual ha sido desarrollado de forma general, en el capítulo anterior. 6.1 PLANTEAMIENTO Dado que nuestro principal objetivo de este estudio, es conseguir obtener un corpus segmentado a partir de uno categorizado que facilite a la máquina la labor de leer un texto cualquiera de la forma más natural posible, el proceso de análisis que plantearemos no será el mismo que el que realizaba el analizador "sintax" original. El nuevo proceso, necesitará de nuevas funciones y nuevos archivos que nos permitan conseguir los objetivos que se propusieron, cuando se comenzó a evaluar el sistema de análisis que nos ocupa, los cuales han sido reflejados en el capítulo de introducción. En los siguientes apartados, se intentará explicar todas y cada una de las nuevas funcionalidades que se han incorporado al analizador, así como los nuevos ficheros que se han creado para lograr alcanzar las metas que ya han sido expuestas, de la manera más rápida y sencilla posible, es decir, que a la hora de desarrollar las nuevas funciones, se han tenido en cuenta factores como ocupación de memoria, rapidez de ejecución... El esquema que se va a seguir, en la descripción de ficheros y funciones, va a ser la siguiente: 1. Descripción de los archivos que se tienen antes de iniciar el proceso de análisis. Son aquellos que podemos denominar archivos fuentes, es decir, de donde a lo largo de la ejecución del programa, sacaremos los datos necesarios para el correcto discurrir del mismo. 2. Descripción de las nuevas funciones incorporadas al sistema de análisis, las cuales tratarán sintagmáticamente el texto de entrada. Se explicarán en orden de ejecución de las mismas. 3. En un tercer grupo, se describirán aquellos ficheros que nos servirán de puente entre los resultados obtenidos por el análisis sintagmático, y los que se conseguirán una vez se haya realizado el análisis sintáctico total. 4. Descripción del nuevo proceso para el análisis sintáctico de alto nivel (nivel de sintagmas) introducido en el analizador.

Transcript of 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf ·...

Page 1: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 79

6. ANALIZADOR

SINTAGMÁTICO

Este capítulo, como ya se dijo en el anterior, se va a encargar de explicar lo másdetalladamente posible, la nueva funcionalidad que se le ha dado al analizador del quehemos partido y el cual ha sido desarrollado de forma general, en el capítulo anterior.

6.1 PLANTEAMIENTO

Dado que nuestro principal objetivo de este estudio, es conseguir obtener uncorpus segmentado a partir de uno categorizado que facilite a la máquina la labor de leerun texto cualquiera de la forma más natural posible, el proceso de análisis queplantearemos no será el mismo que el que realizaba el analizador "sintax" original. Elnuevo proceso, necesitará de nuevas funciones y nuevos archivos que nos permitanconseguir los objetivos que se propusieron, cuando se comenzó a evaluar el sistema deanálisis que nos ocupa, los cuales han sido reflejados en el capítulo de introducción.

En los siguientes apartados, se intentará explicar todas y cada una de las nuevasfuncionalidades que se han incorporado al analizador, así como los nuevos ficheros quese han creado para lograr alcanzar las metas que ya han sido expuestas, de la maneramás rápida y sencilla posible, es decir, que a la hora de desarrollar las nuevas funciones,se han tenido en cuenta factores como ocupación de memoria, rapidez de ejecución...

El esquema que se va a seguir, en la descripción de ficheros y funciones, va a serla siguiente:

1. Descripción de los archivos que se tienen antes de iniciar el proceso de análisis.Son aquellos que podemos denominar archivos fuentes, es decir, de donde a lolargo de la ejecución del programa, sacaremos los datos necesarios para elcorrecto discurrir del mismo.

2. Descripción de las nuevas funciones incorporadas al sistema de análisis, lascuales tratarán sintagmáticamente el texto de entrada. Se explicarán en orden deejecución de las mismas.

3. En un tercer grupo, se describirán aquellos ficheros que nos servirán de puenteentre los resultados obtenidos por el análisis sintagmático, y los que seconseguirán una vez se haya realizado el análisis sintáctico total.

4. Descripción del nuevo proceso para el análisis sintáctico de alto nivel (nivel desintagmas) introducido en el analizador.

Page 2: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 80

5. En este grupo, se explicarán aquellos procedimientos que extraerán información,que se ha considerado provechosa, a partir de lo conseguido por los procesosanteriores de análisis.

6. Descripción de los ficheros donde se almacenarán todos aquellos resultados quese hayan conseguido y que se consideren de importancia suficiente para sermostrados al usuario.

7. Por último, describiremos una serie de ficheros que usaremos antes y después dela ejecución del programa. A ellos nos referiremos como ficheros de preprocesoy de posproceso. Su misión fundamental será: para los de preproceso, eliminarpequeños errores de los ficheros de entrada del analizador; y para los deposproceso, transformar los archivos de salida, en otros con un formato másóptimo para su posterior estudio.

Haciendo la descripción de este modo, a la hora de explicar un archivo ofunción, el lector tendrá conocimiento de toda la información que sea necesario saberpara el buen entendimiento de lo que se esté describiendo en cada momento. De otraforma, cuando expliquemos cómo se ha llegado a los resultados del fichero que estásiendo descrito, tendremos que hacer referencia muy probablemente, a funciones yarchivos que aún no habrán sido expuestos y los cuales, por tanto, desconoceremostotalmente.

Aún así, no se podrá evitar en ciertas ocasiones, hacer referencia a temas que aesa altura de la descripción no se conozcan todavía.

Por tanto, a los ficheros descritos en el capítulo anterior, los cuales se siguenusando de la misma manera y con la misma funcionalidad que ya tenían, ha sidonecesario sumarles algunos más. Los vamos a englobar en tres grupos para llevar a cabola descripción, del modo citado anteriormente. Los grupos y los ficheros dentro de cadagrupo, serán los siguientes:

1. Ficheros fuente:• arbolSint.INI• ReglasCorte.TER• NombreGramatica.860• NombreTexto.APS• sintagmas.TXT• PalabrasEspeciales.TXT• TerminalesEspeciales.TXT

2. Ficheros intermedios:

Los dividiremos en dos subclases: aquellos que se necesitarán en el transcursodel análisis sintagmático, y los que serán necesarios en el desarrollo del análisisde alto nivel:

• Análisis sintagmático:• arbol_minimo.ETQ• minimizado.ETQ• NombreTexto.FNL

Page 3: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 81

• Análisis de alto nivel:• Res_Analisis.RES• Categorias.CAT• Minimizado_Buenas.CRG• minimizado.CRG• arbol_minimoCRG.ETQ• minimizado.FNL

3. Ficheros resultado:• minimizadoCRG.ETQ• minimizado.ERR• TextoRecategorizado.APS• resultado.TXT• segmento.TXT• NombreTexto.AMB y minimizado.AMB• NombreTexto.EST

4. Ficheros de preproceso:• Propios.BAT

• Propios.PER

5. Ficheros de posproceso:• Etq_min.BAT

• Etq_min.PER• Filtra.PER

El fichero con extensión .APS, será aquel de donde sacaremos el textocategorizado. El acceso a todos y cada uno de los ficheros fuente y resultado, se hará enmodo texto.

Por último, señalar también, que los ficheros de preproceso y posproceso,estarán escritos en el lenguaje “PERL” por ser una herramienta sencilla de manejo deficheros.

Una vez enumerados los nuevos ficheros que se han incorporado, y después dehaber expuesto las aclaraciones que hemos considerado necesarias, vamos a pasar adescribir cada uno de ellos.

6.2 FICHEROS FUENTE

En este apartado, se describirán aquellos ficheros que tienen la información quelas diferentes funciones irán pidiendo a lo largo del proceso de análisis sintagmático ydel proceso de análisis de alto nivel. Sin esa información, no se llegaría o se llegaríaincorrectamente a algunos de los resultados que se ofrecerán al final del mencionadoanálisis.

Page 4: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 82

6.2.1 arbolSint.INI

Este archivo, nos permitirá disponer de ciertos valores necesarios en cualquierade las partes del programa. Archivos con esta extensión, harán posible la inicializaciónde variables sin realizar cambios en el programa original.

La estructura de este archivo y de cualquiera con extensión .INI para que sealeído de forma correcta, se expone en el cuadro 6.1.

Los valores que aparecen en el cuadro de 'M' y 'N' pueden ser cualquiera y,evidentemente, no tienen por qué coincidir, aunque por supuesto pueden ser iguales. Elnombre que identifica a cada valor, puede coincidir siempre que no se encuentren en lamisma sección del fichero, ya que cuando se piden valores desde el programa al archivo.INI, se especificará la sección, y el nombre de la variable dentro de esa sección, por loque si hay dos variables con el mismo nombre dentro de una misma sección, la funciónque los reclama, no sabrá cuál elegir, y nos dará un error.

Este error no será muy importante, ya que en las llamadas a esta clase dearchivos para demandar algún valor, se pasará un valor por defecto que se escogerá sihubo algún problema en la obtención del primero. Es por esto, que cuando esta clase dellamadas produce algún error, hemos optado por mostrar por pantalla un mensaje deaviso (warningPrintf) y no de error (errorPrintf) ya que, aunque no hayamos dado a lavariable correspondiente el valor correcto que queríamos que tuviera, sí le hemos dadouno aproximado con el cual se puede seguir con el desarrollo del análisis.

En el cuadro 6.2, se muestra una parte del archivo arbolSint.INI que utilizamos.

Cuadro 6.1. Estructura de los ficheros con extensión .INI.

[sección1]

NombreVariable1 = Valor1NombreVariable2 = Valor2...NombreVariableN = ValorN

[sección2]

NombreVariable1 = Valor1...NombreVariableN = ValorN

[...]

[secciónM]

NombreVariable1 = Valor1...NombreVariableN = ValorN

Page 5: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 83

6.2.2 ReglasCorte.TER

Para la obtención de un corpus segmentado, uno de los procesos que se va arealizar, será el de la división de cada frase en una serie de fragmentos los cuales seanalizarán por separado (Montero[99]).

Esta división no se puede realizar de una forma sistemática (por ejemplo, quecorte la frase cada cierto número de palabras), ya que dejaremos partidas una serie deconstrucciones como verbos compuestos, sintagmas tanto nominales comopreposicionales que deben ser analizados como conjunto. Por ejemplo, si para dividiruna frase tan simple como: "La casa no se va a vender"; utilizamos un sistema dedivisión, que corte la frase cada tres palabras, analizaremos los tres fragmentossiguientes:

La casa no | se va a | vender

Tendremos por tanto:

Primer fragmento:Sintagma Nominal = La casaSintagma Adverbial = no

Segundo fragmento:Sintagma Verbal = se vay una preposición suelta, que no formará ninguna clase de sintagma.

Tercer fragmento:Sintagma Verbal Infinitivo = vender

Cuadro 6.2. Extracto del archivo arbolSint.INI.

[constantes]

MaximaLongitud = 300MaximoNivel = 400...MaxPalabrasLineaETQ = 5MaxNumTerminales = 10

[paths]

PathEstadisticas = D:\Usuarios\daniel\estadisticas\

[ficheros]

MaxLongNombre = 25MaxLongNombreCompleto = 30

Page 6: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 84

Por tanto el análisis de esta frase producirá un error en el segundo fragmento, yse nos comunicará que tenemos una frase "imposible" de analizar, cuando lo querealmente tenemos es un texto con un análisis sintáctico facilísimo. Entonces, nosplanteamos cómo es posible que nuestro analizador automático, con una gramáticabastante robusta y un algoritmo de reconocimiento del castellano sin fisurasaparentemente, no ha sido capaz de reconocer una frase tan sencilla como la tratada.

En esta frase particular, se debería haber analizado la construcción verbal "no seva" en el mismo fragmento. Lo mismo pasa con el sintagma preposicional de infinitivo"a vender". De aquí, se deducen una serie de reglas de corte:

• No se debe cortar por un pronombre objeto (se), cuando lleva delante unadverbio de negación (no).

• No hay que dejar una preposición como última partícula de un fragmento.

Evidentemente, el fallo está en el sencillísimo, a la vez que poco efectivoalgoritmo de corte que hemos usado. Es por situaciones como esta, por lo que esnecesario usar un sistema de corte basado en una serie de reglas que nos aportará elfichero ReglasCorte.TER, el cual tendrá un grado de complejidad mucho mayor que elque proponíamos anteriormente, pero que sin duda conseguirá mandar al analizadorfragmentos de texto sin errores provocados al cortar la frase.

Para describir las reglas de corte, utilizaremos los símbolos terminales quecategorizan cada palabra del diccionario, por lo que tendremos que disponer de lasucesión de símbolos terminales de las palabras que componen todas y cada una de lasfrases del texto que queremos analizar.

Además, vamos a utilizar un formato que hemos diseñado específicamente paraeste archivo. Es un formato sencillo que hace posible definir todas las reglas quenecesitamos, y que al mismo tiempo no hace difícil la captura de las mismas a través dela programación. Utilizaremos sólo dos símbolos para escribir las normas de corte en elfichero:

• El signo '+': indicará que para que una frase pueda ser cortada por unapalabra cuyo símbolo terminal es el que precede al '+' en la regla, debe irseguida de alguna palabra cuyo símbolo terminal sea uno de los que estánescritos detrás del '+' en la definición de la regla.

• El signo '-': nos dice, que para que sea posible el corte por una palabra quetenga como símbolo terminal el que precede al signo '-' en la regla, no debe irprecedida por cualquier palabra cuyo símbolo terminal, sea alguno de los quesiguen al símbolo '-' en la línea donde esté escrita la regla.

Al signo '+' y al '-', les pueden seguir varios símbolos terminales como se hadejado entrever en la descripción del formato. Si hay más de un símbolo terminal detrásde uno de los signos, se separarán uno de otro mediante una coma (,) y un espacio enblanco.

Cuando en una línea del fichero, aparece un símbolo terminal solo, significaráque cuando encontremos en la frase una palabra con ese símbolo asociado, podremos

Page 7: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 85

cortar por ella en cualquier caso. La palabra por donde se corta, se analizará en elfragmento siguiente al que está siendo procesado en el momento del corte.

La funcionalidad de estas reglas de corte, así como el formato en el que estánescritas, están basados en ideas introducidas en Montero[99], que se utilizan paradesarrollar procesos similares.

Se puede observar una muestra del fichero ReglasCorte.TER, en el cuadro 6.3.

Con estas reglas, los cortes de la frase que hemos propuesto anteriormente sedividiría de la siguiente forma:

La casa | no se va | a vender

• Corta por el adverbio "no", ya que va seguido de un pronombre objeto.• Corta por la preposición "a", ya que no lleva delante ninguna otra

preposición.

En esta ocasión, el analizador será capaz de procesar los tres segmentos y por lotanto la frase entera.

6.2.3 NombreGramatica.860

Este archivo, realizará la conversión de categoría 860 a símbolo terminal. Comoya se ha comentado, recibiremos como entrada un corpus categorizado en el archivo conextensión .APS, el cual explicaremos en el siguiente apartado. Las categorías queaparecen en ese fichero serán del tipo 860, y será necesario traducirlas a símbolosterminales que será lo que entienda el algoritmo CYK, para así poder realizar el análisis

Cuadro 6.3. Formato de las reglas de corte.

ComaConjCoordContraccALPrep - Prep, PrepDeContraccDEL - Artic, ContraccALPrepDe - Prep, Artic, ContraccAL, ContraccDEL, VerboHaberLPrep - LPrepPronObjeto - PronObjeto, AdverbNoVerboEstar - PronObjeto, VerboHaber, Verbo, AdverbNoVerboSer - PronObjeto, VerboEstar, VerboHaber, Verbo, AdverbNoVerboHaber - PronObjeto, VerboEstar, Verbo, AdverbNoVerbo - PronObjeto, VerboEstar, VerboSer, VerboHaber, AdverbNoAdverbNo + Verbo, VerboEstar, PronObjeto, VerboSer, VerboHaberFinInterrog

Page 8: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 86

sintáctico. Este archivo, del que se ofrece una parte en el cuadro 6.4, proporcionará esatraducción.

Habrá palabras especiales que serán traducidas a símbolo terminal sin necesidadde usar como enlace la categoría 860 de la misma. Estos casos, serán aquellos en los quequeremos obtener símbolos terminales muy específicos que se corresponden con unapalabra específica y no con otras con las que puede estar unida sintácticamente. Porejemplo, "todos" será un pronombre indefinido, pero al integrarlo en la gramática, secomportará, en algunas ocasiones, de manera distinta a los demás pronombresindefinidos, por esta razón, se creará un símbolo terminal específico para las palabras"todos", "todo", "todas" y "toda", como se puede apreciar en el cuadro 6.4. Para lacreación y desarrollo de este fichero, se ha acudido igualmente, a tomar información deMontero[99].

El formato en el que está escrito este archivo, es muy simple:

SimboloTerminal=Categoria8601 Categoria8602 ... Categoria860n

o también

SimboloTerminal=Palabra1 Palabra2 ... Palabran

o una mezcla de ambas

SimboloTerminal=Categoria8601 Palabra1 Palabra2 ... Categorian Palabram

donde ∈mn, [ 1, 2,..., ∞ ], en el tercer caso, se puede dar que nm ≠ , o quenm = . Evidentemente el valor infinito no se dará en ningún caso, lo ponemos para

especificar que no hay ningún límite establecido de categorías 860 equivalentes a unmismo símbolo terminal. Este límite, lo pone el programador.

Cuadro 6.4. Fragmento del archivo .860.

ContraccAL="al"ContraccDEL="del"PreArtTodos="todos" "todo" "todas" "toda"PronCuanto="cuanto" "cuánto"AdverbEspac=B00*Adverb="si" B01* B00* B*ArticIndet=D01*Artic=D* A09*Coma=M07* M11* M12* M10* M24* M26*Comillas=M13* M14* M16* M17* M44* M09* M45* M35* M27* M28*FinInterrog=M08*ConjCoord=C02* M20*ConjQue=C06* R20*Num=A12* M02* R17* M01* L00* M57*

Page 9: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 87

6.2.4 NombreTexto.APS

Archivo de entrada. El usuario podrá elegir, entre todos los archivos conextensión .APS que se encuentren en el directorio desde donde se ejecute el programa.Una nueva alternativa que tenemos, es que podemos elegir entre archivos situados endiferentes directorios, debido a que cuando nos piden que seleccionemos un archivo conextensión .APS, se nos permite la navegación en la estructura de árboles de directoriosque posee Windows. Este nuevo entorno de ejecución, es una de las novedades que seincorpora en esta nueva versión del analizador "sintax" del GTH.

Los archivos APS, tendrán texto que habrá sido previamente categorizado. Cadauna de las palabras que componen el texto, tendrá su categoría 860 asociada. Estaasociación palabra - categoría 860, se realizará dentro del archivo de la siguientemanera:

Palabra1 Categoria8601Palabra2 Categoria8602Palabra3 Categoria8603...Palabran Categoria860n

donde 'n' será el número de palabras que tiene cada frase, incluyendo en estas elpunto de final de frase y la cadena separadora de frases que será '$$$$' , y que porsupuesto tendrá su propia categoría 860 asociada.

La palabra y su categoría estarán separadas por un tabulador.

Los ficheros APS descritos hasta ahora dentro de este apartado, son aquellos quetienen una sola categoría asociada por cada palabra del texto. Incluidos en este tipo deficheros, también se encuentran aquellos que para cada palabra, asocian una o máscategorías, nos referiremos a esta clase de ficheros como ficheros de múltiplecategorización. Un ejemplo de una palabra que puede tener varias categorías sintácticasasociadas es "una", que puede ser un artículo indeterminado ("una cosa"), a la vez queun tiempo verbal de "unir". El formato en el que estos ficheros están escritos, seráequivalente a los de una única categoría asociada, pero colocando detrás de cada palabra(y separada igualmente mediante una tabulación), la lista completa de categorías quepueda tener en el aspecto sintáctico.

Palabra1 Categoria86011 Categoria86012 ... Categoria8601k'

Palabra2 Categoria86021 Categoria86022 ... Categoria8602k''

...Palabran Categoria860n1 Categoria860n2 ... Categoria860nk'''

donde 'n' es la longitud (en palabras) de la frase, y donde las restantes variablesk', k'', k''' [∈ 1, 2,..., ∞ ], serán el número de categorías que tiene cada palabra de dichafrase.

Cada una de las diferentes categorías, irán separadas también mediante unatabulación. En el cuadro 6.5, tenemos un ejemplo de un texto ambiguamentecategorizado.

Page 10: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 88

Se puede notar como la partícula "La", puede ser un artículo, un nombre (notamusical) y un pronombre objeto. El analizador, procesará la frase teniendo en cuenta lastres categorías y, como se puede observar por el contexto de la frase, sólo reconocerácomo perteneciente al lenguaje, aquella cadena en la que "La" sea reconocida como unartículo.

Mencionar, por último, que la ambigüedad media que tiene un texto con múltiplecategorización será de un diez por ciento. De cualquier forma, si se quieren tenerconocimientos más precisos y detallados sobre los distintos pasos del proceso decategorización que sufrirá un texto antes de ser analizado, se puede acudir aJimenez[99] y Montero[99].

6.2.5 sintagmas.TXT

Es un fichero muy simple que se ha creado para que la presentación deresultados sea lo más clara posible.

Cuadro 6.5. Frase con múltiple categorización.

La D00##S.F## N00##S.F## R02##H.F##inversión N00##P.F##que C06##N.0## R20##N.N##se R02##H.N##hizo V..41H.0..en P00##N.0##infraestructura N00##S.F##- M12#######30 A12##..N##millones A12##N.N## N00##P.M## R17##N.N##de P00##N.0##ECUS M04#######en P00##N.0##la D00##S.F##Comunidad N07##S.F##en P00##N.0##1900ANYO N05#######, M07#######es V2901H.0..decir N00##S.M## V..00N.0..aproximadamente B....N.0##115 A12##..N##ECUS M04#######por P00##N.0##habitante N00##S.N##. M06#######$$$$ M46#######

Page 11: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 89

Como ya se ha comentado, la salida principal que ofrecerá el sistema, será elanálisis sintagmático de la frase en formato de paréntesis etiquetados. El archivo quecontiene dicho formato, mostrará todo el desarrollo del análisis, es decir, dichosarchivos, tendrán traducido a formato de paréntesis etiquetados, el árbol sintácticocompleto con todos sus niveles, desde el axioma hasta las ramas terminales, las cualescontendrán las palabras que forman el texto. Esta, es una información muy útil, ya quenos permite descifrar todo el proceso ascendente que el algoritmo CYK ha seguido alaplicar las reglas gramaticales al texto analizado, hasta conseguir el axioma que nosindicó que la frase pertenecía al lenguaje, sin más que seguir la secuencia de paréntesis,pero a la vez es demasiado complejo y es por eso que la mencionada secuencia setraduce a formato de árboles sintácticos, donde obtendremos una claridad deinterpretación del análisis mucho mayor.

Este archivo, nos ayudará a obtener una secuencia de paréntesis etiquetadosmucho más sencilla donde sólo aparecerán el axioma, los sintagmas principales, lossímbolos terminales y las palabras del texto que ha sido procesado, es decir,eliminaremos todos los niveles intermedios por los que pasa el algoritmo, es más, através de un posproceso que haremos al archivo resultante, prescindiremos incluso delos símbolos terminales. De esta forma, nuestra tarea de depuración de la gramáticamediante el estudio de los ficheros de paréntesis etiquetados, que obtenemos comosalida del análisis de los diferentes textos, será más sencilla que si tuviéramos queexaminar todo el análisis desglosado. También hay que decir, que al ser unainformación menos completa, habrá ocasiones en las que no estará muy claro por qué seha llegado a un sintagma, o mediante qué regla se ha conseguido cierto análisis, seráentonces cuando nos tendremos que apoyar en el archivo primitivo para conseguir quenos aclare la duda, ya que el haberlo transformado no implica, evidentemente,prescindir de él a la hora de evaluar los análisis; de hecho, en ocasiones como lasmencionadas nos será de gran ayuda.

Para distinguir entre los sintagmas que queremos que aparezcan (aquellos queaparecen en el último nivel del análisis, justo antes de llegar al axioma) y los que no(todos los niveles intermedios entre los mencionados y los símbolos terminales), es lafunción para la que se creó este fichero. En él tendremos escritos los sintagmasprincipales de último nivel, que nos ofrecerán el más alto grado de descripción de lossegmentos analizados. Este fichero se cargará en memoria, y cada vez que leamos unsintagma del fichero de paréntesis etiquetados inicial, el sistema decidirá según loscriterios de este archivo si se escribe o se descarta, según el nombre del sintagmaaparezca o no, almacenado en memoria.

En la ilustración 6.1, podemos ver un ejemplo de la transformación a la quehacemos referencia en este apartado. Se puede observar en dicha ilustración, la mayorsencillez que se ofrece en la interpretación del análisis una vez realizada la conversión.La primera cadena de paréntesis etiquetados, es muy dificultosa de entender, inclusopara alguien habituado a manejarse con este tipo de notaciones, sin embargo, la cadenafinal podrá ser interpretada por cualquier persona que tenga unos mínimosconocimientos de sintaxis.

Page 12: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 90

6.2.6 PalabrasEspeciales.TXT

Los motivos en que se ha basado la realización de este archivo, los cuales seexplican más adelante, han sido sacados de Montero[99].

Este es uno de los casos, en que para describir la utilidad de este archivo, hayque hacer referencia a procesos que realiza el sistema, pero que aún no han sidoexplicados. De cualquier manera, se procurará que quede clara la necesidad de crear unfichero como este.

Más adelante, se explicará que además del análisis sintagmático que realiza elsistema, hará falta hacer otro, pero éste a nivel de sintagmas, a partir de los resultadosdel primero, debido a que con el primer análisis, por causa de la fragmentación de lafrase, será imposible llegar a formar ciertos sintagmas que serán un poco más complejosen su estructura.

O[SEGMENTO[ SN[ SN0[ DETart_dem[ DETart[ La ] ]N[ construcción ] ] ] ] Artic Sust

SEGMENTO[ SP_NOM[ SPde[ PREP_DE[ de ]SN[ SN0[ DETart_dem[ PrepDe

DETart[una ] ]N[ planta ] ] ] ] ] ] ] ] ArticIndet Sust

Transformación sintagmas.TXT

O[SN[ la construcción ] SPde[ de una planta ]] Artic Sust PrepDe ArticIndet Sust

Ilustración 6.1. Transformación de los paréntesis etiquetados.

Page 13: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 91

La manera de conseguir identificar dichos sintagmas, será mediante la fusión deotros que se han obtenido como resultado del análisis sintagmático, y es de eso, de lafusión de sintagmas, de lo que se encargará el análisis sintáctico de alto nivel posterior.

De acuerdo con Montero[99], en la elaboración de las reglas gramaticales queconducen a esos sintagmas tan complejos, se ha intentado que la formación de dichossintagmas, se consiga a través de la unión de dos o más sintagmas principales (los quecontiene el fichero sintagmas.TXT descrito en el apartado anterior). De esta forma, sepodrá llevar a cabo el análisis sintáctico final, teniendo como entrada un fichero deparéntesis etiquetados, pero con un formato especial, resultante del análisis sintagmático(de todas formas, el fichero al que se está haciendo referencia, se describirá másadelante), ya que en ese fichero, tendremos sólo, la sucesión de los sintagmas conmayor poder descriptivo que componen un texto, los cuales son, como ya se ha dicho,los que necesitaremos a la hora de la fusión.

En la mayoría de los casos, se ha conseguido el objetivo, pero hay una pequeñafracción de reglas en las que era necesario que, además de sintagmas principales,aparecieran otra serie de partículas. Como en el fichero que queremos como entrada,como veremos más tarde en este capítulo, tenemos sintagmas principales, las palabrasque componen la frase y las categorías 860 de esas palabras, esos términos que ha sidonecesario añadir para la confección de las reglas, se ha procurado que estuvierancompuestos por una palabra especial, ya que también disponíamos de ellas.

Usando sintagmas principales y símbolos terminales que identifican a unapalabra específica, se ha conseguido definir todos los sintagmas inalcanzables en unprimer análisis. Además, esos símbolos terminales, formarán un sintagma por sí solos,al menos en los casos en los que reclamaremos su intervención para construir unsintagma mayor. Un ejemplo podría ser: "tanto", cuyo símbolo terminal es "PalTanto", yforma un sintagma adverbial en el caso que nos interesa, que será cuando pretendamosformar un sintagma que llamaremos de comparación y que está formado por:

SintComparación = PalTanto SintNominal PalComo SintNominal

esta regla no se puede transcribir como:

SintComparación = SintAdverbial SintNominal SintAdverbial SintNominal

ya que no todos los sintagmas adverbiales, generarán la construccióncomparativa que nosotros buscamos: tan...como... o tanto...como...

Siguiendo con el ejemplo expuesto, para así entender mejor el cometido delarchivo que está siendo descrito, tenemos una serie de palabras que en el análisissintagmático habrán sido clasificadas como un sintagma (sintagma adverbial en estecaso), pero para formar ciertas estructuras, necesitamos conocer el símbolo terminal dela palabra específicamente. Por tanto, necesitamos que cuando el analizador lea ciertaspalabras que por sí solas formen un sintagma, siga un procedimiento de almacenamientodistinto al habitual que será el siguiente: si se identifica en el texto que ha sidoanalizado la palabra “tanto” y ésta, forma un sintagma por sí sola (sintagma adverbialpor ser la palabra “tanto”), en la variable donde se guardan la sucesión de sintagmas quecomponen el análisis de una frase, se almacenará el símbolo terminal al que equivale

Page 14: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 92

esta palabra (“PalTanto” en nuestro caso), y se seguirá con el siguiente segmento deltexto. El proceso de análisis sintáctico de alto nivel, se explicará detalladamente másadelante, pero lo que queremos hacer notar, es que necesitamos tener constancia de queexisten ciertas palabras, o mejor dicho, símbolos terminales, que se pueden emplear enalgunas reglas gramaticales que nos hagan obtener sintagmas de composición máscompleja.

Pues bien, nuestro fichero, se encargará de especificar qué palabras han detratarse de una manera especial en lo que respecta a su almacenamiento en las nuevasvariables de las cuales tomará la información el analizador, para realizar el análisis dealto nivel, y a qué símbolos terminales equivalen cada una de ellas, para recibir esetratamiento no habitual.

Como siempre, para describir esas especificaciones, usaremos una notación muysencilla de manejar para proceder al almacenamiento del fichero en memoria. Será lasiguiente:

\PalabraEspecial1\ TerminalEquivalente1...\PalabraEspecialn\ TerminalEquivalenten

Lo que tendríamos en el archivo PalabrasEspeciales.TXT, si tuviéramos unaregla como la del ejemplo, sería:

\tanto\ PalTanto

Las palabras van entre barras invertidas, debido a que así estarán en el archivode entrada. El formato del archivo de entrada, se explicará en un apartado posterior.

6.2.7 TerminalesEspeciales.TXT

Su funcionalidad es idéntica a la de sintagmas.TXT y SintagmasNoAlc.TXT, esdecir, dar a conocer al sistema ciertos símbolos que deben ser tratados de una maneraespecial en el desarrollo del procesado sintáctico del texto.

En esta ocasión, este fichero, nos especificará una serie de símbolos terminalesque provocarán una actuación diferente cuando se proceda a pasar la secuencia deparéntesis etiquetados por el filtro de género y número.

El filtro de género y número, el cual ha sido desarrollado basándonos en ideasobtenidas de Montero[99], comprobará palabra por palabra, si todas las que componenun segmento, tienen el mismo género y el mismo número, excepto cuando procesepalabras que tienen como símbolo terminal asociado, uno de los que especifique elarchivo TerminalesEspeciales.TXT. Si se da este caso, se resetearán los caracteres quecontengan el género y número que gobiernan el segmento en proceso, ya que serántérminos a partir de los cuales, la gramática española permite un cambio de género y/onúmero sin que por ello la frase sea incorrecta. Para hacernos una idea, los términos queaparecen en este archivo, son:

Page 15: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 93

• Las preposiciones.• Las locuciones prepositivas que tendrán el mismo comportamiento que las

anteriores.• Y por ende, las contracciones preposición + artículo.

Como podemos observar en los siguientes ejemplos, después de una preposición,puede haber un cambio de género y de número perfectamente (señalaremos los cambiosde género y/o número con la barra disyuntiva '|'):

Nos vamos a | la casa de | tu hermano.

Tú eres uno de | ellos.

6.3 NUEVA FUNCIONALIDAD DEL

ANALIZADOR. ANÁLISIS SINTAGMÁTICO

Para definir la nueva funcionalidad de nuestro sistema de análisis sintáctico,haremos un recorrido por todas y cada una de las funciones incorporadas al analizador,las cuales le han dado un nuevo alcance, orientado a conseguir los objetivos que semarcaron en un inicio y que están expuestos en el capítulo de introducción.

También en esta ocasión, vamos a definir un esquema de descripción para lasfunciones. Las dividiremos según su funcionalidad en dos grupos, será una divisiónmuy general, pero que sin embargo, nos ayudará a seguir un orden que siempre nosfacilitará la comprensión de las mismas. Dentro de cada grupo, las iremos explicandosegún el orden en que serán llamadas desde el programa principal. Los dos grupos quehemos diferenciado son: aquellas que se encargan de cargar en memoria datosimportantes que será necesario conocer durante el proceso de análisis, y aquellas que seencuadran dentro del propio proceso analizador.

Las nuevas funciones que se han añadido son las siguientes:

1. Funciones de carga de datos:1.1. FabricaArrayTridimensional1.2. LlenaArrayTerminales1.3. CargaDatosEnMemoria1.4. CargaPalabrasEspeciales

2. Funciones de análisis:2.1. LeeTextoCategorizado

2.1.1. CompruebaCategoria2.1.2. CortaFrase

2.2. FiltroETQ2.3. CalculaMinNumSegmentos2.4. ImprimeCYK_1Arbol

Page 16: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 94

2.5. ImprimeCYK_1Arbol_Minimizado

6.3.1 Funciones de carga de datos

Las funciones que van a ser explicadas en este apartado, serán aquellas que seencargarán de almacenar los diferentes datos que tienen algunos de los ficheros deentrada. Datos que se necesitarán durante el análisis de cualquier texto.

De esta forma, conseguiremos mayor rapidez a la hora de obtener dichos datos,ya que al estar almacenados en memoria, la velocidad de acceso será mayor que siestuvieran dentro de los ficheros respectivos.

6.3.1.1 FabricaArrayTridimensional

La cabecera de esta función, será la siguiente:

void FabricaArrayTridimensional (char *Fichero);

Según la cabecera, se puede apreciar que la función"FabricaArrayTridimensional" recibirá como parámetro, el nombre del fichero que sequiere cargar en memoria. Igualmente, se observa que esta función no devolverá ningúnvalor.

El nombre del fichero que recibirá será "NombreGramatica.860", esto es, elfichero que contiene la traducción de categorías 860 a símbolos terminales. Estainformación, será guardada en una variable que llamaremos 'ARRAY_CATEGORIAS',la cual será una estructura tridimensional en la cual almacenaremos el nombre delsímbolo terminal en primera posición, seguido de todas las categorías a las que puedeequivaler dicho símbolo. El proceso de almacenamiento, se aprecia mejor mediante lailustración 6.2 en la cual consideramos 'ARRAY_CATEGORIAS' como una sucesiónde matrices bidimensionales.

Imaginemos, que se quiere almacenar el fragmento del archivo"NombreGramatica.860" que aparece en la ilustración 6.2. El resultado es el que se veen dicha ilustración.

Page 17: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 95

Matriz 1 Matriz 2 Matriz nP r e A r t T o D o s \0 ... C o m a \0 ... C o m i l l a s \0 ... \0" t o d o s \0 ... M 0 7 * \0 ... M 1 3 * \0 ..." t o d o \0 ... M 1 1 * \0 ... M 1 4 * \0 ..." t o d a s \0 ... M 1 2 * \0 ... M 1 6 * \0 ..." t o d a \0 ... M 1 0 * \0 ... M 1 7 * \0 ...\0 ... M 2 4 * \0 ... M 4 4 * \0 ...

M 2 6 * \0 ... ... M 0 9 * \0 ...\0 ... M 4 5 * \0 ...

M 3 5 * \0 ...M 2 7 * \0 ...M 2 8 * \0 ...\0 ...

Ilustración 6.2. Almacenamiento del archivo NombreGramatica.860 en memoria

El proceso de almacenamiento, será leer línea a línea el fichero de entrada, yalmacenar el contenido de cada línea en una de las matrices bidimensionales de laestructura tridimensional. Al almacenar palabras, conservaremos las comillas iniciales,pero no así las finales. De esta forma haremos una distinción para que a la hora derecorrer la estructura buscando el símbolo terminal asociado, se tenga claro si hay quecomparar con la categoría 860 (no tenemos comillas en el comienzo de la fila), odirectamente con la palabra (la fila empieza con comillas). Cuando acabemos dealmacenar cada símbolo terminal y cada categoría 860, se añadirá un carácter de fin depalabra. Asimismo, se colocará el mismo carácter al finalizar de descargar cada líneaentera para así, hacer saber a quien utilice la estructura, que el símbolo terminal queaparece al inicio de cada matriz bidimensional, ya no tiene más categorías 860asociadas.

k

i

j

FabricaArrayTridimensional

PreArtTodos="todos" "todo" "todas" "toda"Coma=M07* M11* M12* M10* M24* M26*...Comillas=M13* M14* M16* M17* M44* M09* M45* M35* M27* M28*

Page 18: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 96

Una vez se halla completado el almacenamiento del archivo, se colocará tambiénel carácter de fin de palabra en la última matriz de la serie, de forma que se sepa cuándose han acabado las equivalencias entre terminales y categorías 860.

Notar, que la dimensión señalada en la ilustración como 'k', y aquella marcadacomo 'i', no son la misma. La dimensión 'k' se refiere a la abscisa dentro de cada matrizbidimensional, y la dimensión 'i', determina la sucesión de matrices bidimensionales. Deesta forma, al acabar la carga de los datos del archivo, 'i' será igual a n+1, mientras que'k' será cero ya que en la última matriz sólo hemos metido el símbolo de fin de cadenade caracteres que está en la posición (0,0) de la matriz n+1.

6.3.1.2 LlenaArrayTerminales

Esta función, se ocupará de cargar en memoria todas las reglas de corte que sedeberán respetar cuando vayamos a dividir una frase en varios fragmentos. Dichasreglas, se encuentran, como ya sabemos, en el archivo "ReglasCorte.TER", por lo queen el cuerpo de la función, se abrirá dicho fichero, se leerá, y la información leída sedescargará en un array bidimensional al cual hemos llamado 'TERMINALES'.

En este caso, el almacenamiento no tendrá ningún misterio. Cada línea delfichero de entrada, se guardará en cada fila de la matriz, metiendo un carácter en cadacasilla y finalizando cada fila con el carácter de fin de palabra. Este carácter, también secolocará en la primera posición de la última fila del array, sabiendo por tanto, quecuando leamos dicho carácter de la posición cero de una fila, habremos llegado al finalde la matriz, no habiendo por consiguiente más reglas de corte aplicables.

Por tanto, el número de filas que debemos reservar en la estructura de dosdimensiones 'TERMINALES', deberá ser igual al número de líneas mas una:

NumFilasMatriz = NumLineasFichero + 1

Reservando para el carácter fin de palabra la última de las filas. Este cálculo, alno ser demasiado complicado, se realizará dentro del cuerpo de la función, de estaforma, reservaremos la memoria justa para almacenar las reglas de corte, lo queimplicará que no haya en esta ocasión, ningún desperdicio.

Por último, reseñar que la cabecera de la función será:

unsigned int LlenaArrayTerminales (void);

La función LlenaArrayTerminales, no recibirá nada debido a que el fichero delque se quieren sacar datos siempre será el mismo, independientemente de la gramáticaescogida y del texto seleccionado para analizar. Devolverá un número natural, el cualnecesitaremos para pasárselo como parámetro a una de las funciones que describiremosmás adelante: "LeeTextoCategorizado".

Page 19: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 97

6.3.1.3 CargaDatosEnMemoria

Esta es una función que podríamos calificar de estándar, ya que no va aalmacenar los datos de un fichero específico en una estructura específica, sino queservirá para guardar la información de un fichero que se le pasará como parámetro enuna estructura unidimensional que también se le pasará como parámetro por referencia,ya que en ella será donde se almacene la información.

El único requisito indispensable para usar esta función para el almacenamientode datos, es que esos datos se van a almacenar en una estructura que va a ser capaz dealojar una lista de números enteros específicamente, es decir, no se podrá utilizar paraguardar en memoria cadenas de caracteres, ni otro tipo de datos que no sean númerosenteros.

La creación de esta función, surgió debido a que en más de una ocasión, eranecesario almacenar datos de un fichero cualquiera dentro de un array unidimensionalde enteros, por lo que, por razones de economía en el código, se decidió desarrollar unasola función que realizara esta labor.

Ya hemos explicado, que a esta función, se le pasará como parámetros el archivode donde va a sacar los datos, y la estructura unidimensional donde almacenará lainformación obtenida. Según la operación se haya realizado con éxito o no, devolveráun valor de uno o cero respectivamente. La cabecera, por tanto, será la que se muestra acontinuación:

BOOLEAN CargaDatosEnMemoria (FILE *fp, unsigned int *ARRAY2DIM);

A esta función se le llamará, para almacenar en memoria la información quecontienen archivos como "TerminalesEspeciales.TXT" o "SintagmasNoAlc.TXT", loscuales ya han sido descritos anteriormente.

Aunque los datos que tienen estos ficheros son del tipo 'char', al ser símbolosterminales y no terminales que aparecen en la gramática, se podrán transformar anúmeros mediante la función "InTabla", a la cual se le llamará dentro del cuerpo de lafunción que nos ocupa para obtener así su traducción a formato numérico, y hacer deeste modo posible su almacenamiento. Guardando en formato numérico y no comocadenas de caracteres el contenido de los mencionados ficheros, conseguiremos unainformación mucho más sencilla y rápida de manejar, igualmente el recorrido del arrayserá mucho más veloz, debido principalmente, a que de esta forma, se consigue reducirde dos a una, la dimensión del mismo.

Las listas de enteros donde guardaremos la información de los archivos"TerminalesEspeciales.TXT" y "SintagmasNoAlc.TXT", serán respectivamente, en lasvariables 'TERMINALES_ESPECIALES' y 'SINTAGMAS_NO_ALC'.

Page 20: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 98

6.3.2 Funciones de análisis

Dentro de este grupo, describiremos aquellos procedimientos que se hanincorporado con el objetivo de dar mayor funcionalidad al analizador propiamentedicho.

En una primera toma de contacto con el texto que será procesado, se realizaráuna fragmentación del mismo, analizando luego, sintácticamente el resultado de esafragmentación. Conseguiremos entonces un análisis por trozos de las frases de entrada;a esta fase del analizador, la hemos denominado análisis sintagmático.

6.3.2.1 LeeTextoCategorizado

Esta función, será la base para realizar el análisis. No sólo leerá el texto delarchivo correspondiente, sino que también dejará preparadas todas las variablesnecesarias para que el análisis se produzca de una forma correcta.

La cabecera de la función, que define la forma en la que se deben hacer lasllamadas a esta función es la siguiente:

BOOLEAN LeeTextoCategorizado (FILE *FP, FILE *FPSal, char *CadenaIn,Ambig *CadenaOut, unsigned int IndTerm, BOOLEAN *FinDeFrase);

Como se puede observar, recibirá una larga lista de parámetros los cuales seránnecesarios para que pueda realizar todos sus cometidos. El valor que va a devolver, serárespectivamente un uno o un cero, según se hayan realizado con éxito todos losprocedimientos que engloba o no. De la misma manera, el valor devuelto será cero sihemos alcanzado el fin del fichero de lectura.

Vamos a proceder a la descripción de cada uno de los parámetros que se le pasana nuestra función:

• FP: Descriptor del fichero "NombreGramatica.APS", donde se encuentra eltexto categorizado.

• FPSal: Fichero donde se tendrá la equivalencia de cada palabra del texto conel símbolo terminal al que equivale. Es igual que el archivo anterior pero conlas categorías 860 traducidas a símbolos terminales.

• CadenaIn: Cadena de caracteres donde se almacenará el fragmento de fraseque está preparado para ser analizado.

• CadenaOut: Estructura bidimensional, con todos los símbolos terminales alos que puede equivaler cada palabra de las que se han incluido en'CadenaIn', es decir, aquellas que constituyen el fragmento de frasepreparado para analizar.

• IndTerm: Número de reglas de corte. Simplemente, la utilizaremos en elbucle de búsqueda de reglas de corte, nos indicará cuando no quedan másreglas que buscar. Esta variable es totalmente prescindible, ya que el finaldel array de reglas que llamamos 'TERMINALES', está marcado con un

Page 21: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 99

carácter de fin de palabra, con lo cual no es necesario conocer a priori elnúmero de reglas que hay.

• FinDeFrase: Variable que nos indicará si hemos acabado de analizar unafrase completa o no. Según su valor actualizaremos una serie de variables delas que más tarde hablaremos.

De estas seis variables, nos proporcionarán información, aquellas que se refierena ficheros, y la variable 'IndTerm', que como ya se ha comentado no es imprescindible.Las demás se nos pasarán por referencia para guardar información vital para el análisissintáctico.

Dentro del cuerpo de la propia función, usaremos unas variables globales queserán de gran importancia:

• SubCadenaIn: Donde se guardará la parte de frase que se ha leído, pero queno está preparada para ser analizada.

• SubCadenaOut: Equivalente a la anterior, pero con los símbolos terminales alos que equivalen las palabras que componen el fragmento de frase que no vaa ser analizado.

Las restantes variables que se utilizarán, se irán comentando según sea necesarioen la explicación del procedimiento.

Ya se ha comentado, que el objetivo de esta función es preparar la frase de talforma que resulte apta para el análisis sintáctico, y para el posterior de alto nivel. Elprimer proceso que realizará la función será leer la primera frase del archivo quecontiene el texto categorizado, es decir, se irá procesando línea a línea, hasta que sedetecte la llegada de un punto. Cada vez que leamos una línea, esto será, comoexplicamos en la descripción del fichero "NombreGramatica.APS", una relación palabra- categorías 860, se introducirá la palabra en la variable 'CadenaIn', buscandoposteriormente el símbolo terminal al que corresponde la categoría 860 mediante lafunción "CompruebaCategoria". Una vez hayamos conseguido el terminal asociado a lacategoría que queríamos comprobar, añadiremos la categoría 860 a una variable dondealmacenaremos la secuencia de categorías 860 que forman la frase que va a seranalizada, esa variable será una estructura bidimensional que se ha denominado'ArrayCategorias_860', y nos será muy útil cuando pasemos el resultado del análisissintáctico por el filtro de género y número, ya que, como sabemos, esa información estácontenida en las categorías 860 de cada palabra.

El procedimiento descrito se realizará para todos los pares palabra - categoría860 que compongan la frase. Cuando el procesador identifique un punto, el cualindicará el final de la frase, se realizará una llamada a la función "CortaFrase" mediantela cual se procederá a la división o fragmentación del texto procesado.

6.3.2.1.1 CompruebaCategoriaEsta función necesitará mucha información. Este hecho, se ve reflejado en la

estructura de su cabecera:

Page 22: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 100

BOOLEAN CompruebaCategoria (char *palabra, char *categoria, Ambig*CadenaOut, unsigned int posicion1, unsigned int posicion2, FILE *fp,BOOLEAN *PERTENECE_CADENAOUT);

Esta función, retornará un cero cuando se produzca cualquier tipo de error, de locontrario devolverá un uno. En cuanto a lo que respecta a las variables que se pasancomo parámetros formales, proporcionarán la información que se detalla acontinuación:

• palabra: Nos aporta cuál es la palabra leída. Aunque la labor de esta funciónes identificar el símbolo terminal asociado a la categoría 860, se puedepensar que sólo será necesaria la mencionada categoría, pero si retrocedemosa la estructura del archivo "NombreGramatica.860", recordaremos quealgunos símbolos terminales queríamos que fueran muy específicos, para locual necesitábamos relacionarlos directamente con una palabra. Es por esto,por lo que debemos conocer también qué palabra estamos procesando.

• categoria: Cadena de categorías 860 a las que puede equivaler la palabracorrespondiente de la frase. Dependiendo de si es un texto con múltiplecategorización o no, esta cadena estará formada por varias categorías o tansolo por una.

• CadenaOut: Matriz donde guardaremos los símbolos terminales en formatonumérico, según se vayan identificando.

• posicion1: variable que nos informa de la posición que ocupa la palabradentro de la frase. Nos será útil para rellenar 'CadenaOut', ya que lossímbolos terminales que se vayan obteniendo, tendrán que introducirse en lacasilla de 'CadenaOut' equivalente a la posición ocupada por la palabra en lafrase. Por ejemplo, si estamos procesando la quinta palabra del texto, suscategorías terminales se añadirán a la cuarta columna (es cuarta porque lanumeración en los arrays empiezan a partir de cero) de 'CadenaOut'.

• posicion2: Necesaria para textos múltiplemente categorizados. Nos indica laposición de cada símbolo terminal dentro de la columna de 'CadenaOut'correspondiente. Por tanto, la casilla de 'CadenaOut' donde hay queintroducir los símbolos terminales, estará definida por estos dos índices queacabamos de describir (posicion1, posicion2).

• fp: Es el mismo fichero que en la función "LeeTextoCategorizado",definíamos con la variable 'FPSal'.

• PERTENECE_CADENA_OUT: La función devolverá en esta variable, si elsímbolo terminal que se ha obtenido, ya estaba en 'CadenaOut', asíevitaremos tener repetido algún valor dentro de la misma columna.

El procedimiento "CompruebaCategoria", irá recorriendo la variabletridimensional 'ARRAY_CATEGORIAS', que es donde están almacenadas lastraducciones a símbolo terminal de las categorías en formato 860, las cuales seencontraban en un principio en el fichero "NombreGramatica.860".

Se irá recorriendo cada una de las matrices bidimensionales que componen lavariable citada. Si se encuentra que la categoría con la que se va a comparar la nuestra,que se nos ha pasado como parámetro en la variable 'categoria', tiene comillas en sucomienzo, la compararemos con la palabra del texto que estamos procesando, que

Page 23: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 101

igualmente se nos pasó como parámetro a la función en otra variable que es 'palabra'; encaso contrario, la comparación se realizará con la variable 'categoria'.

Cuando el analizador consiga identificar alguna de nuestras variables con otra delas que se cargaron en 'ARRAY_CATEGORIAS', copiará del array tridimensional elsímbolo terminal correspondiente que se encontrará en la primera fila de la matrizbidimensional donde se ha identificado nuestra categoría 860, o nuestra palabra (verilustración 6.2). Después de transformar el símbolo en cuestión a formato numérico y decomprobar que no fue introducido anteriormente, se añadirá a la posicióncorrespondiente de 'CadenaOut', marcada como ya hemos visto por el par (posicion1,posicion2). Si ya se introdujo, la variable 'PERTENECE_CADENA_OUT' se pondrá auno.

El símbolo terminal que se haya logrado identificar, se escribirá también en elfichero de salida (fp), donde tendremos cada palabra relacionada con sus equivalentesterminales. La salida correspondiente a un texto de múltiple categorización quetendremos en dicho fichero cuyo nombre es "NombreGramatica.OUT", se puede verreflejada en el cuadro 6.6.

Si no se consiguió encontrar ni nuestra categoría ni nuestra palabra, la funcióndevolverá cero, no sin antes sacar por pantalla un mensaje de error.

Algoritmo de búsqueda:Se buscará estructura bidimensional a estructura bidimensional, es decir, el

equivalente a buscar línea a línea en el fichero "NombreGramatica.860". Se empezará acomparar a partir de la segunda fila de cada matriz, ya que en la primera está el símboloterminal a que equivalen las palabras y categorías 860 que se encuentran en las filassucesivas. Se sabrá que una matriz ha sido completada cuando el analizador detecte enla primera casilla de una fila el carácter fin de palabra.

Si en la primera casilla de una fila, hay unas comillas, compararemos la cadenaque sigue a las comillas con nuestra palabra por medio de la función de comparación destrings "stricmp()". De lo contrario, compararemos con nuestra categoría 860 carácter acarácter. Si retrocedemos al capítulo que nos hablaba de la notación 860 para la

Constituye -> Verboigualmente -> Adverbun -> NumAnt ArticIndetpoderoso -> Adjetfactor -> Sustde -> PrepDeprogreso -> Susttécnico -> Adjety -> ConjCoordeconómico -> Adjet

Cuadro 6.6. Contenido del fichero NombreGramatica.OUT.

Page 24: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 102

categorización de un texto, podemos observar que dicha notación se compone denúmeros, letras mayúsculas, puntos y almohadillas.

Al escribir las traducciones símbolo terminal - categorías 860, hemos decididointroducir otro carácter, el asterisco, y prescindir de la almohadilla. El asterisco indicaráque todo lo que siga al carácter previo será indiferente. Así pues, cuando lleguemos a unpunto en cualquiera de las categorías 860 almacenadas en 'ARRAY_CATEGORIAS',no haremos ninguna comparación y pasaremos al carácter siguiente, ya que el puntopuede equivaler a cualquier número o letra mayúscula. Por otro lado, si tenemos comocategoría 860 la secuencia 'B03..N.0##' y nos encontramos en la variable'ARRAY_CATEGORIAS', la secuencia 'B03*' tendremos una coincidencia entrecategorías, y el símbolo terminal que buscamos será aquel de la primera fila de la matrizbidimensional que contiene la cadena de caracteres 'B03*'.

Una vez encontremos que nuestra categoría o nuestra palabra coincide conalgunas de las incluidas en la variable tridimensional, dejaremos de buscar. Por tanto,cada categoría tendrá un solo símbolo terminal asociado. Esto influirá en la ordenaciónque se haga en el archivo "NombreGramatica.860". Podemos apreciar esta influencia enel cuadro 6.7.

La palabra "todos", tendrá como categoría 860 asociada, la secuenciaR14##P.M##, esto es, un pronombre personal indefinido masculino y plural. Elcomportamiento sintáctico de la partícula "todos", nos obliga a crear en la gramática unsímbolo terminal específico para ella, debido a que dicho comportamiento tiene ciertasparticularidades que no poseen los demás pronombres personales indefinidos y que porlo tanto, merecen un tratamiento aparte, una de esas particularidades puede ser que"todos" seguido de un pronombre demostrativo, como por ejemplo "esos" forma unsintagma nominal, lo que no sucederá con otro pronombre indefinido como "muchos".

Debido a esta serie de razones, se crea la categoría terminal "PreArtTodos",específica para la palabra "todos" y todas sus variaciones de género y número. Con locual, nuestro objetivo, es que siempre que en una frase aparezca la partícula "todos", sele asocie el símbolo terminal específico creado para ella.

El orden que seguirá el algoritmo de búsqueda será el mismo en el que estáescrito el fichero "NombreGramatica.860". Como una vez que se encuentre un símboloterminal, se abandonará la búsqueda, si tenemos establecida la ordenación número 2 en

Ordenación 1. Ordenación 2.

...PreArtTodos="todos" "todo" "todas" "toda"...Indef=A07* R14* D01*...

...Indef=A07* R14* D01*...PreArtTodos="todos" "todo" "todas" "toda"...

Cuadro 6.7. Influencia de la diferente ordenación en el fichero NombreGramatica.860.

Page 25: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 103

el fichero de extensión .860, asociaremos a "todos", el terminal "Indef", lo que implicaráun trato en el análisis sintáctico posterior, igual al que recibirá cualquier otro pronombrepersonal indefinido, cuando su comportamiento sintáctico tiene connotaciones que notendrán la mayoría de las palabras de esa clase.

En consecuencia, la ordenación correcta para que "todos", reciba el tratogramatical particular que merece, será la número 1 de las que se ofrecen en el cuadro6.7. De esta forma, la palabra en cuestión será categorizada como "PreArtTodos",mientras que los demás pronombres personales indefinidos serán asociados al símboloterminal "Indef".

6.3.2.1.2 CortaFraseComo ya se ha comentado anteriormente, cada frase que vayamos a analizar, va

a ser dividida en varios fragmentos, y esta función desempeñará ese cometido. La ideade cómo fragmentar las frases, se ha sacado de Montero[99].

Las llamadas a este procedimiento, deberán respetar las especificaciones de lasiguiente cabecera:

BOOLEAN CortaFrase (char *CadenaIn, Ambig *CadenaOut, unsigned intIndTerm);

Los parámetros formales de que consta la cabecera de la función "CortaFrase",son tres de los que constaba la cabecera de la función "LeeTextoCategorizado". Lasvariables 'CadenaIn', 'CadenaOut' e 'IndTerm' son las mismas que se le pasaron a"LeeTextoCategorizado" desde el programa principal que dirige las acciones delanalizador sintagmático, por tanto su contenido y significado serán los mismos que losque tenían entonces.

Esta función va a recibir por tanto, la frase completa que ha sido procesadapalabra a palabra por "LeeTextoCategorizado" (CadenaIn), así como la cadena desímbolos terminales equivalentes a cada palabra que forma la frase (CadenaOut). Lavariable 'IndTerm' es prescindible como ya se comentó en su momento.

Hay que recordar que las reglas de corte que están expuestas en el fichero"ReglasCorte.TER", se encuentran almacenadas en el array bidimensional'TERMINALES'. Esta estructura, será por tanto, la que consultará el procedimiento parabuscar un lugar por donde se pueda dividir la frase en estudio.

Con todo esto, tan solo falta encontrar un algoritmo de búsqueda de un corteóptimo y aplicarlo.

Algoritmo de búsqueda de corte:La función, irá consultando las reglas que tenemos en la variable

'TERMINALES', las pasará a formato numérico, debido a que en 'CadenaOut', que esdonde se encuentra la sucesión de símbolos terminales de la frase, tenemos dichossímbolos traducidos a números.

Page 26: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 104

El parámetro clave de la regla, por el cual se producirá la fragmentación, será elprimer símbolo terminal por el que empieza la escritura de la misma. Cada vez que elsistema obtenga una regla del array 'TERMINALES', se buscará en 'CadenaOut' sialguno de los símbolos que componen la frase coincide con el símbolo terminal clave dela mencionada regla; si se encuentra, el analizador comprobará que respeta la regla queencabeza dicho símbolo. Si esa comprobación da resultado positivo, la frase se podrácortar por el símbolo terminal seleccionado, a no ser que la posición del mismo en lafrase sea menor o igual a tres, ya que se ha establecido que la longitud mínima enpalabras de un texto que vaya a ser analizado sintácticamente, no sea menor de tres.

Si se cumplen todos los requisitos explicados en el párrafo anterior, se cortará lafrase por la posición en que se encuentra el símbolo terminal identificado, pero sinincluirlo, este símbolo pasará a formar parte del siguiente análisis, así como el resto dela frase. Llegados a este punto, el sistema calculará las posiciones de corte de lasvariables 'CadenaIn' y 'CadenaOut', y dividirá la frase, manteniendo en 'CadenaIn' y'CadenaOut', la parte que será analizada y metiendo en 'SubCadenaIn' y 'SubCadenaOut'la parte excluida, dejándola almacenada para análisis posteriores.

Dentro del cuerpo de la función "LeeTextoCategorizado", antes de leer unanueva frase del fichero con extensión .APS que haya sido elegido, se consultarán portanto, las variables 'SubCadenaIn' y 'SubCadenaOut' para comprobar si hay algúnfragmento de la frase anterior que aún no haya sido analizado. Si esas variables no estánvacías, significará que queda texto que ha sido leído, pero no analizado. Si se da estasituación, se pasará el contenido de 'SubCadenaIn' y 'SubCadenaOut', a 'CadenaIn' y'CadenaOut' respectivamente, y se volverá a llamar al procedimiento "CortaFrase".

Existía otra variable paralela a 'CadenaIn' y a 'CadenaOut', que contiene lascategorías 860 de todas las palabras de la frase y que llamábamos'ArrayCategorias_860', la cual nos será de gran utilidad cuando pasemos la frase por elfiltro de género y número, pues bien, esta variable también habrá que dividirla antes deproceder al análisis. En este caso, la posición de corte será la misma que para'CadenaOut'. La parte descartada para el análisis se guardará en una variable auxiliardiseñada para este cometido, que será 'Categorias_aux'.

Si todo el proceso se ha desarrollado correctamente y se ha conseguido dividir lafrase, esta función devolverá un uno, si por el contrario, se ha producido un error o ladivisión de la frase ha resultado imposible, se mostrará un aviso por pantalla. No semuestra un error porque lo único que no habremos conseguido, habrá sido nofragmentar la frase, con lo que tendremos una frase más larga lo que conllevará mayordificultad de análisis y mayor riesgo de ambigüedad, lo cual no se puede considerarcomo un error.

6.3.2.2 FiltroETQ

Llevará codificada la función de transferencia del filtro de género y número. Yase ha comentado en algún apartado anterior, que este filtro ha sido desarrollado teniendocomo base conceptos explicados en Montero[99]. Se ejecutará después de cada análisis

Page 27: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 105

sintáctico, para descartar aquellas secuencias de paréntesis etiquetados que no respetenla concordancia de género y número dentro de su estructura.

La declaración de la función en el fichero de cabecera correspondiente será lasiguiente:

void FiltroETQ (FILE *FPEntr, FILE *FPSal, Ambig *CadenaOut, int*Filtrados);

Los parámetros que recibe son los siguientes:

• FPEntr: Descriptor del fichero "NombreGramatica.ETQ", donde están lassecuencias de paréntesis etiquetados resultantes del análisis sintagmático deltexto.

• FPSal: Descriptor del archivo donde almacenaremos los análisis válidos, esdecir, los que concuerden en género y número a lo largo de su estructura. Elformato en el que serán guardados será también de paréntesis etiquetados ysu nombre es "NombreGramatica.FNL".

• CadenaOut: Útil cuando filtremos análisis de textos con múltiplecategorización, ya que con su ayuda, conoceremos cuál de los símbolosterminales a que equivale cada palabra se está usando en cada momento,sabiendo de esta forma qué categoría 860 de las que tenemos en'ArrayCategorias_860', hay que procesar en cada momento del filtrado.

• Filtrados: Los análisis están numerados. Cada vez que descartemos uno, seañadirá su número a este array global de enteros, para así, saber cuál no sedeberá tener en cuenta cuando busquemos aquel análisis con el menornúmero de segmentos para escribirlo en el archivo "arbol_minimo.ETQ".

Además de estos parámetros, para esta función será fundamental la informaciónaportada por las categorías 860 de las palabras que componen la frase, las cuales seencuentran en la variable global 'ArrayCategorias_860'.

El filtrado se realizará a nivel de segmento, esto quiere decir, que se comprobaráque hay concordancia de género y número dentro de cada uno de los sintagmas de losque se compone la frase. Dentro de cada uno de ellos, hay que tener en cuenta aquellaspartículas que permiten variación del género y/o del número, como son laspreposiciones o las locuciones prepositivas, de las cuales ya se habló en el apartadodedicado al archivo que especifica todas ellas: "TerminalesEspeciales.TXT"; éstas estánalmacenadas en la variable 'TERMINALES_ESPECIALES'.

El sistema, tomará del archivo de entrada 'FPEntr', las palabras que componencada sintagma, así como el símbolo terminal que tienen asociado en cada análisisparticular. Una vez sepamos qué palabras constituyen el segmento que se estéprocesando en cada momento, así como sus correspondientes símbolos terminales, secomprobará palabra por palabra, si los bytes de las categorías 860 que marcan el géneroy el número de las mismas concuerdan a lo largo del sintagma. La primera palabramarcará el género y número que se debe respetar en toda la estructura del sintagma, a noser que procesemos una palabra cuyo símbolo terminal coincida con alguno de los quehemos denominado "especiales", y que se encuentran almacenados en'TERMINALES_ESPECIALES'. En este caso, no se realizará la comprobación de

Page 28: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 106

concordancia de género y número, y la nueva palabra que marcará el género y númeroque gobierne el sintagma procesado será la que sigue a la palabra con símbolo terminal"especial".

Si se respeta la concordancia durante el sintagma completo, se pasará a procesarel siguiente sintagma, y así sucesivamente hasta que procesemos todos los que integranel análisis. En cuanto el sistema detecte que un sintagma no respeta la concordancia degénero y número, descartará el análisis que contenga el citado sintagma, añadiéndolo ala lista de análisis que no han pasado el filtro, la cual consta en la variable 'Filtrados'.Igualmente, este análisis no se copiará en el fichero de salida 'FPSal'. Si todos lossintagmas de un análisis logran pasar el filtro, se copiará el mismo en el fichero desalida.

Por último, señalar que este filtro se pasará de la misma forma y con el mismoobjetivo, cuando se realice el análisis sintáctico de alto nivel.

6.3.2.3 CalculaMinNumSegmentos

Esta función, ha tenido que ser modificada respecto al modelo inicial que sedesarrolló en Montero[92], debido a la nueva funcionalidad que hemos introducido eneste proyecto, y más específicamente, por causa del filtro de género y número que se hadesarrollado.

La función "CalculaMinNumSegmentos", calculaba el análisis con menornúmero de segmentos, de todos los que se habían generado después del análisissintáctico inicial, al que se somete un texto. Debido al filtro mencionado, el cualdescarta algunos análisis, esa elección está un poco "coaccionada", ya que habrá análisisgenerados que no se podrán escoger aún siendo los que tengan menor número desegmentos, debido a que no han pasado la prueba de concordancia de género y número.Por tanto, el procedimiento "CalculaMinNumSegmentos", deberá tener conocimiento deesos análisis y prescindir de ellos a la hora de hacer su cálculo.

La función "FiltroETQ", rellenará un array de enteros (ArbFiltrados), con todoslos números de aquellos análisis que elimine, y esa variable, se pasará como argumentoformal a "CalculaMinNumSegmentos". La cabecera de la misma, será por tanto:

int CalculaMinNumSegmentos (int *ArbolesFiltrados);

Devolverá, el número del análisis seleccionado, para que lo use la función"ImprimeCYK_1Arbol", que se describirá a continuación.

En resumen, esta función, seleccionará el análisis que generará el árbolsintáctico con menor número de segmentos. Pero puede que haya varios árboles con elmismo número mínimo de segmentos, aunque sea habiendo realizado análisissintácticos diferentes. Ahora mismo, nos quedamos con el último árbol que tenga elmenor número de segmentos, ya que contamos, por medio de esta función, lossintagmas de cada análisis del fragmento correspondiente, y se comprueba si esenúmero de segmentos o sintagmas, es menor o igual que el mínimo que se tiene hasta el

Page 29: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 107

momento. Sería interesante, obtener para una misma frase, todos los análisiscompuestos por el mismo número de sintagmas, y que éste sea el número mínimo;pasarle al análisis sintáctico de alto nivel, todos esos análisis para comprobar con cuálde ellos es capaz de construir un mayor número de sintagmas complejos o de alto nivel,y así seleccionar a posteriori el mejor análisis de los mínimos, que sería aquel con el seproduce un mayor número de fusiones a alto nivel.

6.3.2.4 ImprimeCYK_1Arbol

Se hará una llamada a esta función, después de seleccionar el análisis con menornúmero de segmentos mediante la función "CalculaMinNumSegmentos". La función"CalculaMinNumSegmentos" devolverá, como ya sabemos, el número del análisis conmenor número de sintagmas.

El procedimiento que siga "ImprimeCYK_1Arbol", será muy simple, ya que seencargará de recorrer el fichero con paréntesis etiquetados y escribir en el fichero"arbol_minimo.ETQ" aquel análisis que haya sido seleccionado anteriormente,descartando todos los demás.

La cabecera de la función es:

void ImprimeCYK_1Arbol (FILE *FPEscr, int num_arbol, BOOLEANIncompleto);

Se recibirá, por tanto:

• FPEscr: Fichero con los paréntesis etiquetados resultado del análisissintagmático.

• num_arbol: Entero que identifica el análisis con menor número desegmentos.

• Incompleto: Si es igual a uno, nos informará que hay más análisis aparte delos que se ofrecen en el fichero de paréntesis etiquetados. Ha habidodemasiada ambigüedad en el análisis sintáctico de cada fragmento de lafrase.

Como se puede apreciar en la cabecera, esta función no devolverá ninguna clasede valor.

6.3.2.5 ImprimeCYK_1Arbol_Minimizado

Esta función, simplemente cambiará el formato del fichero que resulta de laaplicación del procedimiento anterior. Cambiará el formato de "arbol_minimo.ETQ".

Esta función se declarará de la siguiente forma:void ImprimeCYK_1Arbol_Minimizado (FILE *FPLect, FILE *FPEscr);

Page 30: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 108

Como se puede apreciar en la cabecera de la función, solamente recibirá dosdescriptores de fichero:

• FPLect: Fichero "arbol_minimo.ETQ", con los análisis de cada frase quetienen el menor número de segmentos.

• FPEscr: Fichero que contendrá el mismo tipo de análisis que el anterior, perocon un formato más reducido. Este fichero resultante será"minimizado.ETQ".

Lo primero que hará el sistema cuando esté ejecutando esta función, será cargaren memoria el fichero "sintagmas.TXT". Su contenido, se almacenará en la variable'SINTAGMAS'. Con la ayuda de esta variable, donde encontraremos las diferentesclases de sintagmas que permite la gramática, se reducirá el formato de presentación delos paréntesis etiquetados. Ya se describió el cambio de formato que se produce en estafunción, cuando explicamos la utilidad del archivo "sintagmas.TXT" (apartado 4.2.5), elcual contiene todos los tipos de sintagmas que forman la gramática de contexto libreque hemos definido. En la ilustración 6.1, expuesta en el apartado al que se ha hechoreferencia, se aprecia perfectamente dicho cambio.

En resumen, esta función se encarga de eliminar todos los niveles intermediosque existen entre los niveles de sintagma y símbolo terminal. De este modo,obtendremos un archivo con una notación más clara y precisa, la cual será de granayuda cuando estudiemos los resultados que genera el analizador.

6.3.3 Recategorizador

El recategorizador, es un nuevo módulo, que se ha instalado en esta nuevaversión del analizador "sintax" del GTH. Este módulo, ha sido creado con vistas alanálisis de textos ambiguamente categorizados, ya que no tendrá ninguna utilidad,cuando se tengan como entrada textos cuyas palabras tengan asociada una solacategoría.

La idea del recategorizador, de nuevo ha sido sacada de Montero[99].

Su función, será la de crear un fichero con el texto recategorizado. Las palabrasque componen ese texto, tendrán una sola categoría asociada, y dicha categoría, será laque ha sido usada en el mejor de los análisis sintácticos. Las frases que no se hayanconseguido analizar, conservarán la categorización inicial, quedando por tanto,ambiguamente categorizadas. Este módulo, estará situado inmediatamente después delfiltro de género y número del analizador CYK.

Una vez que se haya analizado cada una de las frases que componen el texto deentrada, se pasará por el recategorizador. Habrá dos formas de entrar al módulo delrecategorizador, según el resultado del análisis sea bueno o no. Según esto, se llamará auna de estas dos funciones:

1. RecategorizaTexto.2. RecategorizaTexto_NoAnalizado.

Page 31: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 109

Estas funciones, serán muy sencillas, ya que la información necesaria, se lespasará completamente detallada. A continuación, se explicarán ambas funciones paraentender mejor el modo con el que opera este recategorizador.

6.3.3.1 RecategorizaTexto

La cabecera de la función, será la siguiente:

void RecategorizaTexto(char *Cadena_Texto, Ambig *Cadena_Termin, int*Cadena_Termin_Util, FILE *FP_recat);

Los parámetros que recibirá esta función será, el texto que ha sido analizado(Cadena_Texto), la cadena de terminales que han sido usados en el mejor análisis(Cadena_Termin_Util), la cadena con todas las categorías posibles que tenía cadapalabra (Cadena_Termin), y el fichero donde se almacenará el texto recategorizado(FP_recat). Este fichero, se llamará "TextoRecategorizado.APS". La extensión es .APS,porque es la que se ha dado a todos los archivos que tienen texto categorizado.

Esta función, escribirá en el archivo de salida, el texto palabra por palabra,seguida cada una de ellas por la categoría que ha sido usada en el análisis seleccionado,esto es, el mismo formato que el usado para el archivo "NombreTexto.APS". Lacategoría 860 correspondiente a cada palabra, se buscará donde están almacenadas, queserá el array 'ArrayCategorias_860'. En este array, estarán todas las categorías a las quepuede equivaler cada palabra, por tanto habrá que encontrar la que verdaderamentebuscamos, y que será, como ya se ha repetido en varias ocasiones, aquella que se hausado en el mejor análisis. La posición de las categorías en esta variable, será la mismaque tienen los terminales equivalentes en 'Cadena_Termin', por tanto, se buscará en'Cadena_Termin', el terminal que aparece en 'Cadena_Termin_Util', y luego, se sacaráde esa misma posición donde se encontraba el terminal en 'Cadena_Termin', pero ahoraen 'ArrayCategorias_860', la categoría 860 que buscamos, imprimiendo éstaposteriormente en el archivo identificado por el descriptor 'FP_recat'.

Este proceso se repetirá, cada vez que se haya analizado un fragmento de unafrase.

6.3.3.2 RecategorizaTexto_NoAnalizado

Esta función es mucho más sencilla que la anterior, ya que además de recibirmenos parámetros, se puede prescindir del algoritmo explicado anteriormente para labúsqueda de la categoría 860 asociada a cada palabra, ya que en este caso, se escribirántodas y cada una de las categorías a las que equivale cada palabra, debido a que esimposible escoger una ya que no se pudo realizar ningún análisis.

La función "RecategorizaTexto_NoAnalizado", recibirá tan sólo, el texto que nose pudo analizar y la sucesión de terminales a que equivale cada palabra. Todo lo que seimprima en este caso, en el fichero recategorizado, será lo mismo que hay en el archivode entrada.

Page 32: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 110

6.4 FICHEROS INTERMEDIOS

Este apartado, se ha confeccionado para dedicárselo a aquellos archivos que semencionarán bastante a lo largo de la descripción de las siguientes funciones yprocedimientos, por lo que se ha creído conveniente explicar antes, la información deque constan.

Estos ficheros, van a ser transparentes al usuario del analizador, ya quecontienen datos que son almacenados para dar viabilidad a una serie de funciones queson las que realmente generarán archivos con la información que resultará útil para elmencionado usuario.

Como ya se aclaró en el planteamiento del capítulo, se ha hecho una distinciónentre los ficheros que se necesitan en el transcurso del análisis sintagmático, y los quese necesitan para llevar a cabo correctamente el análisis sintáctico de alto nivel.

6.4.1 Ficheros intermedios del análisis sintagmático

6.4.1.1 arbol_minimo.ETQ

Podemos decir, que es un archivo que nos sirve de puente entre otros dos queson los realmente importantes: "NombreGramatica.ETQ" y "minimizado.ETQ", el cualexplicaremos a continuación. La importancia de este archivo, no será menor de la quetienen los dos que enlaza, ya que sin él, no se llegaría a obtener el segundo, es decir,"minimizado.ETQ", o mejor dicho, sí que se podría conseguir directamente de"NombreGramatica.ETQ", pero la conversión directa sería muy complicada, y daríalugar a la realización de una función con un código muy pesado y difícil de entender.

En "arbol_minimo.ETQ", se guardarán las secuencias de paréntesis etiquetadoscon menor número de segmentos o sintagmas que tenga cada uno de los análisissintácticos resultantes del proceso analizador al que se sometió a cada uno de losfragmentos en los que fue dividida la frase. Estas secuencias, serán las que produzcanlos árboles sintácticos más válidos debido a que la frase habrá sido segmentada de laforma más óptima, es decir, que se ha conseguido identificar perfectamente, en dichoanálisis, los sintagmas más grandes (con mayor número de palabras), con lo cual,aquellos análisis con menos segmentos, tendrán divididos en dos o más sintagmas,fragmentos de texto que en realidad forman solamente uno, por lo que, aunque no seananálisis malos o erróneos, no serán los más válidos.

Este archivo se obtendrá aplicando las funciones "CalculaMinNumSegmentos" e"ImprimeCYK_1Arbol", sobre los resultados del análisis sintagmático de cada frase."CalculaMinNumSegmentos", contará los sintagmas de los que se compone cadaanálisis, y devolverá aquel que contenga menor número. Luego, se pasará a imprimir eneste fichero, los paréntesis etiquetados correspondientes al análisis seleccionado,mediante la función ya explicada en el apartado 4.3.2.3, "ImprimeCYK_1Arbol".

Page 33: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 111

6.4.1.2 Minimizado.ETQ

El contenido de este fichero, es el mismo que el de "arbol_minimo.ETQ", peroreducido. Es decir, este archivo va a contener la secuencia de paréntesis etiquetados conmenor número de sintagmas de cada análisis, pero ahora, se va a prescindir de todos losniveles intermedios que existen entre el nivel de sintagma y el de símbolo terminal. Lasecuencia de paréntesis, se compondrá, del axioma, los nombres de los sintagmasprincipales, las palabras y los símbolos terminales. En la ilustración 6.1 (apartado4.2.5), tenemos un ejemplo de una transformación de los paréntesis etiquetados de laforma en que aparecen en "arbol_minimo.ETQ", a la que se obtiene en"minimizado.ETQ".

A este archivo se llega, después de pasar "arbol_minimo.ETQ" por la funcióndescrita en el apartado 4.3.2.4, "ImprimeCYK_1Arbol_Minimizado". En la ilustración6.3, se expone el proceso que se sigue para la obtención de este fichero.

En la ilustración aparece 'PantallasVirtuales', pues bien, ésta es una variableglobal del analizador donde éste guarda todos los análisis sintácticos posibles que seobtienen de cualquier texto una vez es analizado.

Existe un fichero llamado "NombreGramatica.ETQ", donde se copiarán todos ycada uno de los análisis según están en 'PantallasVirtuales', es decir, sin aplicarlesningún proceso previo.

PantallasVirtuales

ImprimeCYK_1Arbol arbol_minimo.ETQ

ImprimeCYK_1Arbol_Minimizado

Minimizado.ETQ

CalculaMinNumSegmentos

Ilustración 6.3. Proceso de transformación de paréntesis etiquetados.

Page 34: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 112

6.4.1.3 NombreTexto.FNL

Es el archivo que se obtiene después de pasar el filtro de género y número alfichero que tiene todos los análisis de todas las frases de un corpus determinado, enformato de paréntesis etiquetados. Por tanto, el resultado será, otro fichero con análisisen formato de paréntesis etiquetados, pero donde solamente constarán aquellos análisisdonde todos sus sintagmas concuerden en género y número.

El porcentaje de frases que se eliminan después de pasar por el filtro de género ynúmero, es de alrededor del 3%. Además, se ha notado que varios de los análisis que sedescartan en este filtro, es por errores de categorización como por ejemplo, en la frase"el alza de los precios", "el" está categorizado como artículo determinado masculinosingular, mientras que "alza" se categoriza como nombre común femenino singular, porlo que no concuerdan en género, aunque se puede apreciar perfectamente que laconstrucción está perfectamente hecha.

6.4.2 Ficheros intermedios del análisis de alto nivel

Los tres primeros archivos que se van a describir, en realidad son ficherosintermedios que se usarán en el proceso del análisis sintagmático, pero se describen eneste apartado debido a que el objetivo de los mismos, es obtener lo que va a ser elfichero de entrada del proceso del análisis sintáctico de alto nivel. Debido a esta razón,hemos considerado apropiado incluirlos aquí. Los ficheros a los que estamos haciendomención, son:

• Res_Analisis.RES• Categorias.CAT• Minimizado_Buenas.CRG

Con estos archivos, se obtendrá “minimizado.CRG”, que será la entrada delsistema de análisis de alto nivel.

6.4.2.1 Res_Analisis.RES

Aquí, se guardarán los resultados del análisis sintagmático, y cuando hablo deresultados, me estoy refiriendo a si el análisis se ha desarrollado con éxito o no.

Si el análisis se ha realizado correctamente, se escribirá el número de frase, elnúmero de fragmento, y un mensaje de éxito, que será: “ANALISIS_OK”. Cuando elfragmento correspondiente no se pueda analizar, se pondrá igualmente el número defrase y segmento, pero esta vez, seguido por el texto del trozo de frase que no se logróanalizar. Se puede ver un extracto de este fichero, después de analizar el corpus número2 en el cuadro 6.8.

Page 35: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 113

En este cuadro, se puede observar, que la frase 42 se analizó enteracorrectamente, sin embargo, la frase 43 no se ha podido analizar por causa delfragmente número 2.

La utilidad de este fichero, se verá cuando se explique “minimizado.CRG”.

6.4.2.2 Categorias.CAT

Es un archivo, el cual copiará línea a línea las categorías de todas y cada una delas palabras que aparecen en el corpus o texto que se esté analizando. Será por tanto, unfichero parecido al “NombreTexto.APS”, que teníamos de entrada pero sin las palabrasque componen la frase.

Si el archivo con extensión .APS de entrada, es ambiguamente categorizado, seguardará la categoría que se haya usado en el mejor análisis, es decir, se copiará aquellacategoría haya sido seleccionada por la función “RecategorizaTexto”.

Al igual que pasaba con “Res_Analisis.RES”, su utilidad se podrá comprendermejor cuando se describa el archivo que provoca su existencia, es decir,“minimizado.CRG”.

6.4.2.3 Minimizado_Buenas.CRG

“Minimizado_Buenas.CRG”, tiene casi el formato final que se decidió dar a“minimizado.CRG”. La información pertinente, se guardará en él, a la vez que se crea“minimizado.ETQ”, es decir, en la función “Imprime_1Arbol_Minimizado”. Esto sehace así, porque la mayor parte de la información que se guarda en “minimizado.ETQ”,es necesaria para rellenar “Minimizado_Buenas.CRG”.

FRASE _42_1 : ANALISIS_OKFRASE _42_2 : ANALISIS_OKFRASE _42_3 : ANALISIS_OKFRASE _42_4 : ANALISIS_OKFRASE _42_5 : ANALISIS_OKFRASE _42_6 : ANALISIS_OKFRASE _42_7 : ANALISIS_OKFRASE _42_8 : ANALISIS_OKFRASE _42_9 : ANALISIS_OKFRASE _43_1 : ANALISIS_OKFRASE _43_2 : , sí al menos cercanosFRASE _43_3 : ANALISIS_OKFRASE _43_4 : ANALISIS_OKFRASE _43_5 : ANALISIS_OK

Cuadro 6.8. Contenido del fichero Res_Analisis.RES.

Page 36: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 114

En este archivo, se almacenarán todos los análisis de los trozos que se hayanpodido analizar en el siguiente formato:

##ANALISIS DE LA FRASE n§ _i_j\Palabra1\...\Palabran\ Sintagma1\Palabran+1\...\Palabram\ Sintagma2...\Palabrar\...\Palabras\ Sintagmak

Aparecerán por tanto, los trozos numerados de la frase que hayan podido seranalizados, las palabras que componen cada sintagma del trozo, y por último el nombredel sintagma citado. Antes del texto que numera las frases, habrá dos almohadillas (#),si el trozo es el primero de la frase, de lo contrario, este texto, estará encabezado por unasola almohadilla; esto es una forma de identificar dónde empieza y dónde acaba cadafrase. En el cuadro 6.9, se ve bastante más claro.

El hecho de poner las palabras entre barras invertidas, facilitará, como veremos,el proceso de análisis sintáctico de alto nivel.

6.4.2.4 minimizado.CRG

Este es uno de los archivos claves del proceso analizador. Será el que produzca ypreparará el análisis sintagmático para ser procesado por el analizador de alto nivel. Estefichero, va a ser confeccionado a partir de los tres que se han explicado previamente,mediante la función "CreaMinimizadoCorregido", a la cual llamará el analizadorsintagmático antes de finalizar su cometido.

##ANALISIS DE LA FRASE n§ _10_1\La\valoración\ SN\de\las\realidades\económicas\ SPde

#ANALISIS DE LA FRASE n§ _10_2\en\la\aplicación\ SP

#ANALISIS DE LA FRASE n§ _10_3\de\las\normas\comunitarias\ SPde

#ANALISIS DE LA FRASE n§ _10_4\de\competencia\ SPde\queda\ VERBO\perfectamente\ilustrada\ SAdj

#ANALISIS DE LA FRASE n§ _10_5\en\el\momento\actual\ SP

Cuadro 6.9. Extracto del fichero Minimizado_Buenas.CRG.

Page 37: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 115

El procedimiento "CreaMinimizadoCorregido", irá leyendo de"Res_Analisis.RES", los resultados de los análisis uno por uno, si el análisis fue bueno(el fragmento se pudo analizar), se copia de "Minimizado_Buenas.CRG" dicho análisis,pero haciendo una pequeña variación en el formato. En el cuadro 6.9, podemos ver quecada análisis está separado por un retorno de carro, pues bien, ahora eliminaremos losretornos de carro que hay entre análisis de fragmentos pertenecientes a la misma frase,sabremos que es la misma frase o no por la numeración o porque la línea estáencabezada por una o dos almohadillas. Se quitan esos retornos, debido a que elanalizador sintáctico de alto nivel, distinguirá una frase de otra por la llegada de unretorno de carro.

Además de la modificación especificada en el párrafo anterior, se realizará unamás importante. Entre el texto del trozo correspondiente y el nombre del sintagma quecompone dicho texto, se colocarán las categorías 860 de cada una de las palabras de esesintagma, por esto, es por lo que iremos leyendo también en paralelo con"Res_Analisis.RES" y "Minimizado_Buenas.CRG", el fichero con dichas categorías, esdecir, "Categorias.CAT". Esta modificación se debe a las especificaciones de lectura dearchivos del módulo que sigue al analizador, que es el que introducirá el pausado en eltexto (Montero[2000]), el cual necesitará disponer de las categorías 860, en paralelo conel texto y los sintagmas producto de los análisis.

Si cuando leemos de "Res_Analisis.RES", llegamos a un fragmento malanalizado, escribiremos en "minimizado.CRG", la línea correspondiente con lanumeración de la frase y el trozo (encabezada por una o dos almohadillas según sea o noel inicio de la frase), luego, leeremos el texto que compone dicho trozo (que sirecordamos, estaba guardado en "Res_Analisis.RES", ver en el cuadro 6.8, el fragmento'_43_2'), sacaremos de "Categorias.CAT" las categorías 860 de las palabras delfragmento, y en vez de un nombre de un sintagma, ya que no se consiguió analizar lafrase, y por tanto no disponemos de ninguno, se colocará al final de la línea, la palabra"TROZO", que indicará al analizador sintáctico de alto nivel, que esa frase no pudo seranalizada sintagmáticamente. Una vez tenemos estos datos, se almacenarán en"minimizado.CRG". En el cuadro 6.10 y en el 6.11, aparecen los dos análisis (uno maloy otro bueno, respectivamente) de las frases cuyos resultados aparecen en el cuadro 6.8,en el formato en el que se escribirían en el fichero "minimizado.CRG".

##ANALISIS DE LA FRASE n§ _43_1\Indices\impositivos\ \N00##P.M##\A11..P.M##\ SN\si\ \C..##N.0##\ SAdv\ya\ \B01..N.0##\ SAdv\no\iguales\ \B09..N.0##\A11..P.N##\ SAdj#ANALISIS DE LA FRASE _43_2\,\sí\al\menos\cercanos\ \M07#######\B09..N.0##\C19###7###\C19###7###\A11..P.M##\ TROZO#ANALISIS DE LA FRASE n§ _43_3\,\ \M07#######\ SPunt\así\como\ \C..###7###\C..###7###\ LocucConj\normas\idénticas\ \N00##P.F##\A11..P.F##\ SN#ANALISIS DE LA FRASE n§ _43_4\en\materia\ \P00##N.0##\N00##S.F##\ SP\de\crédito\ \P00##N.0##\N00##S.M##\ SPde#ANALISIS DE LA FRASE n§ _43_5\de\impuesto\ \P00##N.0##\N00##S.M##\ SPde

Cuadro 6.10. Frase con un trozo sin analizar, con el formato de minimizado.CRG.

Page 38: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 116

Este archivo, nos servirá igualmente, para sacar resultados de los análisis pormedio de una comparación con la base de datos que contiene los corpus que se hanusado para entrenar al analizador.

6.4.2.5 arbol_minimoCRG.ETQ

Sobre este archivo, no hay nada nuevo que contar, ya que tiene la misma funcióny el mismo formato que "arbol_minimo.ETQ" (apartado 6.4.1.1), es decir, guardará losárboles mínimos (menor número de segmentos) de cada uno de los análisis, y ejerceráde puente para llegar a la obtención del archivo con los árboles mínimos y con elmínimo desarrollo de paréntesis etiquetados, que será "minimizadoCRG.ETQ". Laúnica diferencia, es que este fichero se creará durante el proceso de análisis de altonivel.

6.4.2.6 minimizado.FNL

Al igual que el anterior, tiene su equivalente en el análisis sintagmático. En estaocasión, hablamos de "NombreTexto.FNL" (apartado 6.4.1.3). Tendrá el mismocontenido, pero adaptado al análisis sintáctico de alto nivel. "minimizado.FNL", es elarchivo que se obtiene al pasar por el filtro de género y número los análisis que resultan

##ANALISIS DE LA FRASE n§ _42_1\El\impuesto\ \D00##S.M##\N00##S.M##\ SN\sobre\las\sociedades\ \P00##N.0##\D00##P.F##\N00##P.F##\ SP#ANALISIS DE LA FRASE n§ _42_2\:\ \M11#######\ SPunt\la\armonización\ \D00##S.F##\N00##S.F##\ SN#ANALISIS DE LA FRASE n§ _42_3\de\los\sistemas\nacionales\ \P00##N.0##\D00##P.M##\N00##P.M##\A11..P.N##\ SPde#ANALISIS DE LA FRASE n§ _42_4\de\imposición\ \P00##N.0##\N00##S.F##\ SPde\de\las\sociedades\ \P00##N.0##\D00##P.F##\N00##P.F##\ SPde#ANALISIS DE LA FRASE n§ _42_5\supone\ \V0801H.0..\ VERBO\,\ \M07#######\ SPunt\por\su\parte\ \P00##N.0##\A06##..N##\N00##S.N##\ SP#ANALISIS DE LA FRASE n§ _42_6\,\ \M07#######\ SPunt\que\ \C06##N.0##\ Relativo\se\consiga\llegar\ \R02##..N##\V0803..0..\V1400N.0..\ VERBO#ANALISIS DE LA FRASE n§ _42_7\a\un\acuerdo\ \P00##N.0##\D01##S.M##\N00##S.M##\ SP#ANALISIS DE LA FRASE n§ _42_8\sobre\Un\mismo\sistema\ \P00##N.0##\D01##S.M##\A11..S.M##\N00##S.M##\ SP#ANALISIS DE LA FRASE n§ _42_9\de\base\ \P00##N.0##\N00##S.F##\ SPde

Cuadro 6.11. Frase analizada correctamente, con el formato de minimizado.CRG.

Page 39: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 117

de aplicar a nuestro texto el algoritmo CYK. Aquellos que el filtro no deja pasar sedescartarán, y los que lo pasen, se guardarán en este fichero. Los análisis almacenadosaquí, estarán completamente desarrollados.

6.5 ANÁLISIS SINTÁCTICO DE ALTO NIVEL

Esta nueva funcionalidad de nuestro sistema, es la más novedosa de todas y seha desarrollado, siguiendo ideas de Montero[99]. En este apartado se hará unadescripción de todos los procesos que se siguen para realizar el análisis sintáctico dealto nivel de un texto, después de haber sido procesado sintagmáticamente, y marcadosintácticamente.

Todos los archivos que se vayan produciendo en esta fase, llevarán el nombre"minimizado" seguido de la extensión que corresponda. El hecho de que lleven estenombre, se debe a que el archivo de entrada será, como sabemos, "minimizado.CRG", ypara crear cada uno de los ficheros con datos, se toma del de entrada el nombre y se leconcatena la extensión correspondiente según el carácter de los datos (errores,resultados, paréntesis etiquetados...).

El proceso que sigue el analizador de sintagmas, es similar, casi idéntico al queutiliza el analizador de bajo nivel. Por tanto, se leerá el fichero de entrada, se rellenaránlas variables que sean necesarias para hacer el análisis de alto nivel, se pasarán estasvariables como argumentos a la función que analiza, y se guardarán los resultados en losficheros correspondientes.

Lo único que se ha tenido que cambiar con respecto al analizador sintagmático,ha sido la función de lectura del fichero de entrada, ya que en este caso tenemos comoentrada, el archivo descrito anteriormente (minimizado.CRG), y antes teníamos uncorpus categorizado. También se han tenido que cambiar ciertas formas dealmacenamiento de datos en ficheros de salida, como por ejemplo, el fichero donde seguardarán los errores, ya que antes se rellenaba con aquellas frases que no se habíanpodido analizar y ahora todas se podrán analizar, debido a que por el analizador querealiza el análisis a este nivel, solamente pasarán aquellas frases cuyos fragmentos sehayan analizado con éxito. Las frases con algún segmento sin analizar correctamente seidentificarán en la función de lectura del fichero de entrada, ya que están marcadascomo tal (recordar que aquellos fragmentos que no se han podido analizarsintácticamente, están marcadas como "TROZO" en "minimizado.CRG"), porconsiguiente, será después de esta función cuando rellenaremos el fichero de errores.Igualmente, habrá pequeños detalles en ciertos archivos que se deberán cambiar, comocuando se rellene con la función "ImprimeCYK_1Arbol", el fichero con árbolesmínimos; ahora sólo necesitamos numerar frases ya que todos sus fragmentos seránunidos, con lo cual se puede prescindir del número de trozo.

Dentro de este apartado, se explicará el proceso de lectura que seguimos en esteanálisis.

Page 40: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 118

6.5.1 Gramática de alto nivel

Para este análisis, se ha generado una gramática que hemos denominadoigualmente, de alto nivel. Esta gramática, será del mismo estilo que la gramática libre decontexto, diseñada para el análisis sintáctico de bajo nivel, en cuanto a formato, es decir,que utilizará los mismos símbolos para la construcción de reglas gramaticales, y lamisma sintaxis.

En esta gramática, los símbolos terminales, serán los sintagmas que hanresultado del análisis sintagmático previo. Los símbolos no terminales, serán sintagmasde alto nivel que se obtendrán por medio de la fusión de dos o más de los sintagmas quetenemos del análisis sintagmático. Por tanto, las reglas, definirán aquellas unionespermitidas.

Si una vez procesada la sucesión de sintagmas de una frase completa, no se halogrado aplicar ninguna regla, siempre quedará la posibilidad de dejar el análisis comoestá, es decir, que a este nivel, siempre habrá un posible análisis, que será no tocar naday conservar el análisis que llega. Por consiguiente, como ya se mencionó anteriormente,no cabrá la posibilidad de que haya una frase que no se pueda analizar.

El algoritmo de análisis sintáctico de alto nivel, será el mismo que se utilizó parael análisis sintáctico de bajo nivel, este es, el CYK. Por tanto, la gramática se deberácompilar y cargar antes de comenzar el análisis. Los algoritmos de compilación y cargaen memoria, serán los mismos igualmente. Si recordamos el capítulo donde se hablabade la antigua versión del analizador "sintax" del GTH, para llevar a cabo correctamentela compilación y la carga, eran imprescindibles una serie de archivos gramaticales deentrada (además de la gramática), eran los siguientes:

• NombreGramatica.AUX.• NombreGramatica.DIC.• NombreGramatica.REG.

Un fichero con un diccionario de palabras que nos encontraríamos en las frasesque queremos analizar, y otros dos archivos que nos servirían de interfaz entre lagramática y el citado diccionario. Evidentemente, se han creado estos tres nuevosficheros adaptados a nuestra nueva gramática para que sea posible la compilación y lacarga. Estos tres archivos, tienen las mismas especificaciones que aquellos descritos enel apartado 4.1 del capítulo 5.

6.5.2 Función de lectura

La cabecera de la nueva función que se encargará de la lectura del fichero deentrada es la siguiente:

BOOLEAN LeeTextoAnalizado (FILE *FP, char *CadenaIn, Ambig*CadenaOut, char *CadenaIn_Mal, BOOLEAN *FinFichero);

Page 41: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 119

Recibirá los siguientes parámetros formales:

• FP: Descriptor que identifica el fichero de entrada.• CadenaIn: Array que la función rellenará con el texto que se va a analizar

sintácticamente.• CadenaOut: En esta variable se guardarán en formato numérico, la sucesión

de sintagmas que componen la frase.• CadenaIn_Mal: Aquí, se almacenará el texto de los fragmentos que no se

pudieron analizar sintácticamente y por tanto, tampoco tendrán ningúnanálisis válido a este nivel superior.

• FinFichero: Variable que nos indicará si hemos acabado de leer el archivo deentrada, o si por el contrario, quedan más frases por analizar.

Como ya se comentó en el apartado donde se describió el fichero de entrada"minimizado.CRG", se diferenciará entre una frase y otra, por la llegada de un retornode carro. Por lo tanto, la función irá leyendo línea por línea, introduciendo las palabrasque forman la frase en 'CadenaIn', las categorías 860 en 'ArrayCategorias_860', y porúltimo, los sintagmas, transformados a formato numérico, en la variable 'CadenaOut'. Sieste sintagma es la palabra "TROZO" (fragmento sin análisis sintáctico), copiaremos en'CadenaIn_Mal' las palabras que componen ese trozo para, de esta manera, poderespecificar en el fichero de errores, el fragmento de la frase que impidió su análisis.

Después de esta función, se comprobará el contenido de la variable'CadenaIn_Mal', si la variable está vacía, se ejecutará el algoritmo CYK de análisis, delo contrario, se abrirá el fichero de errores y guardará la frase que no pudo ser analizaday el motivo de ello, es decir, si hubo un fragmento sin análisis, o si la frase erademasiado larga, ya que se ha puesto un límite de longitud de frase (calculado ennúmero de trozos).

Como dato informativo, decir que el máximo número de trozos del que puedeestar compuesta una frase para poder ser analizada sintácticamente a este nivel, es deveinticinco, con lo que, no se llegarán a descartar ni un uno por ciento del total de lasfrases debido a este motivo, es decir, su excesiva longitud.

6.6 FUNCIONES DE INFORMACIÓN GENERAL

En este grupo, se van a describir aquellas funciones que extraerán de los ficherosque contienen los resultados de los análisis (ficheros con extensión .ETQ, esto es,ficheros con paréntesis etiquetados), algún tipo de información que se ha consideradointeresante destacar.

Las funciones que se han encuadrado en este conjunto, son las tres que senombran a continuación:

1. Busca_Segmento_MasLargo2. CortaAmbiguas

Page 42: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 120

3. ImprimeResultados

6.6.1 Busca_Segmento_MasLargo

Cabecera de la función "Busca_segmento_MasLargo":

void Busca_Segmento_MasLargo (FILE *FPLect, FILE *FPEscr);

Este procedimiento, se encargará de encontrar aquel sintagma que estécompuesto por mayor número de palabras. Para la realización de esta función, elprograma principal le pasará dos descriptores de fichero como argumentos. Estosdesciptores serán los siguientes:

• FPLect: Identificará el archivo con los paréntesis etiquetados en formatomínimo, este será uno de los archivos de los que ya hemos hablado:"minimizado.ETQ".

• FPEscr: Fichero donde copiaremos el sintagma más largo que se haobtenido, después de analizar un corpus categorizado completo.Escribiremos el nombre del sintagma, las palabras que lo forman y lossímbolos terminales de las palabras.

A esta función se le pasa como parámetro "minimizado.ETQ", porque lainformación interesante es saber cuál es el segmento más largo, que se ha conseguidoanalizar sintácticamente en el primer nivel de análisis. De esta forma, se puede apreciarsi el algoritmo de corte que se está empleando, es el conveniente o no.

Si tenemos por ejemplo, que esta función saca como resultado un sintagmaformado por dos o tres palabras como mucho, indicará que tendremos un algoritmo decorte muy poco válido, ya que en un texto donde se van a procesar más de mil frases, lasprobabilidades de que haya una construcción del tipo “ha estado siendo juzgado”, queestá compuesta por cuatro palabras y no debe ser dividida, es del cien por cien. Lomismo pasará si se detecta un segmento con más de diez componentes, es seguro queexiste alguna posibilidad de fragmentarlo, ya que teniendo un algoritmo de corte queadmite sintagmas de incluso tres palabras, es muy extraño que haya sido capaz deanalizar diez palabras y meterlas en el mismo sintagma.

En resumen, esta función nos va a proporcionar un dato que sumado a otrosmuchos nos ayudará en la labor de depuración de nuestro algoritmo de corte, así comode las reglas que se han creado para ser usadas por el mismo. Esta función sólo seaplica después del proceso de análisis sintagmático.

6.6.2 CortaAmbiguas

Es una función que procesará un archivo de entrada buscando cierta informaciónque ahora describiremos, los datos obtenidos, se escribirán en un fichero de salida.

Page 43: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 121

Esos ficheros los recibirá la función como parámetros formales, con lo cual, lacabecera de la misma, tendrá el siguiente aspecto:

void CortaAmbiguas (FILE *FPLect, FILE *FPEscr);

El descriptor ‘FPLect’, identificará al fichero “NombreGramatica.ETQ”, este es,aquel que tiene los desarrollos completos de paréntesis etiquetados, de todos los análisissintagmáticos de todas las frases. Por otra parte, ‘FPEscr’ identificará al archivo finaldonde se guardarán los resultados que el sistema buscará mediante la llamada a estafunción.

Este procedimiento, buscará los análisis de aquellas frases que resulten ambiguaspara nuestro analizador, es decir, aquellas que tengan demasiados análisis válidos. Elprogramador será el que fije el número máximo de análisis que una misma frase puedetener. Ese número, se fijará a través de la constante ‘MAXNUMARBOLES’. En nuestrocaso, hemos considerado que una frase que tenga más de cincuenta análisis válidos, seráuna frase demasiado ambigua para nuestro analizador.

La función “CortaAmbiguas”, buscará las frases que causen ambigüedad, y lascopiará en el fichero de salida. Este fichero, será muy útil para la depuración de lagramática en la que se basa nuestro analizador. Observando las causas particulares, queconducen a cada uno de los casos de ambigüedad, y corrigiendo nuestras reglasgramaticales en la medida de lo posible, esto es sin quebrantar las leyes establecidas dellenguaje castellano, hemos conseguido una reducción de ambigüedades muy grande. Seha logrado pasar de un dieciséis por ciento de ambigüedad, a tan sólo un tres por ciento,he aquí la importancia de esta función.

Por último, decir que se producirá una llamada a esta función, después de ambostipos de análisis (sintagmático y sintáctico de alto nivel).

6.6.3 ImprimeResultados

Es la función que generará el archivo de resultados "Resultado.TXT", el cual seexplica en el siguiente apartado. En ese apartado, se describe cada uno de los datos quese van a almacenar en ese fichero, por lo que no es necesario explicarlo ahora. Estafunción se limitará a escribir dentro del archivo esa información.

La cabecera de la función será:

void ImprimeResultados (FILE *FP, int EnterasBienAnalizadas, intFrasesBienAnalizadas);

Se reciben aquellos datos que necesitamos para rellenar el fichero de salida, asícomo el descriptor del mencionado fichero.

Page 44: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 122

6.7 FICHEROS RESULTADO

En este apartado, la descripción se centrará en aquellos archivos en los cuales elsistema guarde los resultados obtenidos que conciten un cierto interés de cara a lamejora del analizador. Estos ficheros serán ficheros finales, lo que quiere decir que lainformación que guardan, no recibirá ningún tipo de tratamiento posterior, simplementeofrecerán resultados que serán analizados por el usuario del programa, para de estaforma obtener una evaluación óptima del proceso de análisis.

6.7.1 mimizadoCRG.ETQ

Se supone, que este archivo es el que se persigue cuando se han acabado losanálisis. Se puede decir que es el objetivo final. Aquí, se guardarán las cadenas deparéntesis etiquetados que producen el árbol sintáctico mínimo, y además con elmínimo desarrollo. El texto tendrá las marcas sintácticas finales, y a partir de aquí,puede recibir tratamientos posteriores de introducción de pausas, etc.

El formato del archivo, es completamente idéntico al de "minimizado.ETQ"(paréntesis etiquetados).

6.7.2 minimizado.ERR

Contiene el texto de las frases que no se han podido analizar. También especificala causa de esa imposibilidad de análisis, que puede ser debido a dos razones:

• Fallo en el análisis sintagmático: Uno de los fragmentos de la frase, no pudoser analizado, y por tanto, al unir todos (análisis sintáctico de alto nivel), seva a producir un "vacío" en alguna parte de la frase, por lo que se descartará.En "minimizado.ERR", se escribirá el texto del fragmento que impidió elanálisis. En "NombreTexto.ERR", se muestra más detalladamente, la causaque provocó el no poder realizar ese análisis, dando las razones sintácticas elproblema y especificando la parte más grande (con mayor número depalabras) del fragmento que sí se pudo analizar.

• Longitud excesiva de la frase completa: Si la frase se ha dividido endemasiados trozos, desbordará la capacidad de nuestro analizador, por ello,fue necesario poner un límite de trozos en los que podía estar fragmentadauna frase, durante la fase de entrenamiento del analizador. El límite que seoptó por poner, impedía el análisis, de menos de un uno por ciento del totalde frases, por lo que no era demasiado preocupante la inclusión de esarestricción.

Cualquiera de las dos situaciones, se detectarán después de leer"minimizado.CRG", por lo que será después de que se lea cada frase, cuando se procedaa rellenar este fichero.

Page 45: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 123

6.7.3 TextoRecategorizado.APS

Este fichero fue creado, con vistas a los análisis de textos ambigüamentecategorizados. Es una manera de desambiguarlos. En este fichero se volverá a escribir eltexto, pero ahora, sólo asociaremos una categoría a cada palabra. La categoría queasociaremos, será aquella que se haya usado en el mejor análisis sintagmático de todos,es decir, aquel que haya producido menor cantidad de sintagmas.

Cuando se procesen textos que tengan una sola categoría asociada por palabra,este archivo será igual a "NombreTexto.APS", y por tanto, no tendrá ningún sentido.

El hecho de colocarle la extensión .APS, es debido a que todos los ficheros quecontienen texto categorizado, la llevan.

6.7.4 resultado.TXT

En este fichero, se guardará información sobre el conjunto de frases y losfragmentos en los que se ha dividido cada una de ellas. Esta información será del tipo:número mínimo y máximo de palabras en una frase, número mínimo y máximo depalabras en un fragmento, longitud media de la frase y de los fragmentos (en palabras).

También se almacenarán el número de frases de que consta el texto, el númerode fragmentos en que se han dividido esas frases, y los porcentajes de frases yfragmentos analizados correctamente.

6.7.5 segmento.TXT

En este fichero, se guardará el resultado de la búsqueda realizada por la función"Busca_Segmento_MasLargo". Por tanto, se almacenará la descripción del sintagmamás largo (con mayor número de palabras) que se ha analizado sintagmáticamentedentro de cada uno de los corpus que se han usado para el entrenamiento. Este fichero,tendrá el aspecto que se ofrece en el cuadro 6.12.

El sintagma simple más largo de todos los que hay en el texto analizado es:

SN[ Alfonso Javier Fernando del Pozo Herrería y Villegas] NPropio1 NPropio NPropio ContraccDEL NPropio NPropio ConjCoord NPropio

Este segmento tiene una longitud de 8 palabras.

Cuadro 6.12. Fichero segmento.TXT.

Page 46: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 124

6.7.6 NombreTexto.AMB y minimizado.AMB

Aquí, se almacenarán los análisis de aquellas frases que han resultado ambiguaspara el analizador, es decir, aquellas de las cuales han salido más de cincuenta posiblesanálisis sintácticos (recordar que cincuenta, es el número máximo de análisis queestablecimos, para que una frase no fuera ambigua).

Las frases ambiguas que se produzcan en el análisis sintagmático, se guardaránen "NombreTexto.AMB", por otro lado, aquellas que resulten ambiguas una vezrealizado el análisis sintáctico de alto nivel, se almacenarán en "minimizado.AMB".

Estos análisis se separan en un fichero aparte, con el objetivo de sacar lasconsecuencias de su ambigüedad. Si esta ambigüedad es debida a la multitud de reglasgramaticales en las que encaja la construcción de la frase, se intentará reducir,eliminando aquellas reglas que puedan parecer reiterativas con respecto a algún aspectosintáctico de la lengua; si no es así, es decir, si la ambigüedad se produce por lasmúltiples categorías que puedan tener cada una de las palabras que componen la frase, opor la excesiva longitud de la cadena analizada, no se podrá tomar ninguna medida, porlo que se etiquetará esa frase como ambigua.

En los textos compuestos de palabras con una sola categoría asociada, laambigüedad es nula prácticamente. Para hacerse a una idea, en el corpus deentrenamiento número dos, hay dos fragmentos ambiguos y el total de fragmentosanalizados dentro del mismo fue de 9109.

6.8 FICHEROS DE PREPROCESO

En este apartado se van a describir un archivo que contendrá un programa en ellenguaje PERL, que someterá a nuestro archivo de entrada (NombreTexto.APS), a unpreproceso que reducirá diversos errores de categorización que se detectaron en esaclase de archivos (texto categorizado).

6.8.1 Propios.PER

El nombre del archivo, se dio porque en un principio se creó para tratar elproblema del nombre propio tratado en el apartado 4.1.2 del capítulo cuarto, por el cualtuvimos que inventar nuevas categorías 860.

Más tarde, a medida que se iba entrenando el analizador con diversos corpuselectrónicos, se tuvieron que ir añadiendo más cambios en las categorizaciones, comopor ejemplo, aquella de los años también explicada en el mismo apartado que se hacitado antes.

Page 47: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 125

Finalmente, el mayor problema de categorización que se ha dado, ha sido acausa de las diferentes locuciones (adverbiales, prepositivas, conjuntivas, sustantivas...),las cuales tuvieron que ser tratadas después de la categorización de textos. Se tuvo queechar mano de un programa que transformara en locuciones, expresiones del tipo: fuerade, para que, de que, a fin de, a favor de, habida cuenta, medio ambiente, país miembro,tales como, cerca de, gracias a... y muchas más que no creemos que se deban enumerar.

Este programa, es llamado a través de otro con el mismo nombre pero conextensión .BAT. "Propios.BAT", pasará como parámetro a "Propios.PER", el ficherocon texto categorizado, y los resultados de la aplicación del programa en PERL, losguardará en otro fichero de salida, que será el que usemos como entrada de nuestroanalizador.

6.9 FICHEROS DE POSPROCESO

Ya se ha comentado, que en el proceso de depuración de la gramática, así comode todos los procesos que forman parte del análisis total (leer, cortar, cargar...), esfundamental el análisis de ciertos archivos después de pasarlos por el analizador. Unode ellos, y el principal, es aquel que contiene los paréntesis etiquetados que producenlos árboles sintácticos mínimos, es decir, "minimizado.ETQ" en el caso del análisissintagmático, y "minimizadoCRG.ETQ" en el caso del análisis de alto nivel.

Estos ficheros, se generan después de haber analizado alrededor de 10.000fragmentos por cada corpus, lo que por tanto generará unos 10.000 árboles sintácticos,en donde se expone la cadena de paréntesis etiquetados, a lo que se suman los símbolosterminales. Para analizar esto, el gasto en folios y tinta de la impresora es demasiadogrande, por lo que se hizo necesario, recurrir de nuevo al PERL, para reducir al máximoese formato.

Se crearon dos programas:

• Etq_min.PER• Filtra.PER

6.9.1 Etq_min.PER

Reduce al máximo el número de líneas del archivo de paréntesis etiquetados quequeremos obtener. Elimina todas aquellas líneas que no tienen información sintáctica,excepto aquella que marca el principio del análisis de cada fragmento, esto implicaeliminar retornos de carro, líneas que marcan el fin de análisis (ya tenemos el principio,por lo que no nos hace falta el fin), etc.

Por tanto, nos queda como resultado intermedio, un fichero con una marca deinicio de análisis, y líneas con paréntesis etiquetados y líneas con símbolos terminales,es decir, aquellas cuya información es interesante.

Page 48: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 126

6.9.2 Filtra.PER

Con este programa, eliminamos también los símbolos terminales, los cuales noson del todo necesarios, para el análisis de los diferentes sintagmas que ha analizadonuestro sistema. De todas formas, si tenemos dificultades en el análisis de alguno de lossintagmas, se puede acudir a los símbolos terminales, los cuales no desaparecerán delfichero que teníamos en un principio.

Por tanto, obtenemos un fichero muy reducido, pero que nos dará bastantefacilidad para conseguir depurar las diversas etapas del analizador.

Por último, mencionar que a estos programas se les llamará mediante otroarchivo con extensión .BAT, llamado "Etq_min.BAT", el cual les pasará comoparámetro, el archivo con los paréntesis etiquetados mínimos que se ha obtenidodespués de llevar a cabo el análisis sintáctico de bajo y alto nivel.

Page 49: 6. ANALIZADOR SINTAGMÁTICO - lorien.die.upm.eslorien.die.upm.es/juancho/pfcs/DPF/capitulo6.pdf · Capítulo 6. Analizador sintagmático Página 79 6. ANALIZADOR SINTAGMÁTICO Este

Capítulo 6. Analizador sintagmático Página 127

6. ANALIZADOR SINTAGMÁTICO ..............................................................................................796.1 Planteamiento........................................................................................................................796.2 Ficheros fuente......................................................................................................................81

6.2.1 arbolSint.INI..................................................................................................................826.2.2 ReglasCorte.TER...........................................................................................................836.2.3 NombreGramatica.860...................................................................................................856.2.4 NombreTexto.APS.........................................................................................................876.2.5 sintagmas.TXT ..............................................................................................................886.2.6 PalabrasEspeciales.TXT.................................................................................................906.2.7 TerminalesEspeciales.TXT ............................................................................................92

6.3 Nueva funcionalidad del analizador. Análisis sintagmático.....................................................936.3.1 Funciones de carga de datos ...........................................................................................94

6.3.1.1 FabricaArrayTridimensional.......................................................................................946.3.1.2 LlenaArrayTerminales................................................................................................966.3.1.3 CargaDatosEnMemoria ..............................................................................................97

6.3.2 Funciones de análisis .....................................................................................................986.3.2.1 LeeTextoCategorizado ...............................................................................................98

6.3.2.1.1 CompruebaCategoria............................................................................................996.3.2.1.2 CortaFrase...........................................................................................................103

6.3.2.2 FiltroETQ ................................................................................................................1046.3.2.3 CalculaMinNumSegmentos......................................................................................1066.3.2.4 ImprimeCYK_1Arbol ..............................................................................................1076.3.2.5 ImprimeCYK_1Arbol_Minimizado..........................................................................107

6.3.3 Recategorizador ...........................................................................................................1086.3.3.1 RecategorizaTexto ...................................................................................................1096.3.3.2 RecategorizaTexto_NoAnalizado .............................................................................109

6.4 Ficheros intermedios............................................................................................................1106.4.1 Ficheros intermedios del análisis sintagmático..............................................................110

6.4.1.1 arbol_minimo.ETQ ..................................................................................................1106.4.1.2 Minimizado.ETQ .....................................................................................................1116.4.1.3 NombreTexto.FNL...................................................................................................112

6.4.2 Ficheros intermedios del análisis de alto nivel ..............................................................1126.4.2.1 Res_Analisis.RES ....................................................................................................1126.4.2.2 Categorias.CAT .......................................................................................................1136.4.2.3 Minimizado_Buenas.CRG........................................................................................1136.4.2.4 minimizado.CRG .....................................................................................................1146.4.2.5 arbol_minimoCRG.ETQ ..........................................................................................1166.4.2.6 minimizado.FNL......................................................................................................116

6.5 Análisis sintáctico de alto nivel ............................................................................................1176.5.1 Gramática de alto nivel ................................................................................................1186.5.2 Función de lectura........................................................................................................118

6.6 Funciones de información general........................................................................................1196.6.1 Busca_Segmento_MasLargo ........................................................................................1206.6.2 CortaAmbiguas............................................................................................................1206.6.3 ImprimeResultados ......................................................................................................121

6.7 Ficheros resultado................................................................................................................1226.7.1 mimizadoCRG.ETQ.....................................................................................................1226.7.2 minimizado.ERR..........................................................................................................1226.7.3 TextoRecategorizado.APS............................................................................................1236.7.4 resultado.TXT..............................................................................................................1236.7.5 segmento.TXT.............................................................................................................1236.7.6 NombreTexto.AMB y minimizado.AMB......................................................................124

6.8 Ficheros de preproceso ........................................................................................................1246.8.1 Propios.PER ................................................................................................................124

6.9 Ficheros de posproceso........................................................................................................1256.9.1 Etq_min.PER...............................................................................................................1256.9.2 Filtra.PER....................................................................................................................126