Using xml Syntax Highlighting
<etiquetas>
<PI ID="8aa" Lema1="principio" GC="Adverb" DP="1" Range="Operator" FU="No" MET="No" DR="Coargumentation1" ED="No" MOD="No" EVI="No" SA="No" DEX="No">en parte</PI>
<PI ID="9a" Lema1="aparte" Lema2="de" GC="Adverb" DP="1" Range="Operator" FU="No" MET="No" DR="Coargumentation1" ED="No" MOD="No" EVI="No" SA="No" DEX="No">aparte de</PI>
</etiquetas>
<PI ID="8aa" Lema1="principio" GC="Adverb" DP="1" Range="Operator" FU="No" MET="No" DR="Coargumentation1" ED="No" MOD="No" EVI="No" SA="No" DEX="No">en parte</PI>
<PI ID="9a" Lema1="aparte" Lema2="de" GC="Adverb" DP="1" Range="Operator" FU="No" MET="No" DR="Coargumentation1" ED="No" MOD="No" EVI="No" SA="No" DEX="No">aparte de</PI>
</etiquetas>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Lo que quiero hacer es extraer los nombres de los atributos y colocarlos en formato tabular de Latex como elementos de la primera fila de la tabla, mientras que el contenido de los atributos irán en la segunda fila de la tabla. De tal manera que quede así en la tabla en Latex, más o menos, solo que con las líneas que ahora no voy a poner:
- Código: Seleccionar todo
ID Lema1 etc.
8aa aparte etc.
ID Lema1 Lema2 etc.
9a aparte que etc.
Así es más fácil leer la información sobre el significado de estas palabras que están etiquetadas en mi corpus.
De momento solo quiero hacer una pequeña tabla por cada etiqueta.
Ya lo tengo todo hecho. Pero me gustaría saber dos cosas que mejorarían el programa. Hasta el momento con respecto a la primera fila, como son valores fijos, al crear el documento Latex he puesto simplemente:
Using perl Syntax Highlighting
print "ID \& Lemal1 \& etc."; # y así consigo la primera columna.
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
con respecto a la segunda fila se extrae después de pasar el módulo de XML.
EL programa que genera parte de lo que luego será el documento en Latex es este:
Using perl Syntax Highlighting
#!/usr/bin/perl
use XML::Simple;
my $mds = XMLin("coargumentacion1.xml");
for( @{$mds->{PI}} ) {
print "begin\{tabular\}\{\|\|l \| c \| r\|\|\}\n";
print "\\hline\n";
print "ID \& Lema1 \& GC \& DP \& Range \& FU \& MET \& DR \& ED \& MOD \& EVI \& SA \& DEX \\\\\n";
print "\\hline\n";
print "$_->{ID} \& $_->{Lema1} \& $_->{GC} \& $_->{DP} \& $_->{Range} \& $_->{FU} \& $_->{MET} \& $_->{DR} \& $_->{ED} \& $_->{MOD} \& $_->{EVI} \& $_->{SA} \& $_->{DEX} \& \\\\ \n";
print "\\hline\n";
print "end\{tabular\}\n";
}
use XML::Simple;
my $mds = XMLin("coargumentacion1.xml");
for( @{$mds->{PI}} ) {
print "begin\{tabular\}\{\|\|l \| c \| r\|\|\}\n";
print "\\hline\n";
print "ID \& Lema1 \& GC \& DP \& Range \& FU \& MET \& DR \& ED \& MOD \& EVI \& SA \& DEX \\\\\n";
print "\\hline\n";
print "$_->{ID} \& $_->{Lema1} \& $_->{GC} \& $_->{DP} \& $_->{Range} \& $_->{FU} \& $_->{MET} \& $_->{DR} \& $_->{ED} \& $_->{MOD} \& $_->{EVI} \& $_->{SA} \& $_->{DEX} \& \\\\ \n";
print "\\hline\n";
print "end\{tabular\}\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
y el resultado es este:
Using latex Syntax Highlighting
begin{tabular}{||l | c | r||}
\hline
ID & Lema1 & GC & DP & Range & FU & MET & DR & ED & MOD & EVI & SA & DEX \\
\hline
8aa & principio & Adverb & 1 & Operator & No & No & Coargumentation1 & No & No & No & No & No & \\
\hline
end{tabular}
\hline
ID & Lema1 & GC & DP & Range & FU & MET & DR & ED & MOD & EVI & SA & DEX \\
\hline
8aa & principio & Adverb & 1 & Operator & No & No & Coargumentation1 & No & No & No & No & No & \\
\hline
end{tabular}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
y luego esto se procesa en Latex con una cabecera y las marcas de inicio y final de documento y ya tengo la tabla en Latex.
Bien.
El caso es que este programa tiene un problema notorio, no siempre los nombres de atributos son los mismos, con lo que no pueden ser fijos. Por ejemplo, a veces hay Lema1, y otras veces hay Lema1 y Lema2, porque Lema2 es opcional, depende de si la palabra que queremos etiquetar es una multiword o no.
Pues bien. Me gustaría saber cómo se convoca desde el módulo de XML::Simple los nombres de los atributos (que no su contenido), en este caso: ID, Lema1, etc. para poder meterlos en un array e imprimirlos como fila 1 de la tabla de Latex.
Al mismo tiempo, el programa de antes también saca los contenidos de los atributos cuando estos son conocidos, pero en el fondo desconozco si una etiqueta va a tener dos lemas o uno, con lo que necesito hacer un hash entre nombre de atributo y su valor y luego llamar al valor para construir la segunda fila.
Estas son mis dudas, por favor, ¿me podéis contestar a estas dos preguntas? Y en el caso de que sea demasiado básico, ¿me podéis recomendar un manual sobre el módulo XML de perl donde se explique específicamente cómo meter en variables los nombres de los atributos y asociarlos en hash a sus contenidos?