Amestar un par de llingües nuevu

From Apertium
Revision as of 17:27, 9 November 2008 by Francis Tyers (talk | contribs)
Jump to navigation Jump to search

Esti tutorial va desplicar el mou d'entamar un par nuevu de llingües nuevu pa la ferramienta de torna automática Apertium.

Nun se precisa conocimientu dalu de llingüística o sistemes de torna acullá de ser capaz d'estremar nomes de verbos (y preposiciones, etc.)

Entamu

Apertium ye, como posiblemente pescanciaras, un sistema de torna automática. Bono, nun del too, ye una plataforma de torna. Ufre un motor y unes ferramientes tales que te permitirán ellaborar los tos propios sistemes de torna. Lo único que fai falta ye escribir datos. L'aniciu d'una nueva llingua consiste básicamente en tres diccionarios y delles regles (de reorganización de pallabres y otres cuestiones gramaticales).

Pa una introducción más detallada de como funciona too, hai dellos papelos interesantes na páxina del proyeutu apertium.sourceforge.net.

Vas precisar

  • lttoolbox (>= 3.0.0)
  • libxml útiles (xmllint etc.)
  • apertium (>= 3.0.0)
  • un editor de testu (o un editor XML especializáu si lo prefieres)

Esti documentu nun va desplicar como instalar estos paquetes, pa más información ve por favor la estaya de documentación del sitiu web d'Apertium.

¿En que consiste un par de llingües?

Apertium ye un sistema de torna de lo que se conoz como tranferencia superficial. Ello ye qu'emplega básicamente los diccionarios y les regles de transferencia superficial. Na práutica, la transferencia superficial estrémase de la tranferencia en profundidá en que nun fai un analís sintáuticu completu

les regles son operaciones típiques en grupos d'unidaes léxiques en vez d'operaciones n'árboles sintáuticos. Nun nivel básicu hai tres diccionarios principales
  1. Diccionariu morfolóxicu de la llingua xx: recueye les regles d'inflexón de les pallabres de la llingua xx. Nel nuesu exemplu llamarémoslu: apertium-sh-en.sh.dix
  2. Diccionariu morfolóxicu de la llingua yy: recueye les regles d'inflexón de les pallabres de la llingua yy. Nel nuesu exemplu llamarémoslu: apertium-sh-en.en.dix
  3. Diccionariu billingüe: caltién les correspondencies ente les pallabres y símbolos de les dos llingües. Nel nuesu exemplu llamarémoslu: apertium-sh-en.sh-en.dix

Nun par de llingües, dambes puen ser orixen y fin de les tornes en términos relativos.

Hai amás dos arquivos pa la transferencia de regles. Son eses regles les encargaes de decidir como les pallabres se reorganicen nos enunciaos, p.e. chat noir -> cat black -> black cat. Tamién toma les decisiones de xéneru, númberu, etc. Les regles puen usase tanto p'añadir como pa eliminar elementos léxicos, como se desplicará más tarde. Estos arquivos son:

  • Regles de transferencia de la llingua xx a la llingua yy: esti archivu contién les regles de como la llingua xx tien de camudar a la llingua yy. Nel nuesu exemplu: apertium-sh-en.trules-sh-en.xml
  • Regles de transferencia de la llingua yy a la llingua xx: esti archivu contién les regles de como la llingua yy tien de camudar a la llingua xenx. Nel nuesu exemplu: apertium-sh-en.trules-en-sh.xml

Dellos pares de llingües que s'ufierten caltienen otros arquivos, pero nun mos ocuparemos d'ellos equí. Estos arquivos son los únicos que se precisen pa xenerar un sistema funcional.

Un par de llingües

Como s'alvirtiera nos nomes d'arquivu, esti tutorial emplega l'exemplu del par de llingües serbo-croata ya inglés pa desplicar como crear un sistema básicu. Esti nun ye un par ideal por mor de que'l sistema funciona meyor entre pares de llingües más averaes ente elles. Nun ye problema polo cenciello de los exemplos qu'equí s'amuesen.

