Polskie Forum Językowe

Językotwórstwo (conlanging) i światy => Inspiracje => Wątek zaczęty przez: Toivo w Maj 16, 2019, 23:06:45

Tytuł: Automatyczne generowanie materiałów dla conlangu
Wiadomość wysłana przez: Toivo w Maj 16, 2019, 23:06:45
TL;DR: Im więcej materiałów mamy dla naszego conlangu (teksty, słowniki, gramatyka), tym trudniej je aktualizować, gdy wprowadzamy zmiany w języku. Dlatego próbuję zautomatyzować generowanie niektórych materiałów dla wigierskiego za pomocą skryptów shellowych.



Tworząc od wielu lat wigierski (https://jezykotw.webd.pl/wiki/J%C4%99zyk_wigierski) doszedłem do etapu, w którym mam już całkiem pokaźny korpus materiałów (teksty, słownik, opis gramatyki itp.). Z drugiej strony, język wciąż jeszcze nie jest idealny - co i rusz nachodzą mnie pomysły na tzw. "reformy", często oznaczające daleko idące zmiany w procesach dźwiękowych, leksyce albo morfologii. I tu powstaje problem: przy każdej takiej zmianie trudno utrzymać wszystkie materiały w aktualnym stanie. Ponadto często nie jestem pewien, czy zmiana przyjmie się na stałe i nie chce mi się wszystkiego aktualizować, skoro potem będę musiał to cofać. Z drugiej strony, to czy zmiana mi się podoba czy nie, często mogę stwierdzić dopiero jak zobaczę ją w akcji w różnych kontekstach, a nie tylko na kilku wyizolowanych przykładach.

Dlatego od jakiegoś czasu chodził mi po głowie pomysł zautomatyzowania procesu tworzenia materiałów. Pierwotny pomysł był taki, żeby trzymać tylko słownik i opis gramatyki w jakimś formalizmie, a jakiś program generowałby mi z tego teksty, strony wiki ze słownikiem i gramatyką, tabelki odmian itp. Po paru nieudanych podejściach stwierdziłem, że opisanie zmian fonetycznych, morfologii i etymologii w sposób zrozumiały dla maszyny - tak, żeby dało się wygenerować automatycznie wszystko, co możliwe - byłoby bardzo trudne. Po pierwsze, nie chciało mi się pisać takiego programu, a po drugie, na pewno i tak nie robiłby wszystkiego w 100% poprawnie.

Postanowiłem więc zmienić podejście na bardziej "oddolne" - zacząć przechowywać moje materiały w bardziej czytelnym formacie (CSV) i automatyzować po kawałku za pomocą prostych skryptów powłoki. Na pierwszy ogień poszły teksty - zamierzam je przechowywać w formie glos, czyli np. tak:
żyć-PRESPP-NOM.M.SG
ryba-NOM.SG
woda-DAT.SG
pod-LOC
pływać-PRES-3SG
!.

W osobnym pliku przechowuję słownik pełnych (odmienionych) form:
âlna pod-LOC âlna
êlva żyć-PRESPP-NOM.M.SG êl
kála ryba-NOM.SG kála
ûi pływać-PRES-3SG ûi
vedî woda-DAT.SG véde

Ten skrypt wstawia obok glos odpowiednie formy.
#!/bin/sh
awk 'FNR == NR { forms[$2] = $1;  next; }
     $1 ~ /^!/ {
         print substr($1, 2);
         next;
     }
     $1 ~ /[A-Za-z0-9\.\-=]+/ {
         form = "???";
         if ($1 in forms) {
             form = forms[$1];
         }
         print form"\t"$1;
         next;
     }
     { print; }' \
     $1 $2
(Jeśli słowo zaczyna się wykrzyknikiem, to jest on usuwany, a dalsza część jest podawana w niezmienionej postaci - przydatne np. przy interpunkcji.)

Wynik:
$ scripts/render_text.sh forms.txt texts/ryba.txt
êlva    żyć-PRESPP-NOM.M.SG
kála    ryba-NOM.SG
vedî    woda-DAT.SG
âlna    pod-LOC
ûi      pływać-PRES-3SG
.

W tym konkretnym przykładzie nie widać jeszcze za bardzo sensu tego wszystkiego, bo każda forma występuje tylko raz. Ale gdyby zastosować to do wszystkich tekstów stąd (https://jezykotw.webd.pl/wiki/J%C4%99zyk_wigierski/Przyk%C5%82adowe_teksty), to myślę, że oszczędzi mi to sporo glosowania. Najważniejsze - jeśli wprowadzę nową zmianę fonetyczną, np. d > r, co zmieni vedî w verî, każdą formę muszę zmienić ręcznie tylko raz. Poza tym, pliki w tym formacie bardzo łatwo przetwarzać dalej - np. sortować, liczyć wystąpienia danego słowa, wyszukiwać wzorce itp.

To dopiero początek - w planach mam dalsze sztuczki:
- konwertowanie gotowych materiałów w formacie CSV (jak ostatni przykład powyżej) do formatu gotowego do publikacji na forum/wiki
- generowanie tabel odmiany (na razie też z glos)
- przechowywanie listy lematów (form słownikowych) i generowanie z nich tego słownika (https://jezykotw.webd.pl/wiki/S%C5%82ownik:Wigierski_(etymologiczny))
- generowanie odmienionych form z lematów za pomocą polecenia sed (opis morfologii jako podstawień na wyrażeniach regularnych)
- w podobny sposób generowanie słów języka z prajęzyka

Na razie dopiero testuję tą metodę - jeśli zauważę, że rzeczywiście ułatwia mi konlandżenie i jeśli inni będą zainteresowani, to opiszę ją tutaj w formie lekcji. Ważne jest to, że nie zamierzam pisać do tego żadnych własnych programów, tylko korzystać z tego, co jest już dostępne w shellu.
Tytuł: Odp: Automatyczne generowanie materiałów dla conlangu
Wiadomość wysłana przez: Henryk Pruthenia w Maj 16, 2019, 23:15:46
Miło Cię widzieć po tylu latach!
Ciekawie to wygląda, na pewno się jakiemuś szaleńcowi kiedyś przyda :] Ja sam nie rozumiem idei wiecznego poprawiania konlangu, a widzę, że dla niektórych to wielki problem. Będzie jakiś apdejt opisu wigierskiego?
Tytuł: Odp: Automatyczne generowanie materiałów dla conlangu
Wiadomość wysłana przez: Toivo w Maj 16, 2019, 23:19:57
Będzie jakiś apdejt opisu wigierskiego?
Będzie. Nie tylko opisu, ale pewnie i samego języka. Co i rusz miewałem nowe pomysły, ale perspektywa aktualizowania i poprawiania wszystkiego co już jest sprawiała, że mi się odechciewało. Jestem coraz bliżej rozwiązania tego problemu ;)
Tytuł: Odp: Automatyczne generowanie materiałów dla conlangu
Wiadomość wysłana przez: Henryk Pruthenia w Maj 17, 2019, 01:06:34
Naprawdę, nie rozumiem jak można tak fajny projekt jak wigierski poprawiać ;P
Tytuł: Odp: Automatyczne generowanie materiałów dla conlangu
Wiadomość wysłana przez: Obcy w Maj 17, 2019, 12:46:59
Ciekawy ten projekt automatyzacji. Sam być może chciałbym pisać na ten temat pracę magisterską z informatyki, ale by mnie uznali chyba za chorego psychicznie, że zajmuję się generowaniem z conlangów. Niestety tylko szkoda, że to tak średnio się nadaje do mojego astralogermańskiego, bo to w założeniu jest projekt silnie naturalistyczny i wszelkie odstępstwa od reguł (tak jak zapożyczenia fonetyczne z haureńskiego lub dolnoniemczyczny) to część tego języka, sporo rzeczy tu działa na zasadzie "coś się przyjęło/nie przyjęło".
Tytuł: Odp: Automatyczne generowanie materiałów dla conlangu
Wiadomość wysłana przez: Борівой w Maj 18, 2019, 08:04:07
Można, dla mnie na przykład projekt jest albo porzucony, albo w trakcie tworzenia i poprawiania :)
Tytuł: Odp: Automatyczne generowanie materiałów dla conlangu
Wiadomość wysłana przez: Kazimierz w Maj 18, 2019, 13:19:11
No ale wigierski też jest chyba dość naturalistyczny, nie?
Tytuł: Odp: Automatyczne generowanie materiałów dla conlangu
Wiadomość wysłana przez: Toivo w Maj 18, 2019, 13:36:08
No, moje inne nooblangi to zazwyczaj jednorazowe ilustracje konkretnego pomysłu, ale z wigierskim jest inaczej. On  powstaje i ewoluuje w mojej głowie czy tego chcę czy nie chcę. Może to patetycznie zabrzmi, ale w pewnym sensie jest częścią mnie ;) O ile pamiętam, Jan van Steenbergen dał kiedyś dobrą odpowiedź na pytanie czemu wymyślamy języki - "bo nie udaje nam się tego nie robić".

