Difference between revisions of "Apertium Nieuw talenpaar HOWTO"

From Apertium
Jump to navigation Jump to search
Line 53: Line 53:
 
Zo kunnen we simpelweg 1 model opslaan en dan zeggen dat "lazy verbogen wordt zoals happy", of dat "shy verbogen wordt zoals happy", "naughty zoals happy" etc. In dit voorbeeld is "happy" het paradigma en is het het voorbeeld hoe gelijkaardige woorden verbogen moeten worden. Paradigma's worden gedefinieerd in <pardef> tags en gebruikt in <par> tags.
 
Zo kunnen we simpelweg 1 model opslaan en dan zeggen dat "lazy verbogen wordt zoals happy", of dat "shy verbogen wordt zoals happy", "naughty zoals happy" etc. In dit voorbeeld is "happy" het paradigma en is het het voorbeeld hoe gelijkaardige woorden verbogen moeten worden. Paradigma's worden gedefinieerd in <pardef> tags en gebruikt in <par> tags.
   
== Woordenboeken met 1 taal ==
+
== Eentalig woordenboek ==
   
 
Laten we beginnen met ons eerste woordenboek te schrijven. Het woordenboek is een XML bestand. Open je tekstverwerker en typ dit in:
 
Laten we beginnen met ons eerste woordenboek te schrijven. Het woordenboek is een XML bestand. Open je tekstverwerker en typ dit in:
Line 73: Line 73:
 
Daarna moeten we enkele symbolen definiëren. Laten we beginnen met makkelijke voorbeelden, een "noun"(n) in "singular"(sg) en in "plural"(pl).
 
Daarna moeten we enkele symbolen definiëren. Laten we beginnen met makkelijke voorbeelden, een "noun"(n) in "singular"(sg) en in "plural"(pl).
 
 
 
 
<pre>
 
<pre>
 
<sdefs>
 
<sdefs>
Line 140: Line 139:
 
Bijvoorbeeld:
 
Bijvoorbeeld:
   
<br /><br />
 
 
<pre>
 
<pre>
 
* gramofoni (left to right) gramofon<n><pl> (analysis)
 
* gramofoni (left to right) gramofon<n><pl> (analysis)
Line 156: Line 154:
 
#i --> identity (links en rechts zijn hetzelfde)
 
#i --> identity (links en rechts zijn hetzelfde)
 
#par --> paradigma
 
#par --> paradigma
Deze entry definieert, voor het lemma "gramofon", het paradigma dat verbonden is aan "gramofon_n". Het verschil tussen een lemma en de wortel is dat het lemma de
+
Deze entry definieert, voor het lemma "gramofon", het paradigma dat verbonden is aan "gramofon_n". Het verschil tussen een lemma en de wortel is dat het lemma de de vorm is zonder grammaticale aanpassingen, terwijl de wortel de substring van de lemma is en waaraan suffixen worden toegevoegd. Dit zal later nog duidelijk worden wanneer een entry laten zien waar de 2 verschillend zijn.
 
<br />
  +
We zijn nu klaar om het woordenboek te testen. Slaag het op, en keer terug naar de shell. We moeten het eerst samenstellen (met It-comp), daarna kunnen we het testen (met It-proc). Voor diegenen die nieuw zijn met cygwin, zorg ervoor dat je het bestand van het woordenboek opslaat in de home folder (bv. C:\Apertium\home\Gebruikersnaam\naam_van_woordenboek) Anders zal je niets kunnen samenstellen.
  +
  +
<pre>
  +
$ lt-comp lr apertium-sh-en.sh.dix sh-en.automorf.bin
  +
</pre>
  +
  +
Deze output zou er moeten komen:
  +
  +
<pre>
  +
main@standard 12 12
  +
</pre>
  +
  +
Als we het van links naar rechts samenstellen, dan maken we een analysator. Laten we ook nog een generator maken.
  +
  +
<pre>
  +
$ lt-comp rl apertium-sh-en.sh.dix sh-en.autogen.bin
  +
</pre>
  +
  +
Op dit punt zou het commando dezelfde output moeten produceren. Dit kunnen we testen. Open It-proc en gebruik het op de analysator.
  +
  +
<pre>
  +
$ lt-proc sh-en.automorf.bin
  +
</pre>
  +
  +
Test het nu, typ "gramofoni" en kijk naar de output:
  +
  +
