Difference between revisions of "Amestar un par de llingües nuevu"

From Apertium
Jump to navigation Jump to search
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{TOCD}}
{{TOCD}}
Amestar un par de llingües nuevu (esbozu)

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


Line 12: Line 10:
Pa una introducción más detallada de como funciona too, hai dellos papelos interesantes na páxina del proyeutu [http://apertium.sourceforge.net apertium.sourceforge.net].
Pa una introducción más detallada de como funciona too, hai dellos papelos interesantes na páxina del proyeutu [http://apertium.sourceforge.net apertium.sourceforge.net].


==Precisarás==
==Vas precisar==


* [[lttoolbox]] (>= 3.0.0)
* [[lttoolbox]] (>= 3.0.0)
Line 19: Line 17:
* un editor de testu (o un editor XML especializáu si lo prefieres)
* 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 seición de documentación del sitiu web d'Apertium.
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?==
==¿En que consiste un par de llingües?==
Line 38: Line 36:
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.
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.


==Par de llingües==
==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.
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 breve nota so los términos==
==Una nota breve no que cinca a los términos==


Dellos términos han comprendese primero de siguir.
Dellos términos han comprendese primero de siguir.
Line 63: Line 61:


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>.
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:
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<dictionary>

</dictionary>
</pre>
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:

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

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).
<pre>
<sdefs>
<sdef n="n"/>
<sdef n="sg"/>
<sdef n="pl"/>
</sdefs>
</pre>
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,
<pre>
<pardefs>

</pardefs>
</pre>
y otra estaya de diccionariu:
<pre>
<section id="main" type="standard">

</section>
</pre>
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:
<pre>
<?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>
</pre>
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:
<pre>
<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>
</pre>
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>, <p>, <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.
<pre>
* gramofoni (izquierda a drecha) gramofon<n><pl> (analís)
* gramofon<n><pl> (drecha a izquierda) gramofoni (xeneración)
</pre>
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 (<section>) será:
<pre>
<e lm="gramofon"><i>gramofon</i><par n="gramofon__n"/></e>
</pre>
Un gueyu rápidu a les abreviatures:

* lm, pa lema.
* i, pa identidá (lo que ta a la izquierda y a la drecha ye igual).
* par, pa paradigma.

Esta entrada defín el lema de la pallabra, gramofon, el raigañu, gramofon y el paradigma pol qu'inflexona gramofon__n. La diferencia ente lema y raigañu ye que'l lema ye'l mentáu de la pallabra mentantu que'l raigañu correspuende a lo qu'hai que quita-y al lema pa que se-y puedan amestar les terminaciones, ello ye, la parte invariable. Por exemplu en ast.gatu sedría «gat» (+u/a/os/es) y en ast.vaca «va» (+ca/ques). Tará más claro al ver depués dos entraes onde dambos, lema y raigañu seyan distintos.

Tamos yá preparaos pa probar el diccionariu. Grábalu y vamos llevalo pa la llínia de comandos. Necesitamos emprimar compilándolu (con lt-comp), depués probarémoslu (con lt-proc).
<pre>
$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
</pre>
Debería crear la salida:
<pre>
main@standard 12 12
</pre>
Al tar compilando d'izquierda a drecha creamos un analís. Vamos a crear una xeneración tamién.
<pre>
$ lt-comp rl apertium-sh-en.sh.dix sh-en.autogen.bin
</pre>
Nesti momentu el comandu debería crear la mesma salida.

Vamos a probalo. Cuerri lt-proc nel analizador.
<pre>
$ lt-proc sh-en.automorf.bin
</pre>
Agora prueba a escribir gramofoni (gramophones), y mira la salida:
<pre>
^gramofoni/gramofon<n><pl>$
</pre>
Y otra vuelta, pal diccionariu inglés, fai lo mismo, pero camuda la pallabra inglesa gramophone por gramofon, y camuda tamién la inflexón de plural. Pero ¿si quixeres emplegar más correutamente el términu «record player»? Desplicarémoslo depués.

Deberíes tener dos arquivos nel directoriu:

* apertium-sh-en.sh.dix que caltendría un diccionariu morfolóxicu serbo-croata (mui) básicu, y
* apertium-sh-en.en.dix que caltendría un diccionariu morfolóxicu inglés (mui) básicu.

===Diccionariu billingüe===

De magar que tenemos dos diccionarios morfolóxicos lo siguiente ye crear un diccionariu billingüe. Elli describe les equivalencies ente pallabres. Tolos diccionarios empleguen el mesmu formatu (especificáu na DTD, dix.dtd).

Crea un archivu nuevu, apertium-sh-en.sh-en.dix y copia la cadarma básica:
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
<alphabet/>
<sdefs>
<sdef n="n"/>
<sdef n="sg"/>
<sdef n="pl"/>
</sdefs>

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

</section>
</dictionary>
</pre>
Necesitamos añedir una entrada pa la torna ente les dos pallabres. Daqué asina:
<pre>
<e><p><l>gramofon<s n="n"/></l><r>gramophone<s n="n"/></r></p></e>
</pre>
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:
<pre>
$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
$ lt-comp rl apertium-sh-en.en.dix sh-en.autogen.bin

$ lt-comp lr apertium-sh-en.en.dix en-sh.automorf.bin
$ lt-comp rl apertium-sh-en.sh.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
</pre>
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:
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<transfer>

</transfer>
</pre>
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:
<pre>
<section-def-cats>

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

</section-def-attrs>
</pre>
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:
<pre>
<def-cat n="nom">
<cat-item tags="n.*"/>
</def-cat>
</pre>
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:
<pre>
<def-attr n="nbr">
<attr-item tags="sg"/>
<attr-item tags="pl"/>
</def-attr>
</pre>
y llueu
<pre>
<def-attr n="a_nom">
<attr-item tags="n"/>
</def-attr>
</pre>
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:
<pre>
<section-def-vars>

</section-def-vars>
</pre>
Eses variables empléguense p'almacenar o transferir atributos ente regles. Per agora namás precisamos ún,
<pre>
<def-var n="number"/>
</pre>
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...
<pre>
<section-rules>

</section-rules>
</pre>
Camudando el ritmu de los exemplos anteriores, amosamos a continuación esta regla y darémos-y un repás.
<pre>
<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>
</pre>

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:
<pre>
$ apertium-preprocess-transfer apertium-sh-en.trules-sh-en.xml trules-sh-en.bin
</pre>
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:
<pre>
$ echo "gramofoni" | lt-proc sh-en.automorf.bin
^gramofon/gramofon<n><pl>$
</pre>
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.
<pre>
$ 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>$
</pre>
Agora vamos a procesalo cola regla de transferencia:
<pre>
$ 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
</pre>
Dará la salida:
<pre>
^gramophone<n><pl>$^@
</pre>
* '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.
<pre>
$ 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\@
</pre>
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.

==Atacando los verbos==

Asina que yá tenemos un sistema que traduz nomes, pero eso ye un poco inútil, queremos traducir verbos, ¡y frases enteres tamién! ¿Qué tal si entamamos pol verbu "see" (ver)? En Serbo-Croata sería "videti". El Serbo-Croata ye una llingua que nun precisa suxetu léxicu, ello ye que nun suel usar pronomes personales antes de la forma conxugada del verbu. L'inglés sí. Entós, por exemplu: "I see" n'inglés tornaríase como "vidim" en Serbo-Croata.

* Vidim
* see<p1><sg>
* I see

Nota: <p1> denota primer persona

Esto va ser importante a la de ponese a escribir les regles de tresferencia pa los verbos. Otros exemplos de llingües ensin suxetu léxicu obligatoriu seríen l'español, rumanu, polacu o l'asturianu mesmu. Ello tien tamién la consecuencia de que mentantu que en Serbo-Croata valdríanos con amestar el verbu al diccionariu morfolóxicu n'inglés precisaríamos añedir dambos: el verbu y el pronome personal. Pa pescancialo veremos los dos casos.

Les otres formes del verbu "videti" son: vidiš, vidi, vidimo, vidite, and vide; correspondientes a you see (singular), he sees, we see, you see (plural), and they see.

Hai dos formes de "you see", una ye formal singular (vidite) y otra ye informal singular (vidiš).

Vamos intentar traducir la oración: "Vidim gramofoni" a "I see gramophones". Pa economizar vamos añedir namás información abondo y vamos escaecer completar el restu de paradigmes (el restu de la conxugación del verbu) como exerciu pal llector.

El llector más amañosu camentaría nesti puntu que nun podríamos tornar la oración "vidim gramofoni" porque nun ye gramaticalmente correcta en Serbo-Croata. De fechu, la forma bona habría ser "vidim gramofone", por mor de que'l nome pañaría la forma l'acusativu. Tendremos qu'añedir esa forma tamién, pero creo que nun paga la pena metese pela información de casu agora, asina que la meteremos simplemente como otra posibilidá más pal plural. Poro, namás has copiar el bloque 'e' pa 'i' y troca 'i' por 'e' ehí.

Lo primero que necesitamos faer ye añedir dellos símbolos más. Pa entamar un símbolu pa 'verbu', que vamos llamar "vblex" (que quier dicir "verbu léxicu", n'oposición a los verbos modales y d'otru tipu). Los verbos tienen 'persona' y 'tiempu' amás de númberu, asina que vamos meter un par d'ellos tamién. Queremos traducir "I see", asina que pa persona hemos añedir "p1" (primer persona) y pa tiempu "pri" (presente d'indicativu).
<pre>
<sdef n="vblex"/>
<sdef n="p1"/>
<sdef n="pri"/>
</pre>
En fecho esto, como colos nomes, amestamos el paradigma pa la conxugación verbal. La primer ringlera será:
<pre>
<pardef n="vid/eti__vblex">
</pre>
El símbolu '/' úsase pa marcar onde entama la desinencia (parte ente les etiquetes <l> y </l>)

