Difference between revisions of "Jaunas valodas uzsakšana ar HFST"
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 + s
→wolves
Š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 arlexc
.
Piezīmes
- ↑ šis patiesībā ir superkomplicēts, bet šim pamācošs piemērs, tas ir jādara