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

From Apertium
Jump to navigation Jump to search
Line 401: Line 401:
<references/>
<references/>


==Veicinoša lasāmviela==
==Further reading==


[[Category:HFST]]
[[Category:HFST]]

Revision as of 21:31, 5 December 2011

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

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

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

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

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

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

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

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

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

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

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!

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

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

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

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

Veicinoša lasāmviela