j-olski¶
Olski to parser i generator polszczyzny, z których budujemy kompilator. Parser czyta zdanie gramatyką pisaną ręką nad Morfeuszem 2 i zwraca wszystkie rozbiory. Generator, nazwany składem, składa polskie zdanie z drzewa tego, co ma zostać powiedziane. Oba są deterministyczne: to samo wejście daje tę samą odpowiedź.
Kierunek¶
Kompilator ma cztery etapy:
- Front-end: Morfeusz i gramatyka dają wszystkie rozbiory zdania. Działa.
- Reprezentacja pośrednia: kto, co, komu; rozbiory o tej samej strukturze dają jedną.
Zalążek działa (
olski/reprezentacja.py). - Przebieg semantyczny: typy z Walentego i model uczony na strukturach, nigdy na napisie. Do zbudowania.
- Back-end: skład. Działa dla konstrukcji, które ma.
Uzasadnienie, otwarte decyzje i następny krok opisuje docs/kierunek.md.
Co działa¶
Zainstaluj pakiet z zależnościami deweloperskimi:
pip install -e '.[dev]'
Rozbiór. Narzędzie wypisuje wszystkie czytania zdania.
python3 -m olski.check --readings -c "Program otwierający się psuje.
Operator ustala priorytet."
<text>: Program otwierający się psuje.
3 odczytania, różne w rolach: dopełnienie, orzeczenie, podmiot
- podmiot: Program otwierający się, orzeczenie: psuje
- podmiot: Program otwierający, orzeczenie: się psuje
- dopełnienie: Program otwierający się, orzeczenie: psuje
<text>: Operator ustala priorytet.
2 odczytania, różne w rolach: dopełnienie, podmiot
- podmiot: Operator, dopełnienie: priorytet, orzeczenie: ustala
- podmiot: priorytet, dopełnienie: Operator, orzeczenie: ustala
zdań: 2; wieloznaczne: 2; bez odczytania: 0
Drugie czytanie drugiego zdania jest składniowo możliwe, bo polszczyzna zna szyk dopełnienie–orzeczenie–podmiot, ale priorytet nie ustala operatora. Odrzucić je ma przebieg semantyczny, a nie gramatyka.
Zaimek wskazujący na dwie rzeczy.
python3 -m olski.check -c "Narzędzie sprawdza zdania tekstu.
Autor poprawia je sam."
<text>: Autor poprawia je sam.
„je” wskazuje na „Narzędzie” albo „zdania”
zdań: 2; wieloznaczne: 0; bez odczytania: 0; niejasne odniesienia: 1
Morfologia dopuszcza oba odniesienia. Autor poprawia zdania, a nie narzędzie, ale tego nie widać bez semantyki.
Skład. Wchodzi drzewo tego, co ma zostać powiedziane, a wychodzi zdanie.
from olski.skład import kompiluj
from olski.skład.słownik import A, R, V, jest
kompiluj(jest(R.parser / R.podzbiór, R.cel)) # Parser podzbioru jest celem.
kompiluj(V.sprawdzać(R.parser, ~(A.polski * R.tekst))) # Parser sprawdza polskie teksty.
Ten sam skład losuje tekst do makiety:
python3 -m olski.skład.makieta --ziarno 1871 --akapity 1
Czeladnik zapłakał w wąskiej piwnicy. Dziewczyna zgubiła glinianą skrzynię, ponieważ czeladnik zszedł. Zdążyła mieszkać przed ciężkim młynem. Córka dała dziewczynie koszyk. Zdążyła wrócić od młodej wdowy. Czeladnik zważył kufry gospodarza i sukno.
Witryna.
python3 -m witryna stawia lokalnie stronę z tym samym werdyktem.
Wdrożona stoi pod adresem olski.pl.
Repozytorium¶
olski/: pakiet, czyli parser, gramatyka, werdykt i skład. Mapę modułów podaje docs/kod.md.harness/: potoki danych i pomiar pokrycia, dla tego, kto olskiego rozwija.próba/: zdania z cudzego tekstu wraz z oceną, czyli materiał do ewaluacji.witryna/: strona i jej API.tests/: testy pakietu, potoków i witryny.
Skąd wziąć Morfeusza, Walentego, Składnicę i NKJP, mówi docs/zasoby.md. Dokumentacja wraz z referencją API stoi pod adresem dokumentacja.olski.pl.
Stan sprzed resetu¶
Do commita d79da51 projekt miał inny kierunek:
sprawdzacz, który zgłasza usterki tekstu samą gramatyką podzbioru.
Tamte dokumenty, rejestr otwartej roboty i reguły pracy są w gicie
(git show d79da51:docs/roadmap.md).
Czemu ten kierunek porzuciliśmy, mówi docs/kierunek.md.
Licencja¶
Kod, testy i proza są na licencji MIT.
Dwa pliki danych podlegają warunkom swoich źródeł:
olski/leksykon.txt i olski/żądania.txt powstają z Walentego i są na CC BY-SA 4.0,
a olski/skłonności.txt powstaje ze Składnicy i jest na GPL v3.
Zdania w próba/wybory*.txt są cudze i to repozytorium ich nie licencjonuje,
a zdania w próba/nkjp-*.txt pochodzą z NKJP i są na CC BY 4.0.
Wszystko to deklaruje REUSE.toml.
Teksty licencji są w katalogu LICENSES/, nazwane identyfikatorem SPDX.