Depués la inflexón pa la primer persona de singular:
<pre>
<e>
<p>
<l>im</l>
<r>eti<s n="vblex"/><s n="pri"/><s n="p1"/><s n="sg"/></r>
</p>
</e>
</pre>
L'im' denota la terminación (como en 'vidim'). Ha añedise 'eti' a la etiqueta <r> que será cortao pola definición. El resto ye mui cenciello, 'vblex' ye verbu léxicu, 'pri' ye tiempu presente d'indicativu, 'p1' ye primer persona y 'sg' ye singular. Podemos tamién añedir el plural, que será igual, esceutu 'imo' en vez de 'im' y 'pl' en vez de 'sg'.

Depués d'esto necesitamos añadir un lema, como mapa del paradigma pa la seición principal:
<pre>
<e lm="videti"><i>vid</i><par n="vid/eti__vblex"/></e>
</pre>
Nota: el conteníu de <i> ya </i> ye la raíz, non el lema.

Esti ye tol trabayu nel diccionariu Serbo-Croata per agora. Vamos compilalo y prebalo.
<pre>
$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
main@standard 23 25
$ echo "vidim" | lt-proc sh-en.automorf.bin
^vidim/videti<vblex><pri><p1><sg>$
$ echo "vidimo" | lt-proc sh-en.automorf.bin
^vidimo/videti<vblex><pri><p1><pl>$
</pre>
Agora tenemos que faer lo mesmo pal diccionariu d'Inglés (alcuérdate d'añedir les mismes definiciones de símbolos qu'añediste al Serbo-Croata).

