Actualizar diccionario es-gl
Añadir una entrada
Para añadir una entrada:
Añadirla al diccionario de Gallego
En apertium-es-gl.gl.dix.xml. En la sección principal:
Hacia el final.
Añadir una entrada
píntega
Etiquetas opcionales
- "lm" descripción
- "a" autor
- "par": indica reglas para el uso, en este caso la aba__n que está al principio del documento
Añadirla al diccionario de castellano.
En apertium-es-gl.es.dix.xml
En la sección principal, hacia el final
salamandra
Igual que en el caso anterior las etiquetas opcionales
Las reglas funcionan igual, aunque cada diccionario emplea sus propios nombres:
Añadirla a los pares de traducción
En apertium-es-gl.es-gl.dix.xml
salamandra píntega
Compilar e instalar
#!/bin/bash export APERTIUM_CFLAGS=-I/usr/local/apertium/include export APERTIUM_LIBS=-L/usr/local/apertium/lib/ make uninstall make clean make make install
Modificar diccionario a partir de una lista de palabras
Los diccionarios se pueden modificar fácilmente a partir de una lista de palabras, en este ejemplo empleamos el módulo apertium-es-gl (versión 1.0.8), un listado de palabras en un archivo CSV (exportado desde LibreOffice en este formato) y un script en Perl que convierte el archivo CSV a los XML que espera Apertium.
Para compilarlo:
#!/bin/bash ./convierteDicionario.pl lista-termos.csv make uninstall make clean make make install
El script en Perl convierteDiccionario.pl és el siguiente (y bastante mejorable):
#!/usr/bin/perl $| = 1 ; use XML::DOM ; use Text::CSV_XS ; use File::Copy "cp" ; use Data::Dumper ; my $PREFIX_DICT = "apertium-es-gl" ; my $parserES = new XML::DOM::Parser ; my $parserGL = new XML::DOM::Parser ; my $parserES_GL = new XML::DOM::Parser ; my $dict_ES = $PREFIX_DICT . ".es.dix.xml" ; my $dict_GL = $PREFIX_DICT . ".gl.dix.xml" ; my $dict_ES_GL = $PREFIX_DICT . ".es-gl.dix.xml" ; if ( ! -e "$dict_ES.orig" ) { copy ( $dict_ES, "$dict_ES.orig" ) ; } if ( ! -e "$dict_GL.orig" ) { copy ( $dict_GL, "$dict_GL.orig" ) ; } if ( ! -e "$dict_ES_GL.orig" ) { copy ( $dict_ES_GL, "$dict_GL.orig" ) ; } print STDOUT "Interpretando arquivo ES...\n" ; $docES = $parserES->parsefile ( 'apertium-es-gl.es.dix.xml.orig', ProtocolEncoding => 'UTF-8' ) ; print STDOUT "Interpretando arquivo GL...\n" ; $docGL = $parserGL->parsefile ( 'apertium-es-gl.gl.dix.xml.orig' ) ; print STDOUT "Interpretando arquivo ES_GL...\n" ; $docES_GL = $parserES_GL->parsefile ( 'apertium-es-gl.es-gl.dix.xml.orig' ) ; print STDOUT "Abrindo modificacions CSV...\n" ; open ( $fd, "<:encoding my="" text::csv_xs-="">new () ; $csv->column_names ($csv->getline ( $fd )) ; while ( $fila = $csv->getline_hr ( $fd )) { $r_es = $fila->{r_es} ; $r_gl = $fila->{r_gl} ; $es = $fila->{es} ; $gl = $fila->{gl} ; $tipo = $fila->{tipo} ; $eti = ( $fila->{etiqueta} == "" ) ? $es : $fila->{etiqueta} ; $autor = ( $fila->{autor} == "" ) ? "osl" : $fila->{autor} ; $sentido = ( $fila->{sentido} == "" ) ? "" : "r=\"" . $fila->{sentido} . "\"" ; $sec = $docES->getElementsByTagName ( "section")->[0] ; $ent = $docES->createElement ( "e" ) ; $ent->setAttribute ( "lm", $eti ) ; $ent->setAttribute ( "a", $autor ) ; $i = $docES->createElement ( "i" ) ; $p = $docES->createElement ( "par" ) ; $t = $docES->createTextNode ( $es ) ; $i->appendChild ( $t ) ; $p->setAttribute ( "n", $r_es ) ; $ent->appendChild ( $i ) ; $ent->appendChild ( $p ) ; $sec->appendChild ( $ent ) ; $secG = $docGL->getElementsByTagName ( "section" )->[0] ; $entG = $docGL->createElement ( "e" ) ; $entG->setAttribute ( "lm", $eti ) ; $entG->setAttribute ( "a", $autor ) ; $iG = $docGL->createElement ( "i" ) ; $pG = $docGL->createElement ( "par" ) ; $tG = $docGL->createTextNode ( $gl ) ; $iG->appendChild ( $tG ) ; $pG->setAttribute ( "n", $r_gl ) ; $entG->appendChild ( $iG ) ; $entG->appendChild ( $pG ) ; $secG->appendChild ( $entG ) ; $secT = $docES_GL->getElementsByTagName ( "section" )->[0] ; $entT = $docES_GL->createElement ( "e" ) ; $pT = $docES_GL->createElement ( "p" ) ; $lT = $docES_GL->createElement ( "l" ) ; $tES = $docES_GL->createTextNode ( $es ) ; $sES = $docES_GL->createElement("s"); $sES->setAttribute("n",$tipo); $lT->appendChild($tES); $lT->appendChild($sES); $rT = $docES_GL->createElement ( "r" ) ; $tGL = $docES_GL->createTextNode ( $gl ) ; $sGL = $docES_GL->createElement("s"); $sGL->setAttribute("n",$tipo); $rT->appendChild($tGL); $rT->appendChild($sGL); $pT->appendChild($lT); $pT->appendChild($rT); $entT->appendChild ( $pT ) ; $secT->appendChild ( $entT ) ; } close ( $fd ) ; # Non empregar ...->printToFile, porque altera a codificacion (erro en XML::DOM sen correxir dende hai anos) open ( $fh, ">:encoding(UTF-8)", $dict_ES); $docES->print($fh); $docES->dispose; close ( $fh ) ; open ( $fh, ">:encoding(UTF-8)", $dict_GL); $docGL->print($fh); $docGL->dispose; close ( $fh ) ; open ( $fh, ">:encoding(UTF-8)", $dict_ES_GL); $docES_GL->print($fh); $docES_GL->dispose; close ( $fh ) ;