Automatyczne generowanie materiałów dla conlangu

Zaczęty przez Toivo, Maj 16, 2019, 23:06:45

Poprzedni wątek - Następny wątek

Toivo

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

Henryk Pruthenia

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?

Toivo

Cytat: Henryk Pruthenia w Maj 16, 2019, 23:15:46
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 ;)
  •  

Henryk Pruthenia

Naprawdę, nie rozumiem jak można tak fajny projekt jak wigierski poprawiać ;P

Obcy

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".
  •  

Todsmer

Można, dla mnie na przykład projekt jest albo porzucony, albo w trakcie tworzenia i poprawiania :)
  •  

Kazimierz

No ale wigierski też jest chyba dość naturalistyczny, nie?
  •  

Toivo

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