<pre>
  +
^gramofoni/gramofon<n><pl>$
  +
</pre>
  +
  +
Doe nu hetzelfde voor het Engelse woordenboek, maar vervang nu het Engelse woord "grampohone" door "gramofon" en verander de verbuiging in het meervoud. Wat als je het meer correcte "record player" wil gebruiken? Dat leggen we later nog uit.
  +
<br />
  +
Er zouden nu 2 bestanden in de map moeten staan:
  +
#<code>apertium-sh-en.sh.dix</code> , dit bevat een (simplistisch) eentalig Servo-Kroatisch woordenboek
  +
#<code>apertium-sh-en.en.dix</code>, dit bevat een (simplistisch) eentalig Engels woordenboek.
  +
  +
== Tweetalig woordenboek ==

Revision as of 19:40, 2 December 2011

Apertium Nieuw talenpaar HOWTO
Dit HOWTO document zal beschrijven hoe je vanaf het begin een nieuw talenpaar moet starten voor het Apertium computervertalingssysteem.
Het is niet nodig om iets van de taal of van het vertalingssysteem te kennen, maar het is wel belangrijk dat je het onderscheid tussen een naamwoord,adjectief... kan maken.

Inleiding

Apertium is, zoals je waarschijnlijk al had begrepen, een automatisch computervertalingssysteem. Dit klopt niet helemaal, het is een computervertalingsplatform. Apertium voorziet een "motor" en "gereedschap" zodat je zelf je eigen computervertalingssystemen kan maken. Het enige wat je zelf moet doen, is de data schrijven. De data bestaat uit 3 belangrijke delen, de woordenboeken, en enkele regels (woordvolgorde en andere grammatica).
Als je meer info wilt over het Apertiumproject kan je hier eens kijken: http://wiki.apertium.org/wiki/Publications

Programma's

Om apertium te laten werken heb je de volgende programma's nodig:

  • lttoolbox(>= 3.0.0)
  • libxml utils (xmllint etc.)
  • apertium (>= 3.0.0)
  • Tekstverwerker (of een XML-verwerker)

Dit document legt niet uit hoe je deze programma's moet installeren. Als je meer info nodig hebt, kijk dan op de Apertium-site.

Waaruit bestaat een talenpaar?

Apertium is een oppervlakkig computervertalingssysteem. Dit is omdat het enkel via woordenboeken en enkele oppervlakkige regels kan vertalen. Het verschil met grondige vertalingen is dat Apertium niet aan syntactische zinsontleding kan doen. De regels die Apertium gebruikt zijn gebaseerd op typische overeenkomsten in lexicale groepen, eerder dan "de bewerkingen op de parsetree". Op het basisniveau zijn er 3 belangrijke woordenboeken:

  1. Het morfologisch woordenboek voor taal xx: dit bevat de regels over hoe woorden in taal xx zijn verbogen. In ons voorbeeld wordt het zo genoemd: apertium-sh-en.sh.dix
  2. Het morfologisch woordenboek voor taal yy: dit bevat de regels over hoe woorden in taal yy zijn verbogen. In ons voorbeeld wordt het zo genoemd: apertium-sh-en.en.dix
  3. Een tweetalig woordenboek: dit bevat overeenkomsten tussen woorden en symbolen van de 2 talen. In ons voorbeeld wordt het zo genoemd: apertium-sh-en.sh-en.dix

In een talenpaar kunnen beide talen de bron of de bestemming zijn. Deze termen zijn relatief.

Er bestaan ook 2 bestanden van vertalingsregels. Dit zijn de regels die bepalen hoe woorden herordend worden in zinnen bv. chat noir --> kat zwart --> zwarte kat. Het bepaalt ook de geslachtsaanpassingen, getallen etc. Deze regels kunnen ook gebruikt worden om nieuwe lexicale items toe te voegen of te verwijderen. Deze bestanden zijn:

  1. vertalingsregels van taal xx naar taal yy: dit bestand bevat de regels van hoe taal xx in taal yy wordt veranderd. In ons voorbeeld wordt het zo genoemd: apertium-sh-en.sh-en.t1x
  2. ertalingsregels van taal yy naar taal xx: dit bestand bevat de regels van hoe taal yy in taal xx wordt veranderd. In ons voorbeeld wordt het zo genoemd: apertium-sh-en.en-sh.t1x