El paradigma ye:
<pre>
<pardef n="s/ee__vblex">
</pre>
porque el pásau ye 'saw'. Agora podemos faer dos coses. Podemos añadir la primera y segunda persona, magar que seya la mesma. De fechu, toles formes (esceutu la de tercera persona de singular) del verbu 'to see' son 'see'. Asina qu'en vez d'eso vamos faer una entrada namás pa 'see' y pondrémos-y namás el símbolu 'pri'.
<pre>
<e>
<p>
<l>ee</l>
<r>ee<s n="vblex"/><s n="pri"/></r>
</p>
</e>
</pre>
y como siempre, una entrada na seición principal:
<pre>
<e lm="see"><i>s</i><par n="s/ee__vblex"/></e>
</pre>
Grabamos, recompilamos y probamos:
</pre>
$ lt-comp lr apertium-sh-en.en.dix en-sh.automorf.bin
main@standard 18 19

$ echo "see" | lt-proc en-sh.automorf.bin
^see/see<vblex><pri>$
</pre>
Quédanos la entrada obligatoria nel diccionariu billingüe:
<pre>
<e><p><l>videti<s n="vblex"/></l><r>see<s n="vblex"/></r></p></e>
</pre>
(otra vuelta, nun escaezas añedir les sdefs de antes)