Una nota breve no que cinca a los términos

Dellos términos han comprendese primero de siguir.

El primeru ye «lema». Un lema ye'l mou de citar una pallabra. Ye daqué asina como'l raigañu d'una pallabra. Por exemplu el lema de la pallabra gatos ye «gatu». Nos nomes n'asturianu esti sedrá normalmente la forma en masculín singular de la pallabra en cuestión. Pa los verbos, el lema sedría l'infinitivu. P.e. el lema de «canciemos» sedría «canciar».

El segundu ye «símbolu». Nel contestu d'Apertium, símbolu refierse a la etiqueta gramatical. La pallabra gatos ye un nome plural, poro caltendrá el símbolu de nome y el símbolu de plural. Nos módulos d'entrada y salida d'Apertium éstes apaecen ente paréntesis angulaos (<,>), como sigue:

  • <n>; pa nome.
  • <pl>; pa plural.

Otros exemplos de símbolos son <sg>; singular, <p1> primer persona, <pri> presente d'indicativu, etc. Cuando apaecen ente paréntesis angulaos, los símbolos van venceyaos a etiquetes. Pue albidrase qu'en munchos de los pares de llingües disponibles anguaño les definiciones de símbolos son acrónimos o contraiciones de pallabres en catalán. Por exemplu, vbhaver — de vb (verbu) and haver («tener» en catalán). Los símbolos tán definíos nes etiquetes <sdef> y emplegaos en etiquetes <s>

El tercer términu ye «paradigma». Nel contestu d'Apertium el paradigma refierse al mou d'inflexón d'un grupu concretu de pallabres. Nel diccionariu morfolóxicu, los lemes (ver enriba) vencéyense a paradigmes que nos permiten desplicar como un lema dáu inflexiona ensin tener d'escribir toles terminaciones.

Un exemplu de la utilidá d'esto ye que si quixéramos amestar los dos axetivos «happy» y «lazy», en vez d'añedir dos paquetes de la mesma cosa:

  • happy, happ (y, ier, iest)
  • lazy, laz (y, ier, iest)

guardaríamos namás ún, y diríamos entós «lazy inflexona como happy», y ensin dubia «shy inflexona como happy», «naughty inflexona como happy», «friendly inflexona como happy», etc. Nesti exemplu, happy sedría'l paradigma, el modelu de referencia pol qu'otros inflexonen. La descripción precisa de como se define esto desplicarémosla llueu. Los paradigmes defínense n'etiquetes <pardef>, y enllázase a ellos n'etiquetes <par>.

Prepaŕandose pa entamar

Diccionarios monollingües

Ver tamién: Incubator

Vamos a entamar creando'l nuesu primer diccionariu. El diccionariu ye un arquivu XML. Arranca'l to editor de testu y copia lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<dictionary>

</dictionary>

Ello ye'l mou de dicir que queremos entamar un diccionariu. Pa que seya útil precisamos amestar delles entraes más, primero un alfabetu. Ello defín el conxuntu de lletres que va a usase nel diccionariu. Pal nuesu exemplu servo-croata sería daqué apaecío a lo que sigue, calteniendo toles lletres del alfabetu servo-croata:

<alphabet>ABCČĆDDžĐEFGHIJKLLjMNNjOPRSŠTUVZŽabcčćddžđefghijklljmnnjoprsštuvzž</alphabet>

Afita'l alfabetu embaxo la etiqueta <dictionary>.

Agora habemos definir dellos símbolos. Pa entamar colo más cenciello, nomes (n) en singular (sg) y plural (pl).

<sdefs>
   <sdef n="n"/>
   <sdef n="sg"/>
   <sdef n="pl"/>
</sdefs>

Los nomes pa los símbolos nun tienen que ser tan curtios, pero polo práutico d'aforrar testu y tiempu tie sén l'acurtialos.

