HFST dla conlangerów

Zaczęty przez Toivo, Lipiec 23, 2016, 00:33:19

Poprzedni wątek - Następny wątek

Toivo

Dalszy ciąg cyklu "oprogramowanie dla conlangera": większość z nas tworząc swoje konlangi korzysta z przemian fonetycznych i dobrze by było mieć program, który je automatyzuje (nawiązując m. in. do tego posta). Przedtawię tutaj krótkie wprowadzenie do HFST (Helsinki Finite State Tools) - zestawu narzędzi do tworzenia i manipulowania transduktorami. Transduktory, to takie maszynki, które definiują relacje między ciągami znaków - nie będziemy się skupiać na teorii, ważne, że za ich pomocą daje się wygodnie (i z informatycznego punktu widzenia optymalnie) przedstawić zjawiska fonologiczne i morfologiczne, jak również zbiory słów (leksykony).

Uwaga: Być może opisane tu narzędzia wydają się trudne w obsłudze w porównaniu do dostępnych w necie apletów typu "Sound Change Applier". Warto jednak spróbować, bo ich możliwości są potężne.

LEKCJA 1. Pierwsze kroki

1.1. Pobranie i instalacja pakietu.

Pakiet pobieramy stąd: https://hfst.github.io/downloads/index.html (Windows: hfst-latest.zip; Ubuntu: hfst_3.11.0~XXX.deb i libhfst46_3.11.0~XXX.deb; reszta podobnie). Instalacja nie powinna sprawić problemów.

Uwaga: ten poradnik jest pisany z perspektywy użytkownika Linuxa (Ubuntu). Zakładam, że na Windowsie programy działają podobnie, ale tego nie sprawdzałem. Programy, których będziemy używać, działają w konsoli, więc jakie-takie obycie z konsolą jest wymagane.

1.2. Przykład użycia

Zamiast odstraszać na samym początku dokładnym opisem składni plików, z którymi będziemy pracować, pokażę prosty przykład, na razie nie wyjaśniając wszystkich szczegółów. Myślę, że z samego wyglądu plików domyślicie się, co się dzieje, a o szczegółach pomówimy później.

Nasze projekty zazwyczaj będą się składać z dwóch rodzajów plików: leksykonu i reguł. Leksykon definiujemy następująco (poniższą zawartość zapisujemy w pliku np. lexicon.txt):


LEXICON Root
byti # ;
dikъ # ;
domъ # ;
duxъ # ;
gordъ # ;
kotъ # ;
xoditi # ;
roditi # ;
viděti # ;
vьlkъ # ;


Z kolei plik z regułami, nazwijmy go np. rules.txt, będzie wyglądał następująco:


Alphabet

a b c d e ě f g h i j k l m n o ó p r s t u v w x y z ъ ь ;

Rules

"wygłosowe ъ wypada"
ъ:0 <= _ .#. ;

"ьl > il"
ь:i <= _ l:l ;

"or > ró (1)"
o:r <=> _ r:? d:d ;

"or > ró (2)"
r:ó <=> o:r _ d:d ;

"x > ch"
x:ch <= _ ;

"palatalizacja d"
d:dz <=> _ i:i ;

"palatalizacja t"
t:ć <=> _ i:0 ;

"niespalatalizowane t"
t:t /<= _ ?:i ;

"i wypada w końcówce -ti"
i:0 <=> t:ć _ .#. ;

"palatalizacja d przed jaciem"
d:dzi <=> _ ě:? ;

"jać > e"
ě:e <= _ ;

"v > w"
v:w <= _ ;


Oczywiście to nie jest pełna lista zmian z prasłowiańskiego do polskiego, tylko kilka reguł, które pasują do wybranych przeze mnie słów. Jak widać format reguł jest dosyć bliski temu, do czego jesteśmy przyzwyczajeni.

Teraz wykonujemy kilka magicznych operacji w konsoli:

$ hfst-lexc lexicon.txt -o lexicon.fsm
$ hfst-twolc rules.txt -o rules.fsm
$ hfst-compose-intersect lexicon.fsm rules.fsm -o analyzer.fsm

(dla nieobytych z Linuxem: początkowego "$" nie przepisujemy, to znak rozpoczynający linię komend, tak jak w Windowsie "C:\>").

Co tu się działo? Otóż najpierw zarówno z leksykonu, jak i z reguł, tworzymy transduktory za pomocą odpowiednich programów (lexc do tworzenia leksykonów, twolc) do reguł. Następnie składamy nasze transduktory, stosując reguły do słów zawartych w leksykonie. W wyniku otrzymujemy transduktor, który definiuje relację pomiędzy prasłowiańskimi rdzeniami, a ich odpowiednikami po zastosowaniu reguł, czyli polskimi słowami. Możemy tą relację przeglądać np. za pomocą polecenia hfst-fst2strings, które wyświetla wszystkie pary rozpoznawane przez transduktor:


$ hfst-fst2strings analyzer.fsm
byti:być
domъ:dom
duxъ:duch
dikъ:dzik
gordъ:gród
kotъ:kot
roditi:rodzić
viděti:widzieć
vьlkъ:wilk
xoditi:chodzić


Za pomocą innych poleceń możemy wyświetlić tylko lewą lub tylko prawą stronę, stosować reguły do nowych rdzeni itp., ale nie wszystko na raz.

To, co tutaj przedstawiłem, to zaledwie mały wycinek możliwości pakietu HFST - wygląda na to, że może się to przydać w pracy conlangera. Jeśli temat wzbudzi zainteresowanie, będę kontynuował poradnik. Dla tych, którzy chcą dowiedzieć się więcej, polecam książkę [1].

[1] K. Beesley, L. Karttunen, Finite State Morphology. CSLI Publications, 2003.

  •