Y recompila:
<pre>
$ lt-comp lr apertium-sh-en.sh-en.dix sh-en.autobil.bin
main@standard 18 18
$ lt-comp rl apertium-sh-en.sh-en.dix en-sh.autobil.bin
main@standard 18 18
</pre>
Agora prebamos l'inventu:
<pre>
$ echo "vidim" | 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

^see<vblex><pri><p1><sg>$^@
</pre>
Conseguimos pasar l'analís correutamente, pero al intentar xenerar la forma superficial dende ehí, recibimos un '#', como embaxo:
<pre>
$ echo "vidim" | 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
#see\@
</pre>
Esti '#' quier dicir que'l xenerador nun ye a xenerar la forma léxica correuta porque nun la tien. ¿Qué ye esto?

Básicamente los analises nun cases, el 'see' nel diccionariu ye see<vblex><pri>, pero'l see que vien a buscar del transfer ye see<vblex><pri><p1><sg>. El llau del diccionariu Serbo-Croata tien más información que la que'l llau del Inglés precisa. Pues prebar amestando los símbolos perdíos al diccionariu Inglés, y depués recompilando y probando otra vuelta.

Por embargu, una forma más acertada d'evitar esto ye escribiendo una regla. Asina que, abrimos l'archivu de regles (apertium-sh-en.trules-sh-en.xml).

Tenemos qu'añedir una categoría nueva pa 'verbu'.
<pre>
<def-cat n="vrb">
<cat-item tags="vblex.*"/>
</def-cat>
</pre>
Necesitamos tamién añedir los atributos pa persona y tiempu. Esta vez vamos faelo d'un mou mui simple, pues amestar p2 y p3, pero p'aforrar espaciu yo nun lo voi faer.
<pre>
<def-attr n="temps">
<attr-item tags="pri"/>
</def-attr>

<def-attr n="pers">
<attr-item tags="p1"/>
</def-attr>
</pre>
Deberíamos añedir tamién un atributu pa verbos.
<pre>
<def-attr n="a_verb">
<attr-item tags="vblex"/>
</def-attr>
</pre>
Agora na regla:
<pre>
<rule>
<pattern>
<pattern-item n="vrb"/>
</pattern>
<action>
<out>
<lu>
<clip pos="1" side="tl" part="lem"/>
<clip pos="1" side="tl" part="a_verb"/>
<clip pos="1" side="tl" part="temps"/>
</lu>
</out>
</action>
</rule>
</pre>

Alcuérdate nel exemplu anterior cuando pusiste les etiquetes "clip" en comentarios y desapaecieron del módulu de tresferencia, esto ye lo que tamos faciendo equí. Garramos el verbu col analís completu, pero la salida ye un analís parcial (lema + etiqueta verbu + etiqueta tiempu).
Poro, si recompilamos eso, obtenemos:
<pre>
$ echo "vidim" | 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
^see<vblex><pri>$^@
</pre>
and:
<pre>
$ echo "vidim" | 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
see\@
</pre>
Prébalo con 'vidimo' (vemos) pa ver si obtienes la salida correcta.

Agora preba con "vidim gramofone":
<pre>
$ echo "vidim 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
see gramophones\@
</pre>

==See also==

*[[Building dictionaries]]
*[[Finding_errors_in_dictionaries]]
*[[Cookbook]]
*[[Chunking]]
*[[Contributing to an existing pair]]

[[Category:Documentation]]
[[Category:HOWTO]]
[[Category:Writing dictionaries]]
[[Category:Quickstart]]

Latest revision as of 07:00, 16 February 2015

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[edit]

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[edit]

  • 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?[edit]

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[edit]

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[edit]

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[edit]

Diccionarios monollingües[edit]

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.en.dix sh-en.autogen.bin

$ lt-comp lr apertium-sh-en.en.dix en-sh.automorf.bin
$ lt-comp rl apertium-sh-en.sh.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[edit]

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.

Atacando los verbos[edit]

