Językotwórstwo (conlanging) i światy > Inspiracje

Automatyczne generowanie materiałów dla conlangu

(1/2) > >>

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:

--- Kod: ---żyć-PRESPP-NOM.M.SG
ryba-NOM.SG
woda-DAT.SG
pod-LOC
pływać-PRES-3SG
!.

--- Koniec kodu ---

W osobnym pliku przechowuję słownik pełnych (odmienionych) form:

--- Kod: ---â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

--- Koniec kodu ---

Ten skrypt wstawia obok glos odpowiednie formy.

--- Kod: ---#!/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

--- Koniec kodu ---
(Jeśli słowo zaczyna się wykrzyknikiem, to jest on usuwany, a dalsza część jest podawana w niezmienionej postaci - przydatne np. przy interpunkcji.)

Wynik:

--- Kod: ---$ 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
.

--- Koniec kodu ---

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?

--- Koniec cytatu ---
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".

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

Nie udało się pochwalić
Pochwalanie...
Idź do wersji pełnej