Veel van de talenparen hebben ook nog andere bestanden, maar die komen hier niet aan bod. Die bestanden zijn enkel nodig om het systeem te laten werken.

Talenpaar

Zoals je misschien al hebt gezien aan de bestandsnamen, gebruikt deze handleiding het voorbeeld Servo-Kroatisch en Engels om te tonen hoe je een basissyteem moet maken.
Dit is geen ideaal paar omdat het systeem beter werkt voor talen die meer verbanden met elkaar hebben. Maar dit zal geen problemen zijn bij de simpele voorbeelden die we hier gebruiken.

Enkele opmerkingen over "TERMS?"

Er zijn enkele termen die je zal moeten begrijpen voor we verdergaan.

De 1e term is lemma. Een lemma is een woord dat niet is aangepast door enige grammatica. Bv. het lemma van katten is kat. Voor Engelse woorden zal dit het enkelvoud van die woorden zijn. Voor werkwoorden zal dit de infinitief zijn zonder "to". Bv. het lemma van "was" wordt dan "be".

De 2e term is symbool. In de context van Apertium verwijst "symbool" naar de grammaticale vorm. Bv. katten is een zelfstandig naamwoord(noun) in het meervoud(plural). Daarom krijgt katten het symbool "noun" en het symbool "plural". Bij de input en output van apertium worden deze meestal tussen "<" en ">" weergeven:

  • <n>; voor een "noun".
  • <pl>; voor een "plural".

Andere voorbeelden van symbolen zijn <sg>; singular(enkelvoud), <p1>; first person(eerste persoon), <pri>; indicatief, etc. "<" en ">" worden ook wel tags genoemd. In veel van de beschikbare talenparen zijn de betekenissen van de symbolen acroniemen van Catalaanse woorden. Bv. vbhaver ---- van vb (verb).


De 3e term is paradigma. In de context van Apertium verwijst paradigma naar hoe een groep woorden met dezelfde kenmerken wordt verbogen. In het morfologische woordenboek worden lemma's gelinkt aan paradigma's. Zo kunnen wij beschrijven hoe een lemma verbogen wordt zonder alle uitgangen te moeten schrijven.

Een voorbeeld van het nut is dat, als we bv. de 2 adjectieven "happy" en "lazy" zouden opslaan, dat we gelijkaardige verbuigingen in 1 keer in het systeem kunnen steken, zonder dat we alle mogelijkheden moeten schrijven

  1. happy, happ (y, ier, iest)
  2. lazy, laz (y, ier, iest)


Zo kunnen we simpelweg 1 model opslaan en dan zeggen dat "lazy verbogen wordt zoals happy", of dat "shy verbogen wordt zoals happy", "naughty zoals happy" etc. In dit voorbeeld is "happy" het paradigma en is het het voorbeeld hoe gelijkaardige woorden verbogen moeten worden. Paradigma's worden gedefinieerd in <pardef> tags en gebruikt in <par> tags.

Eentalig woordenboek

Laten we beginnen met ons eerste woordenboek te schrijven. Het woordenboek is een XML bestand. Open je tekstverwerker en typ dit in:

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

</dictionary>

Het bestand begrijpt dat we een woordenboek willen maken. Voordat het nuttig wordt, moeten we wat meer parameters toevoegen, de eerste is het alfabet. Dit definieert de letters die er worden gebruikt in dat woordenboek, voor Servich-Kroatisch zal het dan alle letters van het Servo-Kroatisch alfabet bevatten:

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

Zet het alfabet juist onder de <dictionary> tag. Daarna moeten we enkele symbolen definiëren. Laten we beginnen met makkelijke voorbeelden, een "noun"(n) in "singular"(sg) en in "plural"(pl).

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