Desafortunadamente, nun ye tan cenciello, y los nomes en servo-croata inflexonen, amás d'en númberu, en xéneru y casu. Por embargu, pa la fin d'esti exemplu emplegaremos namás el nome en masculín y en casu nominativu (un exemplu completu pue atopase a lo cabero d'esti arquivu).

Lo siguiente ye definir una estaya pa los paradigmes,

<pardefs>

</pardefs>

y otra estaya de diccionariu:

<section id="main" type="standard">

</section>

Hai dos tipos d'estayes: la del primer tipu ye una seición estándar que caltién pallabres, enclíticos, etc. La del segundu, ye una seición na que s'inclúi normalmente la puntuación y daqué cosa más. Nun apaez equí nenguna seición incondicional, magar que la veremos depués.

Poro, el nuesu arquivu tendrá un aspeutu apaecíu a:

<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
   <sdefs>
     <sdef n="n"/>
     <sdef n="sg"/>
     <sdef n="pl"/>
   </sdefs>
   <pardefs>

   </pardefs>
   <section id="main" type="standard">

   </section>
</dictionary>

Con estes yá tenemos la cadarma afitada y podemos entamar a amesta-y nomes. El nome en cuestión va ser «gramofon» (que quier dicir «tocadiscos» o «platu [xiradiscos]»).

Lo primero que tenemos que faer, por mor de que nun tenemos entá nengún paradigma, ye crear ún.

Hai remembrase que tamos asumiendo casu masculín y casu nominativu. La forma singular del nome ye «gramofon», y el plural ye «gramofoni». Asina:

<pardef n="gramofon__n">
   <e>
     <p>
       <l/>
       <r><s n="n"/><s n="sg"/></r>
     </p>
   </e>
   <e>
     <p>
       <l>i</l>
       <r><s n="n"/><s n="pl"/></r>
     </p>
   </e>
</pardef>

Nota: la etiqueta <l/> (equival a <l></l>) y denota que nun hai información extra qu'añedir pal singular.

De primeres pue paecer un mou poco claru de describir les coses, pero sides pa ello y la rapidez ye una d'elles. Tarás posiblemente naguando por saber qué son les etiquetes <e>,

, <l> y <r>. Bono,

  • e, pa entrada.
  • p, pa par.
  • l, pa izquierda (en.left).
  • r, pa drecha (en.right).

¿Por qué izquierda y drecha? Los diccionarios compilaranse depués en sistemes d'estáu definíu. Ello ye, compílense d'izquierda a drecha p'analizar les pallabres y de drecha a izquierda pa xenerar pallabres dende l'analís. Por exemplu.

* gramofoni (izquierda a drecha) gramofon<n><pl> (analís)
* gramofon<n><pl> (drecha a izquierda) gramofoni (xeneración)

Agora que yá definimos el paradigma, tenemos de venceyalu al so lema, gramofon. Ponémoslo na estaya que creáramos.

La entrada a poner na estaya ( </dictionary>

Necesitamos añedir una entrada pa la torna ente les dos pallabres. Daqué asina:

<e><p><l>gramofon<s n="n"/></l><r>gramophone<s n="n"/></r></p></e>

Nun diccionariu desarrolláu atoparemos milenta entraes, polo que ye preferible escribir una por ringlera por mor de facilitar la so llectura. Because there are a lot of these entries, they're typically written on one line to facilitate easier reading of the file. Otra vuelta apaecen les etiquetes <l> y <r>, y asina, compilamos de izquierda a drecha pa producir el diccionariu serbo-croata → inglés, y de drecha a izquierda pal inglés → servo-croata.

En faciendo esto, cuerri los siguientes comandos:

$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
$ lt-comp rl apertium-sh-en.sh.dix sh-en.autogen.bin

$ lt-comp lr apertium-sh-en.en.dix en-sh.automorf.bin
$ lt-comp rl apertium-sh-en.en.dix en-sh.autogen.bin

$ lt-comp lr apertium-sh-en.sh-en.dix sh-en.autobil.bin
$ lt-comp rl apertium-sh-en.sh-en.dix en-sh.autobil.bin

Pa xenerar los analizadores morfolóxicos (automorf), los xeneradores morfolóxicos (autogen) To generate the morphological analysers (automorf), the morphological generators (autogen) y les busques de pallabres (autobil), «bil» vien de billingüe.

Regles de transferencia

Asina que yá tenemos dos diccionarios morfolóxicos y unu billingüe. Tolo que precisamos agora ye una regla de transferencia pa los nomes. Los arquivos de regles de transferencia tienen la so propia DTD (transfer.dtd) que pue topase nel paquete Apertium. Davezu, cuando fai falta amestar una regla nueva, aconséyase echar una gueyaína a los arquivos de regles d'otros pares de llingües primero. Munches regles puen ser reutilizaes/reciclaes ente llingües. Por exemplu la que se describe embaxo podría ser útil pa les llingües que nun precisen suxetu.

L'entamu faise como les otres vegaes con la cadarma básica:

<?xml version="1.0" encoding="UTF-8"?>
<transfer>

</transfer>

Pel momentu, al desconocer el casu, namás precisamos crear una regla que pañe los símbolos gramaticales y los devuelva otra vez.

Pa emprimar necesitamos definir categoríes y atributos. Tienen la fin de permitinos agrupar símbolos gramaticales. Les categoríes permítennos agrupar símbolos col propósitu d'igualos de mou que, por exemplu, 'n.*' sedría una referencia a tolos nomes. Los atributos permítennos agrupar el repertoriu de símbolos que podríen escoyese dende ehí. Por exemplu ('sg' and 'pl' podríen agrupase nel atributu 'númberu').

Vamos añedir les estayes necesaries:

<section-def-cats>

</section-def-cats>
<section-def-attrs>

</section-def-attrs>

Como namás tamos inflexonando nomes en singular y plural hemos entós amestar una categoría pa nomes con un atributu pa númberu. Daqué asemeyao a:

Na estaya -def-cats añéde-y:

<def-cat n="nom">
   <cat-item tags="n.*"/>
</def-cat>

Esto paña tolos nomes (lemes siguíos por <n>) y refierse a ellos con la etiqueta <<nom>> (veremos el so emplegu más tarde).

Na estaya def-attrs, añede:

<def-attr n="nbr">
   <attr-item tags="sg"/>
   <attr-item tags="pl"/>
</def-attr>

y llueu

<def-attr n="a_nom">
   <attr-item tags="n"/>
</def-attr>

El primeru defín l'atributu nbr (númberu), que pue ser singular (sg) o plural (pl).

El segundu defín l'atributu a_nom (atributu nome).

A continuación vamos precisar añedir una estaya pa les variables globales:

<section-def-vars>

</section-def-vars>

Eses variables empléguense p'almacenar o transferir atributos ente regles. Per agora namás precisamos ún,

<def-var n="number"/>

Pa finar, hemos añedir una regla, pa pañar el nome y depués poder sacalu na forma correuta. Poro precisaremos una estaya de regles...

<section-rules>

</section-rules>

Camudando el ritmu de los exemplos anteriores, amosamos a continuación esta regla y darémos-y un repás.

<rule>
   <pattern>
     <pattern-item n="nom"/>
   </pattern>
   <action>
     <out>
       <lu>
         <clip pos="1" side="tl" part="lem"/>
         <clip pos="1" side="tl" part="a_nom"/>
         <clip pos="1" side="tl" part="nbr"/>
       </lu>
     </out>
   </action>
</rule>

La primer etiqueta <rule>, ensin dubia, defín una regla. La segunda <pattern> básicamente diz <<aplicar esta regla si s'atopa esti patrón>>. Nesti exemplu'l patrón correspuende a un nome simple (definíu pola categoría "nom"). Ha notase que los patrones correspuenden a los resultaos más llargos primero. Asina que si tienes tres regles, la primera correspondería "<prn><vblex><n>", la segunda a "<prn><vblex>" y la tercera a "<n>", el patrón escoyíu y la regla executada sedrá la primera.

Cada patrón ta venceyáu a una aición que produz una salida determinada. La salida ye una unidá léxica (lu).

La etiqueta <clip> permíte-y al usuariu escoyer y manipular atributos y partes de los elementos léxicos de la llingua orixe (side="sl"), o llingua meta (side="tl").

Vamos a compilalo y probalo. Les regles de transferencia compílense con:

$ apertium-preprocess-transfer apertium-sh-en.trules-sh-en.xml trules-sh-en.bin

Esto creará un archivu trules-sh-en.bin.

Y nesti momentu tamos preparaos pa probar el nuesu sistema de torna. Entá nos faltaría una parte perimportante, l'etiquetador the part-of-speech (PoS), pero desplicarémoslu dientro poco. Endagora podemos probalo como ye:

Pa emprimar vamos a analizar una pallabra, gramofoni:

$ echo "gramofoni" | lt-proc sh-en.automorf.bin 
^gramofon/gramofon<n><pl>$

Normalmente equí l'etiquetador PoS escoyería la versión morfolóxica correuta basándose na parte del discursu nel qu'apaez, pero al nun haber etiquetador PoS tovía podemos emplegar esti pequeñu script (gracies a Sergio) que dará salida al primer elementu recuperáu.

$ echo "gramofoni" | lt-proc sh-en.automorf.bin | \
  gawk 'BEGIN{RS="$"; FS="/";}{nf=split($1,COMPONENTS,"^"); for(i = 1; i<nf; i++) printf COMPONENTS[i]; if($2 != "") printf("^%s$",$2);}' | \
^gramofon<n><pl>$

Agora vamos a procesalo cola regla de transferencia:

$ echo "gramofoni" | lt-proc sh-en.automorf.bin | \
  gawk 'BEGIN{RS="$"; FS="/";}{nf=split($1,COMPONENTS,"^"); for(i = 1; i<nf; i++) printf COMPONENTS[i]; if($2 != "") printf("^%s$",$2);}' | \
  apertium-transfer apertium-sh-en.trules-sh-en.xml trules-sh-en.bin sh-en.autobil.bin

Dará la salida:

^gramophone<n><pl>$^@
  • 'gramophone' ye'l lema (lem) na posición 1 (pos="1") na llingua meta (side="tl").
  • '<n>' ye'l a_nom na posición 1 na llingua meta.
  • '<pl>' ye l'atributu de númberu (nbr) na posición 1 na llingua meta.

Pues intentar tu analís un poco distintos intentando camentar la salida.

Asina ye que tenemos la salida de la transferencia y que namás quedaría crear les formes inflexonaes na llingua meta. Pa ello emplegamos lt-proc, pero nel mou de xeneración (-g) y non d'analís.

$ echo "gramofoni" | lt-proc sh-en.automorf.bin | \
  gawk 'BEGIN{RS="$"; FS="/";}{nf=split($1,COMPONENTS,"^"); for(i = 1; i<nf; i++) printf COMPONENTS[i]; if($2 != "") printf("^%s$",$2);}' | \
  apertium-transfer apertium-sh-en.trules-sh-en.xml trules-sh-en.bin sh-en.autobil.bin | \
  lt-proc -g sh-en.autogen.bin

gramophones\@

Y con eso ya podemos falar del aniciu del sistema de traducción de nomes serbo-croates en nomes ingleses. Camentarás que nun ye enforma útil, pero dirá complicándose poco a poco. Y nun te preocupes pol símbolu '@', desplicarémoslu ceo tamién.

Piensa en delles pallabres qu'inflexones igual que gramofon. Sedría bona idega amestales al diccionariu. Nun fai falta añedir nengún paradigma, namás les entraes nos diccionarios monollingüe y billingüe.