Asina que yá tenemos un sistema que traduz nomes, pero eso ye un poco inútil, queremos traducir verbos, ¡y frases enteres tamién! ¿Qué tal si entamamos pol verbu "see" (ver)? En Serbo-Croata sería "videti". El Serbo-Croata ye una llingua que nun precisa suxetu léxicu, ello ye que nun suel usar pronomes personales antes de la forma conxugada del verbu. L'inglés sí. Entós, por exemplu: "I see" n'inglés tornaríase como "vidim" en Serbo-Croata.

  • Vidim
  • see<p1><sg>
  • I see

Nota: <p1> denota primer persona

Esto va ser importante a la de ponese a escribir les regles de tresferencia pa los verbos. Otros exemplos de llingües ensin suxetu léxicu obligatoriu seríen l'español, rumanu, polacu o l'asturianu mesmu. Ello tien tamién la consecuencia de que mentantu que en Serbo-Croata valdríanos con amestar el verbu al diccionariu morfolóxicu n'inglés precisaríamos añedir dambos: el verbu y el pronome personal. Pa pescancialo veremos los dos casos.

Les otres formes del verbu "videti" son: vidiš, vidi, vidimo, vidite, and vide; correspondientes a you see (singular), he sees, we see, you see (plural), and they see.

Hai dos formes de "you see", una ye formal singular (vidite) y otra ye informal singular (vidiš).

Vamos intentar traducir la oración: "Vidim gramofoni" a "I see gramophones". Pa economizar vamos añedir namás información abondo y vamos escaecer completar el restu de paradigmes (el restu de la conxugación del verbu) como exerciu pal llector.

El llector más amañosu camentaría nesti puntu que nun podríamos tornar la oración "vidim gramofoni" porque nun ye gramaticalmente correcta en Serbo-Croata. De fechu, la forma bona habría ser "vidim gramofone", por mor de que'l nome pañaría la forma l'acusativu. Tendremos qu'añedir esa forma tamién, pero creo que nun paga la pena metese pela información de casu agora, asina que la meteremos simplemente como otra posibilidá más pal plural. Poro, namás has copiar el bloque 'e' pa 'i' y troca 'i' por 'e' ehí.

Lo primero que necesitamos faer ye añedir dellos símbolos más. Pa entamar un símbolu pa 'verbu', que vamos llamar "vblex" (que quier dicir "verbu léxicu", n'oposición a los verbos modales y d'otru tipu). Los verbos tienen 'persona' y 'tiempu' amás de númberu, asina que vamos meter un par d'ellos tamién. Queremos traducir "I see", asina que pa persona hemos añedir "p1" (primer persona) y pa tiempu "pri" (presente d'indicativu).

<sdef n="vblex"/>
<sdef n="p1"/>
<sdef n="pri"/>

En fecho esto, como colos nomes, amestamos el paradigma pa la conxugación verbal. La primer ringlera será:

<pardef n="vid/eti__vblex">

El símbolu '/' úsase pa marcar onde entama la desinencia (parte ente les etiquetes <l> y </l>)

Depués la inflexón pa la primer persona de singular:

<e>
   <p>
     <l>im</l>
     <r>eti<s n="vblex"/><s n="pri"/><s n="p1"/><s n="sg"/></r>
   </p>
</e>

L'im' denota la terminación (como en 'vidim'). Ha añedise 'eti' a la etiqueta <r> que será cortao pola definición. El resto ye mui cenciello, 'vblex' ye verbu léxicu, 'pri' ye tiempu presente d'indicativu, 'p1' ye primer persona y 'sg' ye singular. Podemos tamién añedir el plural, que será igual, esceutu 'imo' en vez de 'im' y 'pl' en vez de 'sg'.

Depués d'esto necesitamos añadir un lema, como mapa del paradigma pa la seición principal:

<e lm="videti"><i>vid</i><par n="vid/eti__vblex"/></e>

Nota: el conteníu de ya ye la raíz, non el lema.

Esti ye tol trabayu nel diccionariu Serbo-Croata per agora. Vamos compilalo y prebalo.

$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
main@standard 23 25
$ echo "vidim" | lt-proc sh-en.automorf.bin
^vidim/videti<vblex><pri><p1><sg>$
$ echo "vidimo" | lt-proc sh-en.automorf.bin
^vidimo/videti<vblex><pri><p1><pl>$