De namen van de symbolen moeten niet zo kort zijn, je mag ze ook voluit schrijven, maar omdat je ze heel veel zal moeten typen, is het makkelijk om ze af te korten. Maar dit is niet zo gemakkelijk in het Servo-Kroatisch. Daar verbuig je zelfstandige naamwoorden niet enkel volgens getal(enkelvoud & meervooud), maar ook volgens "case" en hebben een geslacht. Hoe dan ook, we nemen voor dit voorbeeld aan dat het zelfstandig naamwoord mannelijk is in de nominatief (Een volledig voorbeeld vind je op het einde van dit document. Het volgende wat we moeten doen, is het maken van een sectie voor de paradigma's,

<pardefs>

</pardefs>

en een voor de sectie van het woordenboek:

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

</section>

Er bestaan 2 types secties. Het eerste is de standaardsectie en bevat woorden,clitica, etc. Het 2e type wordt de "voorwaardelijke" type genoemd en en bevat grammaticale elementen zoals punctuatie etc. In dit voorbeeld gebruiken we geen "voorwaardelijke" sectie. Ons bestand zou er nu zo moeten uitzien:

<?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>

Nu dat we onze we onze basis hebben gemaakt, kunnen we er een zelfstandig naamwoord aan toevoegen. In ons voorbeeld zal dat "gramafon" zijn. Het eerste wat me moeten doen is, omdat we nog geen model paradigma's hebben, er een definiëren. Denk eraan, wij gebruiken het mannelijk in de nominatief. Het enkelvoud van dit woord is "gramofon" en het meervoud is "gramofoni". Dus:

<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>

Merk op: de '<l/>'(is hetzelfde als <l></l>) wil zeggen dat er niets anders toe te voegen is in de secite "sg" voor het woord "gramofon". Op dit moment zal je je waarschijnlijk afvragen waarvoor deze tekens dienen (">" en "<"). Daar zijn bepaalde redenen voor en het gebruik ervan zal je snel oppikken. Je vraag je misschien af wat <e>,<l> en <r> betekenen:

  • e, is voor een "entry".
  • p, is voor een paar.
  • l, is voor links.
  • r, is voor rechts.

Waarom links en rechts? Dit is omdat eentalige woordenboeken zullen samengesteld worden tot vervoegde "state machines". Compiling deze van links naar rechts betekent dat deze woorden zullen analyseren, en van rechts naar links betekent dat er woorden zullen gemaakt worden uit analyses. Bijvoorbeeld:

* gramofoni (left to right) gramofon<n><pl> (analysis)
* gramofon<n><pl> (right to left) gramofoni (generation)

Nu dat we een paradigma gedefinieerd hebben, moeten we het aan zijn lemma linken, nl. "gramofon". We plaatsen deze in de sectie die we gedefinieerd hebben. Het commando dat je in de sectie moet steken ziet er zo uit:

<e lm="gramofon"><i>gramofon</i><par n="gramofon__n"/></e>

Nog enkele afkortingen:

  1. lm --> lemma
  2. i --> identity (links en rechts zijn hetzelfde)
  3. par --> paradigma

Deze entry definieert, voor het lemma "gramofon", het paradigma dat verbonden is aan "gramofon_n". Het verschil tussen een lemma en de wortel is dat het lemma de de vorm is zonder grammaticale aanpassingen, terwijl de wortel de substring van de lemma is en waaraan suffixen worden toegevoegd. Dit zal later nog duidelijk worden wanneer een entry laten zien waar de 2 verschillend zijn.
We zijn nu klaar om het woordenboek te testen. Slaag het op, en keer terug naar de shell. We moeten het eerst samenstellen (met It-comp), daarna kunnen we het testen (met It-proc). Voor diegenen die nieuw zijn met cygwin, zorg ervoor dat je het bestand van het woordenboek opslaat in de home folder (bv. C:\Apertium\home\Gebruikersnaam\naam_van_woordenboek) Anders zal je niets kunnen samenstellen.

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

Deze output zou er moeten komen:

main@standard 12 12

Als we het van links naar rechts samenstellen, dan maken we een analysator. Laten we ook nog een generator maken.

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

Op dit punt zou het commando dezelfde output moeten produceren. Dit kunnen we testen. Open It-proc en gebruik het op de analysator.

$ lt-proc sh-en.automorf.bin

Test het nu, typ "gramofoni" en kijk naar de output:

^gramofoni/gramofon<n><pl>$

Doe nu hetzelfde voor het Engelse woordenboek, maar vervang nu het Engelse woord "grampohone" door "gramofon" en verander de verbuiging in het meervoud. Wat als je het meer correcte "record player" wil gebruiken? Dat leggen we later nog uit.
Er zouden nu 2 bestanden in de map moeten staan:

  1. apertium-sh-en.sh.dix , dit bevat een (simplistisch) eentalig Servo-Kroatisch woordenboek
  2. apertium-sh-en.en.dix, dit bevat een (simplistisch) eentalig Engels woordenboek.

Tweetalig woordenboek