Difference between revisions of "Jaunas valodas uzsakšana ar HFST"

From Apertium
Jump to navigation Jump to search
 
(5 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{TOCD}}
Šī lapa paskaidros kā sākt jaunas valodas mācīties ar HFST. Šeit ir dažas lieliskas norādes ar lexc un twol formālismu, piemēram FSMBook, bet daudzi no viņiem nodarbojas ar patentēta Xerox realizāciju, nevis bezmaksas HFST patentēšanu.
:''Informācijai kā instalēt HFST, apskatiet [[HFST]]''
Kamēr patiesais formālisms ir vairāk vai mazāk vienāds, komandas, kuras izmanto, lai kompilētu tos nevienmēr ir vienāds. HFST ir daudz saderīgāka ar Unix filozofiju. Tātad mēs to izmantosim. Lielākā daļa indoeiropiešu valodas un izolētās valodas var tikt viegli izskatītas ar lttoolbox, mēs varēsim tikt galā ar valodu, kas nav no šīs saimes, un vienu, kas ir morfoloģiski sarežģītāka, ko ir sarežģīti aplūkot ar lttoolbox.

Šī lapa paskaidros kā sākt jaunas valodas mācīties ar [[HFST]]. Šeit ir dažas lieliskas norādes ar [[lexc]] un [[twol]] formālismu, piemēram [http://www.fsmbook.com FSMBook], bet daudzi no viņiem nodarbojas ar patentēta Xerox realizāciju, nevis bezmaksas HFST patentēšanu.

Kamēr patiesais formālisms ir vairāk vai mazāk vienāds, komandas, kuras izmanto, lai kompilētu tos nevienmēr ir vienāds. HFST ir daudz saderīgāka ar Unix filozofiju. Tātad mēs to izmantosim. Lielākā daļa indoeiropiešu valodas un izolētās valodas var tikt viegli izskatītas ar [[lttoolbox]], mēs varēsim tikt galā ar valodu, kas nav no šīs saimes, un vienu, kas ir morfoloģiski sarežģītāka, ko ir sarežģīti aplūkot ar [[lttoolbox]].

==Priekšdarbi==

Morfoloģiskais pārveidotājs HFST ir divi principiāli faili, viens ir <code>lexc</code> fails. Tas definē kā morfēmas valodā ir savienotas, ''morfotaktikas''. Otrs fails var būt <code>twol</code> (divu līmeņu noteikums) vai <code>xfst</code> (kārtas pārrakstīšanas noteikums) fails. Šie faili apraksta, kādas pārmaiņas notiks, ka šīs morfēmas savienosies kopā ''morfografemikas'' (vai ''morfonoloģija''). Piemēram,

:Morfotaktikas: <code>wolf<n><pl></code> → <code>wolf + s</code>
:Morfografemikas: <code>wolf + s</code> → <code>wolves</code>

Šeit mēs darbosimies ar <code>twol</code>, divu līmeņu noteikumu. Ja jūs esat ieinteresēti <code>xfst</code> failā, šeit ir jauka pamācība [http://foma.sourceforge.net/dokuwiki/doku.php?id=wiki:morphtutorial pamācība] [[Foma]] lapā.

Nākamajā sekcijā mēs sāksim ar leksikonu (<code>lexc</code> file) tad progresēsim morfografemētikas (<code>twol</code> failos).

Pārliecinaties, ka jums ir [[Hfst#Compiling_HFST3|HFST3]] kompilēts.

==Valoda==

Valodu, ko mēs gatavojamies modelēt šodien &mdash; ir turkmēņu valoda, Turku valodā runā Turkmenistānā. Valodu pāri ar kuriem mēs strādāsim ir turku--turkmēņu. Mēs gatavojamies modelēt un izmēģināt pamata locīšanas (skaitļi, locījumi) kategorijas lietvārdus. Pamata locīšana turkmēņu lietvārdiem ir: seši locījumi, divi skaitļu un piederība. Piedēkļiem var būt dažādas formas atkarībā no tā vai tie ir pievienoti patskaņa celmam, vai konstantam beigu celmam.

===Patskaņu saskaņa===

Vienkāršojot daudzus,<ref> šis patiesībā ir superkomplicēts, bet šim pamācošs piemērs, tas ir jādara</ref>, jo varam teikt, ka cenlms turkmēņu vārdiem var būt ar vienu no diviem tipiem, aizmugurējo patskaņu celms, vai priekšējo patskaņu celms. Aizmugurējo patskaņu celms, tādam vārdam kā ''mugallym'' "skolotājs" ir tikai aizmugurējie patskaņi, un priekšējo patskaņu celms, tādam vārdam kā ''kädi'' "ķirbis" ir tikai priekšējie patskaņi. Aizmugurējie patskaņi Turkmēņiem ir: ''a, y, o,'' un ''u''. Priekšējie patskaņi ir: '' ä, e, i, ö,'' un ''ü''.

Tātad, kad pievienojam priedēkli pie celma, mums ir jāzina ka patskaņi celmā ir secībā, lai izvēlētos pareizo patskani ko ievietot priedēklī.

===Skaitļi===

Skaitļi turkmēņiem var būt nedefinēti (kurā nav piedēkļu) vai daudzskaitļi, kurā piedēkļi ir ''-lar'' vai ''-ler''. Pirmais izmanto aizmugurējos patskaņus, bet otrais izmanto priekšējos patskaņus.

===Locījumi===

Zemāk tiek izmantots vairāk kompakto attēlojumu, lai parādītu piedēkļus dažādos locījumos, un starpā ''{'' un ''}'' ir patskaņa maiņa piedēklī un starp ''('' un '')'' ir [http://en.wikipedia.org/wiki/Epenthetic epentheses].

{|class=wikitable
! Locījums !!colspan=2| Piedēklis !! Izmantojums !!colspan=2| Piemērs
|-
! !! V !! C !! !! V !! C
|-
| Nominatīvs || || || Norāda priekšmetu teikumā || pagta || gazan
|-
| Ģenitīvs || ''-n{y,i,u,ü}ň'' || ''-{y,i,u,ü}ň'' || Norāda pozīciju || pagta<u>nyň</u> || gaza<u>nyň</u>
|-
| Datīvs || ''-{a,ä} , -n{a,e}'' || ''-{a,e}'' || Netiešs objekts (tieša darbība) || pagta || gazan<u>a</u>
|-
| Akuzatīvs || ''-n{y,i}'' || ''-{y,i}'' || Tiešs obejkts || pagta<u>ny</u> || gaza<u>ny</u>
|-
| Lokatīvs || ''-(n)d{a,e}'' || ''-d{a,e}'' || Laiks/vieta || pagta<u>da</u> || gazan<u>da</u>
|-
| Instrumentālis || ''-(n)d{a,e}n'' || ''-d{a,e}n'' || izcelsme || pagta<u>dan</u> || gazan<u>dan</u>
|-
|}

===Pilns piemērs===

Piezīme: Šis neietver ģenitīvu.

{|class=wikitable
!colspan=3|''maşgala'' "ģimene"
|-
! Locījums !! Vienskaitlis !! Daduzskaitlis
|-
| '''Nominatīvs''' || maşgala || maşgalalar
|-
| '''Ģenitīvs''' || maşgalanyň || maşgalalaryň
|-
| '''Datīvs''' || maşgala || maşgalalara
|-
| '''Akuzatīvs''' || maşgalany || maşgalalary
|-
| '''Lokatīvs''' || maşgalada || maşgalalarda
|-
| '''Instrumentālis''' || maşgaladan || maşgalalardan
|-
|}

{|class=wikitable
!colspan=3|''esger'' "kareivis"
|-
! Locījums !! Vienskaitlis !! Daudzskaitlis
|-
| '''Nominatīvs''' || esger || esgerler
|-
| '''Ģenitīvs''' || esgeriň || esgerleriň
|-
| '''Datīvs''' || esgere || esgerlere
|-
| '''Akuzatīvs''' || esgeri || esgerleri
|-
| '''Lokatīvs''' || esgerde || esgerlerde
|-
| '''Instrumentālis''' || esgerden || esgerlerden
|-
|}

==Vārdu krājums==

Tātad, pēc iziešanas cauri nelielam aprakstam, sāksim ar vārdu krājumu. Fails ko mēs veidosim saucas <code>apertium-tr-tk.tk.lexc</code>, un tas satur vārdu krājumu no pārveidotāja. Tādēļ atveriet teksta redaktoru.

===Pamati===

Pirmā lieta, ko mums vajag definēt ir etiķetes, kuras mēs vēlamies radīt. Ar [[lttoolbox]], tas ir izdarāms ar <code><sdefs></code> sektoru no <code>.dix</code> faila.

<pre>
Vairākzīmju simboli

%<n%> ! Lietvārds
%<nom%> ! Nominatīvs
%<pl%> ! Daudzskaitlis
</pre>

Simboli <code>&lt;</code> un <code>&gt;</code> ir rezervēti ar <code>lexc</code>, tāpēc mums vajag izvairīties no tiem ar <code>%</code>

Mēs arī definējam <code>Root</code> vārdnīcu, kas norādīs uz sarakstu celmu vārdnīcā <code>NounStems</code>. <code>Root</code> vārdnīca ir analoga <code><section id="main" type="standard"></code> iekš [[lttoolbox]]:

<pre>

LEXICON Root

NounStems ;

</pre>

Tagad pievienosim mūsu abus vārdus:

<pre>
LEXICON NounStems

maşgala Ninfl ; ! "ģimene"
esger Ninfl ; ! "kareivis"
</pre>

Sākumā ieliekam celmu, tad ieliekam ''piemēru'' (vai ''turpinošu klasi'') kurš te ieder, šajā gadījumā <code>Ninfl</code>, un beidzot, komentārā (komentāra simbols ir <code>!</code>) ieliekam tulkojumu.

Un definējam visparastāko locījumu, kas ir piestiprinājis atklāto celmu ar <code><n></code> lai norādītu lietvārdu:

<pre>
LEXICON Ninfl

%<n%>: # ;
</pre>
Šim <code>VĀRDU KRĀJUMAM</code> vajadzētu būt ''pirms'' <code>lietvārda celma</code> vārdā. Šis <code>#</code> simbols ir vārda beigu robeža. Tas ir ļoti svarīgi, lai būtu tas, jo tas pasaka, kurā vietā apstāties.

===Kompilācija===

Tātad, tagad mums ir vienkārša vārdnīca, kompilēsim un pārbaudīsim to. Mēs kompilējam ar <code>hfst-lexc</code>:

<pre>
$ hfst-lexc apertium-tr-tk.tk.lexc -o tk-tr.lexc.hfst
</pre>

(Ja jums nav <code>hfst-lexc</code> instalēts, tev ir problēma -- iespējams jums vajag kompilēt ar <code>--enable-lexc</code>, bet tajā pašā laikā jūs varat izmantot <code>hfst-lexc2fst</code> šī vietā <code>hfst-lexc</code>)

Un abus mēs varam bārbaudīt ar <code>hfst-fst2strings</code>:

<pre>
$ hfst-fst2strings tk-tr.lexc.hfst
maşgala<n>:maşgala
esger<n>:esger
</pre>

===Vārdnīcas turpinājums===

Tātad, mēs noskaidrojām, ka ''maşgala'' un ''esger'' ir lietvārdi, bet kā ar locīšanu. Tas ir kur ''vārdnīcas turpinājums'' sākas. Tie ir, piemēram ''paradigma'' iekš [[lttoolbox]].

Vienkāršās morphotaktikas turkmēņu lietvārdiem ir:

:{{sc|stem}} {{sc|plural?}} {{sc|possessive?}} {{sc|case}} {{sc|copula?}}

kurā <code>?</code> apzīmē iespējamību. Te mēs tikai strādājām ar skaitļiem un locījumiem, tātad aprakstīsim locīšanu, sāksim ar skaitli. Faila sekcijā <code>LEXICON Ninfl</code>, pievieno sekojošo rindiņu:

<pre>
%<n%>%<pl%>:%>l%{A%}r # ;
</pre>

Fuu, tas izskatās diezgan komplicēti!! Iespējams, taču katrai daļai ir savs iemesls, aprakstīsim tos:

{|class=wikitable
! Daļa !! Apraksts
|-
| <code>%&lt;n%&gt;%&lt;pl%&gt;</code> || Kreisajā pusē notiek analīze, šajā gadījumā lietvārdam, daudzskaitlī. Ņemiet vērā, ka tas ir pretēji lttoolbox, kur analīze parasti ir labajā pusē.
|-
| <code>:</code> || Simbols <code>:</code> norobežo labo un kreiso pusi (vai virsmas un leksikas pusi)
|-
| <code>%&gt;l%{A%}r</code> || Šī ir virsmas forma, kas ir sadalīta:
|-
|&nbsp;&nbsp;&nbsp; <code>%&gt;</code> || Morfēmas norobežotājs(mēs par to runāsim vēlāk, bet jūs ielieciet to starp morfēmām kurās varētu notikt izmaiņas.)
|-
|&nbsp;&nbsp;&nbsp; <code>l%{A%}r</code> || Virsmas morfēma, šajā gadījumā ''-lar'' vai ''-ler''
|-
|&nbsp;&nbsp;&nbsp; <code>%{A%}</code> || "Patskaņi"... vietturis patskanis, kas var būt ''a'' vai ''e''
|-
| <code>#</code> || Vārda beigu robeža
|-
| <code>;</code> || Rindas beigas
|-
|}

Daļa no iemesla, kādēļ tas izskatās sarežģīti ir visi <code>%</code> simboli. Ja mēs tos noņemtu, tad izskatītos daudz salasāmāks:

<pre>
<n><pl>:>l{A}r # ;
</pre>

(Jums tie tālāk ir nepieciešami)

Salīdzinājumam, lttoolbox (izmantojot · priekš morfēmas robežas un <s n="A"/> par {A}), tas varētu izskatīties apmēram tā:

<pre>
<e><p><l>·l<s n="A"/>r</l><r><s n="n"/><s n="pl"/></e>
</pre>

Tātad, mēs pievienojām pirmo fleksiju, daudzskaitli. Mums ir jāizdara divas lietas, pirms mēs to pārbaudam. Vispirms mums jāpievieno <code>%{A%}</code> pie <code>Multichar_Symbols</code> faila sekcijas, tādēļ dodaties uz augšu un pievienojiet to, jums vajadzētu iegūt kaut ko tādu:

<pre>
Multichar_Symbols

%<n%> ! Lietvārds
%<nom%> ! Nominatīvs
%<pl%> ! Daudzskaitlis

%{A%} ! Patskaņi 'a' vai 'e'
</pre>

Tagad saglabājiet failu. Nākamā lieta, ko mums vajag izdarīt, ir atkal kompilēt failu:

<pre>
$ hfst-lexc apertium-tr-tk.tk.lexc > tk-tr.lexc.hfst
</pre>

Un tad mēs varam pārbaudīt:

<pre>
$ hfst-fst2strings tk-tr.lexc.hfst
maşgala<n><pl>:maşgala>l{A}r
maşgala<n>:maşgala
esger<n><pl>:esger>l{A}r
esger<n>:esger
</pre>

Labi, tātad šis ir jauki, tomēr tas tāpat nav diezko labs, šīs nav īsti virsmas formas. Mēs nekad neredzēsim ''esger>l{A}r'' nevienā tekstā. Virsmas formas, kuras mēs meklējam, ir ''esgerler''. Tātad, kā to iegūt?

==Ievieto <code>twol</code>==

<code>Twol</code> ideja ir paņemt virsmas formas, kas ir veidotas ar lexc un pievienot noteikumus tām, lai izmainītu to īsto virsmu formu. Tātad, šeit mēs to mainām ''-l{A}r'' par ''-lar'' vai ''-ler''.

Ko mēs būtībā gribam pateikt ir "ja celms satur priekšējos patskaņus, tad mēs vēlamies mainīt priekšējos patskaņus, ja tas satur aizmugurējos patskaņus, tad mēs vēlamies mainīt aizmugurējos patskaņus.". Un tajā pašā laikā noņemt morfēma robežu. Tātad izmēģināsim.

Mēs veidosim jaunu failu <code>apertium-tr-tk.tk.twol</code>.

Sākumā mums vajag definēt alfabētu:

<pre>
Alfabēts
A B Ç D E Ä F G H I J Ž K L M N Ň O Ö P R S Ş T U Ü W Y Ý Z
a b ç d e ä f g h i j ž k l m n ň o ö p r s ş t u ü w y ý z
%{A%}:a ;
</pre>

Jums nevajag definēt lielos un mazos burtus dažādās rindās, bet tas var to padarīt uztveramāku.

Mēs arī vēlamies definēt šajā punktā, jebko, kas notiek, mēs vēlamies noņemt morfēmu robežas <code>%&gt;</code> no virsmas formas, tādēļ pievienojiet sekojošo rindiņu tieši zem pēdējās rindas ar mazajiem burtiem, un pirms <code>;</code>:

<pre>
%>:0
</pre>

Te, kreisajā pusē ir morfotaktikas forma, bet labajā pusē ir virsmas forma. Ar <code>%&gt;:0</code> mainās <code>%&gt;</code> par <code>0</code>, kas ir tas pats, kas izdzēst to. Simbols <code>0</code> neizvadās.

Tātad, beigās alfabēts izskatīsies kā šis:

<pre>
Alfabēts
A B Ç D E Ä F G H I J Ž K L M N Ň O Ö P R S Ş T U Ü W Y Ý Z
a b ç d e ä f g h i j ž k l m n ň o ö p r s ş t u ü w y ý z
%{A%}:a %>:0 ;
</pre>

Tālāk mums vajag definēt dažas dekorācijas ar ko strādāt, tās ir vienkārši lai dotu memoniku vaibstiem, kā priekšējie patskaņi un aizmugurējie patskaņi, ko mēs vēlēsimies vēlāk atsaukties uz noteikumiem:

<pre>
Sets

Consonant = B Ç D F G H J Ž K L M N Ň P R S Ş T W Z
b ç d f g h j ž k l m n ň p r s ş t w z ;
Vowel = A E Ä I O Ö U Ü Y Ý
a e ä i o ö u ü y ý ;
FrontVowel = Ä E I Ö Ü ä e i ö ü ;
BackVowel = A Y O U a y o u ;
NonBack = Consonant FrontVowel %> ;
NonFront = Consonant BackVowel %> ;
</pre>

Tātad, mums viss ir uzstādīt, lai pievienotu noteikumus tur ir jauna sekcija, <code>Rules</code>:

<pre>
Rules
"Front harmony in suffixes"
%{A%}:e <=> FrontVowel: NonBack:* %>: NonBack:* _ ;

</pre>

Noteikums vienkārši saka: "Aizstāj {A} ar e, ja iepriekšējais burts ir jebkas, izņemot aizmugurējo patskani, tad tur ir morfēmu robeža, tad tur nav neviena aizmugurējā patskaņa un reizēm ir priekšējais patskanis"

Nākamais, lai kompilētu noteikumu un pārbaudītu to:

<pre>
$ hfst-twolc -R -i apertium-tr-tk.tk.twol -o tk-tr.twol.hfst
Nolasīt ievadu no tk.twol.
Ierakstīt izvadu uz tk.twol.hfst.
Nolasīt alfabētu.
Nolasīt dekorācijas.
Nolasīt noteikumus un kompilēt to kontekstu un centrus.
Kompilēt un ievietot krātuvē noteikumus.
Kompilēt noteikumus.
Ievietot krātuvē noteikumus.
</pre>

===Ar varu krustot kompozīciju!===

Lai iegūtu beidzamo pārveidotāju, ko mums vajag, lai sakombinētu morfotatikas modeli (<code>lexc</code>) ar morfografemikas modeli (<code>twol</code>). Ir veids kā to izdarīt, to sauc par "kompozīciju krustošanu", kas ir diezgan iedarbīga. Ir arī instruments no HFST, kas saucas <code>hfst-compose-intersect</code> to mēs izmantosim.

<pre>
$ hfst-compose-intersect -1 tr-tk.lexc.hfst -2 tr-tk.twol.hfst -o tr-tk.autogen.hfst
</pre>

Tagad mēs varam izmēģināt pēdējo pārveidotāju:

<pre>
$ hfst-fst2strings tr-tk.autogen.hfst
maşgala<n>:maşgala
maşgala<n><pl>:maşgalalar
esger<n>:esger
esger<n><pl>:esgerler
</pre>

Lieliski!! Mums ir kārotā forma.

==Analīze un ģenerācija==

Pārveidotājs, kuru mēs izveidojām, bija paredzēts ražošanai, bet mēs nevaram vēl to izmantot ar <code>hfst-proc</code> formāta dēļ. Ja mēs vēlamies to izmantot ar <code>hfst-proc</code>, viss ko mums vajag pamainīt ir formāts, ar sekojošu komandu:

<pre>
$ hfst-fst2fst -O -i tr-tk.autogen.hfst -o tr-tk.autogen.hfst.ol
</pre>

Tagad mums vajadzētu varēt izveidot abus mūsu daudzskaitļus:

<pre>
$ echo "^maşgala<n><pl>$" | hfst-proc -g tr-tk.autogen.hfst.ol
maşgalalar
</pre>

un

<pre>
$ echo "^esger<n><pl>$" | hfst-proc -g tr-tk.autogen.hfst.ol
esgerler
</pre>

Bet, kas būtu ja mēs vēlētos analizēt kādu vārdu? Tad mums vajag ''pārkonfigurēt'' pārveidotāju. Tas ir samainīt kreiso pusi ar labo pusi vietām, izdarīsim to divās stadijās, lai mēs varētu redzēt rezultātu:

<pre>
$ hfst-invert -i tr-tk.autogen.hfst -o tk-tr.automorf.hfst

$ hfst-fst2strings tk-mor.hfst
maşgala:maşgala<n>
maşgalalar:maşgala<n><pl>
esger:esger<n>
esgerler:esger<n><pl>
</pre>

Kā mēs varam redzēt, tagad kreisā puse ir virsmas forma, un labā puse ir analīze. Tagad tikai konvertējam analizētāju, lai ''optimizētu skatu'' formātam:

<pre>
$ hfst-fst2fst -O -i tk-tr.automorf.hfst -o tk-tr.automorf.hfst.ol
</pre>

Un veicam analīzi:

<pre>
$ echo "maşgalalar" | hfst-proc tk-tr.automorf.hfst.ol
^maşgalalar/maşgala<n><pl>$

$ echo "esgerler" | hfst-proc tk-tr.automorf.hfst.ol
^esgerler/esger<n><pl>$
</pre>

==Problēmu novēršana==

Te ir rezumējums, priekš dažādu problēmu novēršanas, ja jūs kaut ko izdarāt, bet tas nestrādā:

* Vai visi jūsu ''daudzzīmju simboli'' ir definēti? Ieskaitot patskaņus/līdzskaņus. Ja jūs uzskatāt ka pievienojāt tos, tad trīs reizes pārbaudiet. Daudzas problēmas ir ar <code>twol</code> kā arīa ar <code>lexc</code>.

==Piezīmes==
<references/>

==Veicinoša lasāmviela==

[[Category:HFST]]

Latest revision as of 11:39, 23 January 2012

Informācijai kā instalēt HFST, apskatiet HFST

Šī lapa paskaidros kā sākt jaunas valodas mācīties ar HFST. Šeit ir dažas lieliskas norādes ar lexc un twol formālismu, piemēram FSMBook, bet daudzi no viņiem nodarbojas ar patentēta Xerox realizāciju, nevis bezmaksas HFST patentēšanu.

Kamēr patiesais formālisms ir vairāk vai mazāk vienāds, komandas, kuras izmanto, lai kompilētu tos nevienmēr ir vienāds. HFST ir daudz saderīgāka ar Unix filozofiju. Tātad mēs to izmantosim. Lielākā daļa indoeiropiešu valodas un izolētās valodas var tikt viegli izskatītas ar lttoolbox, mēs varēsim tikt galā ar valodu, kas nav no šīs saimes, un vienu, kas ir morfoloģiski sarežģītāka, ko ir sarežģīti aplūkot ar lttoolbox.

Priekšdarbi[edit]

Morfoloģiskais pārveidotājs HFST ir divi principiāli faili, viens ir lexc fails. Tas definē kā morfēmas valodā ir savienotas, morfotaktikas. Otrs fails var būt twol (divu līmeņu noteikums) vai xfst (kārtas pārrakstīšanas noteikums) fails. Šie faili apraksta, kādas pārmaiņas notiks, ka šīs morfēmas savienosies kopā morfografemikas (vai morfonoloģija). Piemēram,

Morfotaktikas: wolf<n><pl>wolf + s
Morfografemikas: wolf + swolves

Šeit mēs darbosimies ar twol, divu līmeņu noteikumu. Ja jūs esat ieinteresēti xfst failā, šeit ir jauka pamācība pamācība Foma lapā.

Nākamajā sekcijā mēs sāksim ar leksikonu (lexc file) tad progresēsim morfografemētikas (twol failos).

Pārliecinaties, ka jums ir HFST3 kompilēts.

Valoda[edit]

Valodu, ko mēs gatavojamies modelēt šodien — ir turkmēņu valoda, Turku valodā runā Turkmenistānā. Valodu pāri ar kuriem mēs strādāsim ir turku--turkmēņu. Mēs gatavojamies modelēt un izmēģināt pamata locīšanas (skaitļi, locījumi) kategorijas lietvārdus. Pamata locīšana turkmēņu lietvārdiem ir: seši locījumi, divi skaitļu un piederība. Piedēkļiem var būt dažādas formas atkarībā no tā vai tie ir pievienoti patskaņa celmam, vai konstantam beigu celmam.

Patskaņu saskaņa[edit]

Vienkāršojot daudzus,[1], jo varam teikt, ka cenlms turkmēņu vārdiem var būt ar vienu no diviem tipiem, aizmugurējo patskaņu celms, vai priekšējo patskaņu celms. Aizmugurējo patskaņu celms, tādam vārdam kā mugallym "skolotājs" ir tikai aizmugurējie patskaņi, un priekšējo patskaņu celms, tādam vārdam kā kädi "ķirbis" ir tikai priekšējie patskaņi. Aizmugurējie patskaņi Turkmēņiem ir: a, y, o, un u. Priekšējie patskaņi ir: ä, e, i, ö, un ü.

Tātad, kad pievienojam priedēkli pie celma, mums ir jāzina ka patskaņi celmā ir secībā, lai izvēlētos pareizo patskani ko ievietot priedēklī.

Skaitļi[edit]

Skaitļi turkmēņiem var būt nedefinēti (kurā nav piedēkļu) vai daudzskaitļi, kurā piedēkļi ir -lar vai -ler. Pirmais izmanto aizmugurējos patskaņus, bet otrais izmanto priekšējos patskaņus.

Locījumi[edit]

Zemāk tiek izmantots vairāk kompakto attēlojumu, lai parādītu piedēkļus dažādos locījumos, un starpā { un } ir patskaņa maiņa piedēklī un starp ( un ) ir epentheses.

Locījums Piedēklis Izmantojums Piemērs
V C V C
Nominatīvs Norāda priekšmetu teikumā pagta gazan
Ģenitīvs -n{y,i,u,ü}ň -{y,i,u,ü}ň Norāda pozīciju pagtanyň gazanyň
Datīvs -{a,ä} , -n{a,e} -{a,e} Netiešs objekts (tieša darbība) pagta gazana
Akuzatīvs -n{y,i} -{y,i} Tiešs obejkts pagtany gazany
Lokatīvs -(n)d{a,e} -d{a,e} Laiks/vieta pagtada gazanda
Instrumentālis -(n)d{a,e}n -d{a,e}n izcelsme pagtadan gazandan

Pilns piemērs[edit]

Piezīme: Šis neietver ģenitīvu.

maşgala "ģimene"
Locījums Vienskaitlis Daduzskaitlis
Nominatīvs maşgala maşgalalar
Ģenitīvs maşgalanyň maşgalalaryň
Datīvs maşgala maşgalalara
Akuzatīvs maşgalany maşgalalary
Lokatīvs maşgalada maşgalalarda
Instrumentālis maşgaladan maşgalalardan
esger "kareivis"
Locījums Vienskaitlis Daudzskaitlis
Nominatīvs esger esgerler
Ģenitīvs esgeriň esgerleriň
Datīvs esgere esgerlere
Akuzatīvs esgeri esgerleri
Lokatīvs esgerde esgerlerde
Instrumentālis esgerden esgerlerden

Vārdu krājums[edit]

Tātad, pēc iziešanas cauri nelielam aprakstam, sāksim ar vārdu krājumu. Fails ko mēs veidosim saucas apertium-tr-tk.tk.lexc, un tas satur vārdu krājumu no pārveidotāja. Tādēļ atveriet teksta redaktoru.

Pamati[edit]

Pirmā lieta, ko mums vajag definēt ir etiķetes, kuras mēs vēlamies radīt. Ar lttoolbox, tas ir izdarāms ar <sdefs> sektoru no .dix faila.

Vairākzīmju simboli

%<n%>   ! Lietvārds
%<nom%> ! Nominatīvs
%<pl%>  ! Daudzskaitlis

Simboli < un > ir rezervēti ar lexc, tāpēc mums vajag izvairīties no tiem ar %

Mēs arī definējam Root vārdnīcu, kas norādīs uz sarakstu celmu vārdnīcā NounStems. Root vārdnīca ir analoga <section id="main" type="standard"> iekš lttoolbox:


LEXICON Root

NounStems ;

Tagad pievienosim mūsu abus vārdus:

LEXICON NounStems

maşgala Ninfl ; ! "ģimene"
esger Ninfl ;   ! "kareivis"

Sākumā ieliekam celmu, tad ieliekam piemēru (vai turpinošu klasi) kurš te ieder, šajā gadījumā Ninfl, un beidzot, komentārā (komentāra simbols ir !) ieliekam tulkojumu.

Un definējam visparastāko locījumu, kas ir piestiprinājis atklāto celmu ar <n> lai norādītu lietvārdu:

LEXICON Ninfl

%<n%>: # ;

Šim VĀRDU KRĀJUMAM vajadzētu būt pirms lietvārda celma vārdā. Šis # simbols ir vārda beigu robeža. Tas ir ļoti svarīgi, lai būtu tas, jo tas pasaka, kurā vietā apstāties.

Kompilācija[edit]

Tātad, tagad mums ir vienkārša vārdnīca, kompilēsim un pārbaudīsim to. Mēs kompilējam ar hfst-lexc:

$ hfst-lexc apertium-tr-tk.tk.lexc -o tk-tr.lexc.hfst

(Ja jums nav hfst-lexc instalēts, tev ir problēma -- iespējams jums vajag kompilēt ar --enable-lexc, bet tajā pašā laikā jūs varat izmantot hfst-lexc2fst šī vietā hfst-lexc)

Un abus mēs varam bārbaudīt ar hfst-fst2strings:

$ hfst-fst2strings tk-tr.lexc.hfst 
maşgala<n>:maşgala
esger<n>:esger

Vārdnīcas turpinājums[edit]

Tātad, mēs noskaidrojām, ka maşgala un esger ir lietvārdi, bet kā ar locīšanu. Tas ir kur vārdnīcas turpinājums sākas. Tie ir, piemēram paradigma iekš lttoolbox.

Vienkāršās morphotaktikas turkmēņu lietvārdiem ir:

stem plural? possessive? case copula?

kurā ? apzīmē iespējamību. Te mēs tikai strādājām ar skaitļiem un locījumiem, tātad aprakstīsim locīšanu, sāksim ar skaitli. Faila sekcijā LEXICON Ninfl, pievieno sekojošo rindiņu:

%<n%>%<pl%>:%>l%{A%}r # ;

Fuu, tas izskatās diezgan komplicēti!! Iespējams, taču katrai daļai ir savs iemesls, aprakstīsim tos:

Daļa Apraksts
%<n%>%<pl%> Kreisajā pusē notiek analīze, šajā gadījumā lietvārdam, daudzskaitlī. Ņemiet vērā, ka tas ir pretēji lttoolbox, kur analīze parasti ir labajā pusē.
: Simbols : norobežo labo un kreiso pusi (vai virsmas un leksikas pusi)
%>l%{A%}r Šī ir virsmas forma, kas ir sadalīta:
    %> Morfēmas norobežotājs(mēs par to runāsim vēlāk, bet jūs ielieciet to starp morfēmām kurās varētu notikt izmaiņas.)
    l%{A%}r Virsmas morfēma, šajā gadījumā -lar vai -ler
    %{A%} "Patskaņi"... vietturis patskanis, kas var būt a vai e
# Vārda beigu robeža
; Rindas beigas

Daļa no iemesla, kādēļ tas izskatās sarežģīti ir visi % simboli. Ja mēs tos noņemtu, tad izskatītos daudz salasāmāks:

<n><pl>:>l{A}r # ;

(Jums tie tālāk ir nepieciešami)

Salīdzinājumam, lttoolbox (izmantojot · priekš morfēmas robežas un par {A}), tas varētu izskatīties apmēram tā:

<e><p><l>·l<s n="A"/>r</l><r><s n="n"/><s n="pl"/></e>

Tātad, mēs pievienojām pirmo fleksiju, daudzskaitli. Mums ir jāizdara divas lietas, pirms mēs to pārbaudam. Vispirms mums jāpievieno %{A%} pie Multichar_Symbols faila sekcijas, tādēļ dodaties uz augšu un pievienojiet to, jums vajadzētu iegūt kaut ko tādu:

Multichar_Symbols

%<n%>   ! Lietvārds
%<nom%> ! Nominatīvs
%<pl%>  ! Daudzskaitlis

%{A%}   ! Patskaņi 'a' vai 'e'

Tagad saglabājiet failu. Nākamā lieta, ko mums vajag izdarīt, ir atkal kompilēt failu:

$ hfst-lexc apertium-tr-tk.tk.lexc > tk-tr.lexc.hfst

Un tad mēs varam pārbaudīt:

$ hfst-fst2strings tk-tr.lexc.hfst 
maşgala<n><pl>:maşgala>l{A}r
maşgala<n>:maşgala
esger<n><pl>:esger>l{A}r
esger<n>:esger

Labi, tātad šis ir jauki, tomēr tas tāpat nav diezko labs, šīs nav īsti virsmas formas. Mēs nekad neredzēsim esger>l{A}r nevienā tekstā. Virsmas formas, kuras mēs meklējam, ir esgerler. Tātad, kā to iegūt?

Ievieto twol[edit]

Twol ideja ir paņemt virsmas formas, kas ir veidotas ar lexc un pievienot noteikumus tām, lai izmainītu to īsto virsmu formu. Tātad, šeit mēs to mainām -l{A}r par -lar vai -ler.

Ko mēs būtībā gribam pateikt ir "ja celms satur priekšējos patskaņus, tad mēs vēlamies mainīt priekšējos patskaņus, ja tas satur aizmugurējos patskaņus, tad mēs vēlamies mainīt aizmugurējos patskaņus.". Un tajā pašā laikā noņemt morfēma robežu. Tātad izmēģināsim.

Mēs veidosim jaunu failu apertium-tr-tk.tk.twol.

Sākumā mums vajag definēt alfabētu:

Alfabēts
 A B Ç D E Ä F G H I J Ž K L M N Ň O Ö P R S Ş T U Ü W Y Ý Z
 a b ç d e ä f g h i j ž k l m n ň o ö p r s ş t u ü w y ý z
 %{A%}:a ;

Jums nevajag definēt lielos un mazos burtus dažādās rindās, bet tas var to padarīt uztveramāku.

Mēs arī vēlamies definēt šajā punktā, jebko, kas notiek, mēs vēlamies noņemt morfēmu robežas %> no virsmas formas, tādēļ pievienojiet sekojošo rindiņu tieši zem pēdējās rindas ar mazajiem burtiem, un pirms ;:

 %>:0 

Te, kreisajā pusē ir morfotaktikas forma, bet labajā pusē ir virsmas forma. Ar %>:0 mainās %> par 0, kas ir tas pats, kas izdzēst to. Simbols 0 neizvadās.

Tātad, beigās alfabēts izskatīsies kā šis:

Alfabēts
 A B Ç D E Ä F G H I J Ž K L M N Ň O Ö P R S Ş T U Ü W Y Ý Z
 a b ç d e ä f g h i j ž k l m n ň o ö p r s ş t u ü w y ý z
 %{A%}:a %>:0  ;

Tālāk mums vajag definēt dažas dekorācijas ar ko strādāt, tās ir vienkārši lai dotu memoniku vaibstiem, kā priekšējie patskaņi un aizmugurējie patskaņi, ko mēs vēlēsimies vēlāk atsaukties uz noteikumiem:

Sets

Consonant = B Ç D F G H J Ž K L M N Ň P R S Ş T W Z
            b ç d f g h j ž k l m n ň p r s ş t w z ; 
Vowel =     A E Ä I O Ö U Ü Y Ý 
            a e ä i o ö u ü y ý ;
FrontVowel = Ä E I Ö Ü ä e i ö ü ;  
BackVowel = A Y O U a y o u ;
NonBack = Consonant FrontVowel %> ;
NonFront = Consonant BackVowel %> ; 

Tātad, mums viss ir uzstādīt, lai pievienotu noteikumus tur ir jauna sekcija, Rules:

Rules
  
"Front harmony in suffixes"
%{A%}:e <=> FrontVowel: NonBack:* %>: NonBack:* _ ;

Noteikums vienkārši saka: "Aizstāj {A} ar e, ja iepriekšējais burts ir jebkas, izņemot aizmugurējo patskani, tad tur ir morfēmu robeža, tad tur nav neviena aizmugurējā patskaņa un reizēm ir priekšējais patskanis"

Nākamais, lai kompilētu noteikumu un pārbaudītu to:

$ hfst-twolc -R -i apertium-tr-tk.tk.twol -o tk-tr.twol.hfst
Nolasīt ievadu no tk.twol.
Ierakstīt izvadu uz tk.twol.hfst.
Nolasīt alfabētu.
Nolasīt dekorācijas.
Nolasīt noteikumus un kompilēt to kontekstu un centrus.
Kompilēt un ievietot krātuvē noteikumus.
Kompilēt noteikumus.
Ievietot krātuvē noteikumus.

Ar varu krustot kompozīciju![edit]

Lai iegūtu beidzamo pārveidotāju, ko mums vajag, lai sakombinētu morfotatikas modeli (lexc) ar morfografemikas modeli (twol). Ir veids kā to izdarīt, to sauc par "kompozīciju krustošanu", kas ir diezgan iedarbīga. Ir arī instruments no HFST, kas saucas hfst-compose-intersect to mēs izmantosim.

$ hfst-compose-intersect -1 tr-tk.lexc.hfst -2 tr-tk.twol.hfst -o tr-tk.autogen.hfst

Tagad mēs varam izmēģināt pēdējo pārveidotāju:

$ hfst-fst2strings tr-tk.autogen.hfst
maşgala<n>:maşgala
maşgala<n><pl>:maşgalalar
esger<n>:esger
esger<n><pl>:esgerler

Lieliski!! Mums ir kārotā forma.

Analīze un ģenerācija[edit]

Pārveidotājs, kuru mēs izveidojām, bija paredzēts ražošanai, bet mēs nevaram vēl to izmantot ar hfst-proc formāta dēļ. Ja mēs vēlamies to izmantot ar hfst-proc, viss ko mums vajag pamainīt ir formāts, ar sekojošu komandu:

$ hfst-fst2fst -O -i tr-tk.autogen.hfst -o tr-tk.autogen.hfst.ol

Tagad mums vajadzētu varēt izveidot abus mūsu daudzskaitļus:

$ echo "^maşgala<n><pl>$" | hfst-proc -g tr-tk.autogen.hfst.ol
maşgalalar

un

$ echo "^esger<n><pl>$" | hfst-proc -g tr-tk.autogen.hfst.ol
esgerler

Bet, kas būtu ja mēs vēlētos analizēt kādu vārdu? Tad mums vajag pārkonfigurēt pārveidotāju. Tas ir samainīt kreiso pusi ar labo pusi vietām, izdarīsim to divās stadijās, lai mēs varētu redzēt rezultātu:

$ hfst-invert -i tr-tk.autogen.hfst -o tk-tr.automorf.hfst

$ hfst-fst2strings tk-mor.hfst
maşgala:maşgala<n>
maşgalalar:maşgala<n><pl>
esger:esger<n>
esgerler:esger<n><pl>

Kā mēs varam redzēt, tagad kreisā puse ir virsmas forma, un labā puse ir analīze. Tagad tikai konvertējam analizētāju, lai optimizētu skatu formātam:

$ hfst-fst2fst -O -i tk-tr.automorf.hfst -o tk-tr.automorf.hfst.ol

Un veicam analīzi:

$ echo "maşgalalar" | hfst-proc tk-tr.automorf.hfst.ol
^maşgalalar/maşgala<n><pl>$

$ echo "esgerler" | hfst-proc tk-tr.automorf.hfst.ol
^esgerler/esger<n><pl>$

Problēmu novēršana[edit]

Te ir rezumējums, priekš dažādu problēmu novēršanas, ja jūs kaut ko izdarāt, bet tas nestrādā:

  • Vai visi jūsu daudzzīmju simboli ir definēti? Ieskaitot patskaņus/līdzskaņus. Ja jūs uzskatāt ka pievienojāt tos, tad trīs reizes pārbaudiet. Daudzas problēmas ir ar twol kā arīa ar lexc.

Piezīmes[edit]

  1. šis patiesībā ir superkomplicēts, bet šim pamācošs piemērs, tas ir jādara

Veicinoša lasāmviela[edit]