Agora tenemos que faer lo mesmo pal diccionariu d'Inglés (alcuérdate d'añedir les mismes definiciones de símbolos qu'añediste al Serbo-Croata).

El paradigma ye:

<pardef n="s/ee__vblex">

porque el pásau ye 'saw'. Agora podemos faer dos coses. Podemos añadir la primera y segunda persona, magar que seya la mesma. De fechu, toles formes (esceutu la de tercera persona de singular) del verbu 'to see' son 'see'. Asina qu'en vez d'eso vamos faer una entrada namás pa 'see' y pondrémos-y namás el símbolu 'pri'.

<e>
   <p>
     <l>ee</l>
     <r>ee<s n="vblex"/><s n="pri"/></r>
   </p>
</e>

y como siempre, una entrada na seición principal:

<e lm="see"><i>s</i><par n="s/ee__vblex"/></e>

Grabamos, recompilamos y probamos:

$ lt-comp lr apertium-sh-en.en.dix en-sh.automorf.bin main@standard 18 19

$ echo "see" | lt-proc en-sh.automorf.bin ^see/see<vblex><pri>$

Quédanos la entrada obligatoria nel diccionariu billingüe:

<e><p><l>videti<s n="vblex"/></l><r>see<s n="vblex"/></r></p></e>

(otra vuelta, nun escaezas añedir les sdefs de antes)

Y recompila:

$ lt-comp lr apertium-sh-en.sh-en.dix sh-en.autobil.bin
main@standard 18 18
$ lt-comp rl apertium-sh-en.sh-en.dix en-sh.autobil.bin
main@standard 18 18

Agora prebamos l'inventu:

$ echo "vidim" | 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 

^see<vblex><pri><p1><sg>$^@

Conseguimos pasar l'analís correutamente, pero al intentar xenerar la forma superficial dende ehí, recibimos un '#', como embaxo:

$ echo "vidim" | 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
#see\@

Esti '#' quier dicir que'l xenerador nun ye a xenerar la forma léxica correuta porque nun la tien. ¿Qué ye esto?

Básicamente los analises nun cases, el 'see' nel diccionariu ye see<vblex><pri>, pero'l see que vien a buscar del transfer ye see<vblex><pri><p1><sg>. El llau del diccionariu Serbo-Croata tien más información que la que'l llau del Inglés precisa. Pues prebar amestando los símbolos perdíos al diccionariu Inglés, y depués recompilando y probando otra vuelta.

Por embargu, una forma más acertada d'evitar esto ye escribiendo una regla. Asina que, abrimos l'archivu de regles (apertium-sh-en.trules-sh-en.xml).

Tenemos qu'añedir una categoría nueva pa 'verbu'.

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

Necesitamos tamién añedir los atributos pa persona y tiempu. Esta vez vamos faelo d'un mou mui simple, pues amestar p2 y p3, pero p'aforrar espaciu yo nun lo voi faer.

<def-attr n="temps">
   <attr-item tags="pri"/>
</def-attr>

<def-attr n="pers">
   <attr-item tags="p1"/>
</def-attr>

Deberíamos añedir tamién un atributu pa verbos.

<def-attr n="a_verb">
   <attr-item tags="vblex"/>
</def-attr>

Agora na regla:

<rule>
   <pattern>
     <pattern-item n="vrb"/>
   </pattern>
   <action>
     <out>
       <lu>
         <clip pos="1" side="tl" part="lem"/>
         <clip pos="1" side="tl" part="a_verb"/>
         <clip pos="1" side="tl" part="temps"/>
       </lu>
     </out>
   </action>
</rule>

Alcuérdate nel exemplu anterior cuando pusiste les etiquetes "clip" en comentarios y desapaecieron del módulu de tresferencia, esto ye lo que tamos faciendo equí. Garramos el verbu col analís completu, pero la salida ye un analís parcial (lema + etiqueta verbu + etiqueta tiempu). Poro, si recompilamos eso, obtenemos:

$ echo "vidim" | 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
^see<vblex><pri>$^@

and:

$ echo "vidim" | 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
see\@

Prébalo con 'vidimo' (vemos) pa ver si obtienes la salida correcta.

Agora preba con "vidim gramofone":

$ echo "vidim 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
see gramophones\@

See also[edit]