Tak jest z wigierskim - on po prostu żyje własnym życiem. Towarzyszy mi już od 11 lat - począwszy od żenującego "języka elfów", który był trochę pozmienianym fińskim, przez kretyńskie pomysły jak nawtykanie retrofleksów i zapożyczeń z sanskrytu, do obecnej formy, od jakichś 6-7 lat w miarę stabilnej, w której jednak wciąż jeszcze czasem coś mnie uwiera. Nawet system głosek wciąż jeszcze ulega drobnym zmianom. Zaczynając sądziłem, że przepis na ładnie brzmiący język, to jak najwięcej /r/, /l/, /n/, /i/, /e/ - potem stopniowo stwierdzałem, że dobra mieszanka potrzebuje też zwartych i szczelinowych. Poza tym, co i rusz nauczę się czegoś nowego o językach ugrofińskich, albo o rozwoju języków ogólnie, i mam pomysł, żeby zastosować to w wigierskim. Np. 2 lata temu byłem na wakacjach w Laponii i wróciłem z wieloma nowymi pomysłami jak obrabiać praugrofiński.

Na 10-lecie, które przypadło w zeszłym roku, zamierzałem wyprodukować gramatykę i zbiór czytanek w formie pdf-a, ale zabrakło czasu. Może innym razem.

Ale się rozpisałem offtopicowo. Temat automatyzacji też będzie kontynuowany ;)