Przejdź do treści

olski.parse.podsumowanie

Co werdykt bierze z lasu i czym o to pyta.

Deklaracja jest pytaniem, które gramatyka wypełnia o sobie, a Result wraz z Przyłączenie i Rozbieżność odpowiedzią. Liczy te odpowiedzi las (olski/parse/las.py); typy są od niego osobno, bo czyta je warstwa, która lasu nie ogląda (olski/werdykt.py).

Przyłączenie dataclass

Modyfikator, którego przyłączenie zostaje nierozstrzygnięte, i jego gospodarze.

Werdykt nad zdaniem o kilku takich przyłączeniach ma powiedzieć autorowi, co poprawić, a lista czytań mówi to iloczynem: sześć niezależnych wyborów wychodzi z niej sześćdziesięcioma czterema wierszami. Stąd ta postać, czyli jeden wpis na wybór: wpisów jest tyle, ile decyzji, a nie ile czytań.

Source code in olski/parse/podsumowanie.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@dataclass(frozen=True)
class Przyłączenie:
    """Modyfikator, którego przyłączenie zostaje nierozstrzygnięte, i jego gospodarze.

    Werdykt nad zdaniem o kilku takich przyłączeniach ma powiedzieć autorowi, co poprawić,
    a lista czytań mówi to iloczynem:
    sześć niezależnych wyborów wychodzi z niej sześćdziesięcioma czterema wierszami.
    Stąd ta postać, czyli jeden wpis na wybór:
    wpisów jest tyle, ile decyzji, a nie ile czytań.
    """

    #: Formy modyfikatora, czyli to, co autor ma przestawić.
    modyfikator: str
    #: Konstytuenty, do których modyfikator w czytaniach dochodzi,
    #: nazwane swoją głową i ustawione tak jak w zdaniu.
    gospodarze: tuple[str, ...]

modyfikator instance-attribute

gospodarze instance-attribute

__init__(modyfikator, gospodarze)

Rozbieżność dataclass

Konstytuent, który czyta się kilkoma sposobami tam, gdzie streszczenie nie zagląda.

Streszczenie nazywa wypełnienie roli i gospodarza przyłączenia, więc dwa czytania różne czymkolwiek innym wychodzą z niego jednym napisem, a werdykt mówi wtedy samą liczbę czytań i czyta się jak usterka narzędzia. Poza zasięgiem streszczenia zostają dwa miejsca: wnętrze wypełnienia jednej roli i wnętrze zdania podrzędnego (Deklaracja.podrzędne). zainteresowana rada gminy jest raz przymiotnikiem przed rzeczownikiem, a raz rzeczownikiem z dopełniaczem po nim, i podmiotem jest w obu ten sam napis; że organ gminy wydaje przepis różni podmiot i dopełnienie, tyle że tamtego zdania, a nie tego.

Lematu wpis nie nazywa, choć różnica bywa właśnie lematem. Nazwałby to, czego liczba czytań obok niego nie liczy: część mowy i lemat są z tożsamości czytania wyłączone rozmyślnie (Node.signature), więc dwa czytania różne samym lematem są jednym.

Streszczenia niesie wpis dlatego, że streszczenie zdania ich nie niesie: rola z wnętrza zdania podrzędnego jest rolą tego zdania, a nie tego nad nim, więc dopiero streszczone osobno mówi, czym te czytania się różnią — w Ustawa mówi, że organ gminy wydaje przepis. podmiotem jest raz organ gminy, a raz przepis. Grupa imienna roli zdania nie nosi, więc oba jej kształty streszczają się pustym słownikiem i po odsianiu powtórzeń zostaje z nich jedno streszczenie: różnicę niesie tam głowa, której streszczenie nie nazywa (todo/).

Source code in olski/parse/podsumowanie.py
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
@dataclass(frozen=True)
class Rozbieżność:
    """Konstytuent, który czyta się kilkoma sposobami tam, gdzie streszczenie nie zagląda.

    Streszczenie nazywa wypełnienie roli i gospodarza przyłączenia,
    więc dwa czytania różne czymkolwiek innym wychodzą z niego jednym napisem,
    a werdykt mówi wtedy samą liczbę czytań i czyta się jak usterka narzędzia.
    Poza zasięgiem streszczenia zostają dwa miejsca:
    wnętrze wypełnienia jednej roli i wnętrze zdania podrzędnego
    (:attr:`Deklaracja.podrzędne`).
    ``zainteresowana rada gminy`` jest raz przymiotnikiem przed rzeczownikiem,
    a raz rzeczownikiem z dopełniaczem po nim, i podmiotem jest w obu ten sam napis;
    ``że organ gminy wydaje przepis`` różni podmiot i dopełnienie,
    tyle że tamtego zdania, a nie tego.

    Lematu wpis nie nazywa, choć różnica bywa właśnie lematem.
    Nazwałby to, czego liczba czytań obok niego nie liczy:
    część mowy i lemat są z tożsamości czytania wyłączone rozmyślnie
    (:meth:`Node.signature`), więc dwa czytania różne samym lematem są jednym.

    Streszczenia niesie wpis dlatego, że streszczenie zdania ich nie niesie:
    rola z wnętrza zdania podrzędnego jest rolą tego zdania, a nie tego nad nim,
    więc dopiero streszczone osobno mówi, czym te czytania się różnią —
    w ``Ustawa mówi, że organ gminy wydaje przepis.``
    podmiotem jest raz ``organ gminy``, a raz ``przepis``.
    Grupa imienna roli zdania nie nosi, więc oba jej kształty streszczają się
    pustym słownikiem i po odsianiu powtórzeń zostaje z nich jedno streszczenie:
    różnicę niesie tam głowa, której streszczenie nie nazywa (``todo/``).
    """

    #: Formy konstytuenta, czyli to, co autor ma przepisać.
    konstytuent: str
    #: Ile czytań ten konstytuent ma, liczone tak jak :attr:`Result.ile` liczy zdanie.
    ile: int
    #: Streszczenia tych czytań, każde raz (:func:`streszczenia`).
    #: Pola bez wartości domyślnej, bo jedno streszczenie jest tu twierdzeniem
    #: o konstytuencie: znaczy, że streszczenie tej różnicy nie widzi.
    czytania: tuple[tuple[dict[str, str], ...], ...]

konstytuent instance-attribute

ile instance-attribute

czytania instance-attribute

__init__(konstytuent, ile, czytania)

Obsada dataclass

Które role czytania obsadzają pozycje ramy czasownika.

Czyta to warstwa nad plikiem żądań (olski/żądania.py): żeby powiedzieć, czego czasownik żąda od słowa stojącego w jego pozycji, trzeba wiedzieć, która rola niesie ten czasownik, a która jego pozycję wypełnia. Rolami, bo warstwa ta ogląda gotowe czytanie, a nie gramatykę, a w czytaniu pozycja ramy jest właśnie etykietą roli.

Source code in olski/parse/podsumowanie.py
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
@dataclass(frozen=True)
class Obsada:
    """Które role czytania obsadzają pozycje ramy czasownika.

    Czyta to warstwa nad plikiem żądań (``olski/żądania.py``):
    żeby powiedzieć, czego czasownik żąda od słowa stojącego w jego pozycji,
    trzeba wiedzieć, która rola niesie ten czasownik, a która jego pozycję wypełnia.
    Rolami, bo warstwa ta ogląda gotowe czytanie, a nie gramatykę,
    a w czytaniu pozycja ramy jest właśnie etykietą roli.
    """

    #: Role, których głowa rządzi ramą zdania składowego.
    #: Jest ich kilka, bo orzeka też forma nieosobowa i predykatyw
    #: (``ORZECZENIE_BEZOSOBOWE`` w ``olski/subset/deklaracja.py``);
    #: w jednym zdaniu składowym stoi jedna z nich.
    orzeczenia: tuple[str, ...]
    #: Rola stojąca w pozycji podmiotu.
    podmiot: str
    #: Role, których pozycję nazywa przypadek wypełnienia,
    #: bo jedna nazwa roli pokrywa kilka pozycji ramy:
    #: `dopełnienie` nie mówi, w którym przypadku stoi.
    przypadkowe: tuple[str, ...]
    #: Symbole, których wnętrze obsadza ramę własnego czasownika:
    #: `dokument` w `Autor zamierzył edytować dokument.` jest dopełnieniem
    #: bezokolicznika, a nie formy osobowej nad nim.
    #: Zejście po role staje na nich, więc wiersz o tym dopełnieniu nie powstaje
    #: wcale, zamiast powstać z żądaniem cudzego czasownika.
    własna_rama: tuple[str, ...]

orzeczenia instance-attribute

podmiot instance-attribute

przypadkowe instance-attribute

własna_rama instance-attribute

__init__(orzeczenia, podmiot, przypadkowe, własna_rama)

Deklaracja dataclass

Co gramatyka mówi o sobie podsumowaniom werdyktu.

Które symbole są rolami i gdzie szukać przyłączenia, wie gramatyka, a nie rozbiór, więc każde podsumowanie bierze to jedną wartością — parse, describe i obie metody Las pod nimi — a podsumowanie następne dokłada tutaj pole i nie rusza żadnej z tych sygnatur. Wypełnia ją gramatyka, a typ definiuje rozbiór, bo formalizm z olski/grammar.py niesie produkcje i o werdykcie nic nie wie.

Source code in olski/parse/podsumowanie.py
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
@dataclass(frozen=True)
class Deklaracja:
    """Co gramatyka mówi o sobie podsumowaniom werdyktu.

    Które symbole są rolami i gdzie szukać przyłączenia, wie gramatyka, a nie rozbiór,
    więc każde podsumowanie bierze to jedną wartością —
    :func:`parse`, :func:`describe` i obie metody :class:`Las` pod nimi —
    a podsumowanie następne dokłada tutaj pole i nie rusza żadnej z tych sygnatur.
    Wypełnia ją gramatyka, a typ definiuje rozbiór,
    bo formalizm z ``olski/grammar.py`` niesie produkcje i o werdykcie nic nie wie.
    """

    #: Role, którymi streszcza się czytanie i o które czytania mogą się różnić.
    role: tuple[str, ...]
    #: Role, które się przyłączają,
    #: czyli te, przy których streszczenie nazywa jeszcze gospodarza.
    przyłączane: tuple[str, ...]
    #: Symbole konstytuentów, w których produkcjach przyłączenie stoi.
    gospodarze: tuple[str, ...]
    #: Ta z ról przyłączanych, której nierozstrzygniętego gospodarza werdykt liczy
    #: osobnym wierszem (:meth:`Las.przyłączenia`),
    #: a warstwa za parserem zgaduje (``olski/rozstrzyganie.py``).
    #: Jest nią jedna, bo tabela skłonności i leksykon walencyjny
    #: mówią o wyrażeniu przyimkowym, a nie o każdym okoliczniku;
    #: czy wiersz werdyktu ma być szerszy od warstwy, trzyma ``todo/``.
    rozstrzygany: str
    #: Symbole, których produkcje koordynują, czyli te, po których streszczenie
    #: nawiasuje człon ciągu współrzędnego.
    współrzędne: tuple[str, ...]
    #: Symbole zdań składowych, czyli członów ciągu zdań współrzędnych.
    #: Streszczeń jest tyle, ile zdanie ma składowych, po jednym na składowe,
    #: więc widać w nich całe zdanie współrzędne (:func:`describe`).
    składowe: tuple[str, ...]
    #: Symbole zdań podrzędnych, czyli tych, których wnętrze jest osobnym zdaniem.
    #: Streszczenie i :meth:`Las.różniące` zatrzymują się na nich,
    #: bo rola z wnętrza takiego zdania jest jego rolą, a nie rolą zdania nad nim.
    #: Zatrzymują się na nich, a nie przed nimi: symbol stojący i tutaj, i w
    #: :attr:`role` nazywa się w streszczeniu całym sobą i wnętrza nie otwiera,
    #: czym jest okolicznik wyrażony zdaniem.
    #: Zatrzymać się muszą oba naraz, inaczej wiersz ``differing in``
    #: nazywa rolę, której lista czytań pod nim nie nazywa.
    #: Wywód, przykład i cenę trzyma
    #: docs/parsowanie.md#werdykt-jest-zapytaniem-o-las-a-nie-listą-czytań.
    podrzędne: tuple[str, ...]
    #: Które role obsadzają pozycje ramy czasownika (:class:`Obsada`).
    obsada: Obsada
    #: Symbol konstytuenta, którym tekst nazywa rzecz.
    #: Pyta o niego warstwa szukająca tego, na co zaimek wskazuje
    #: (``olski/odniesienia.py``): kandydatem jest głowa takiego konstytuenta
    #: wziętego najszerzej, bo `duże pole maków` nazywa pole, a nie maki.
    #: Rolą ten symbol nie jest, bo rzecz nazwana stoi w każdej z ról imiennych
    #: i pod przyimkiem także, a pytanie jest o nią samą, a nie o jej pozycję.
    grupa_imienna: str

role instance-attribute

przyłączane instance-attribute

gospodarze instance-attribute

rozstrzygany instance-attribute

współrzędne instance-attribute

składowe instance-attribute

podrzędne instance-attribute

obsada instance-attribute

grupa_imienna instance-attribute

__init__(role, przyłączane, gospodarze, rozstrzygany, współrzędne, składowe, podrzędne, obsada, grupa_imienna)

Result dataclass

What the parser concluded about one sentence.

Source code in olski/parse/podsumowanie.py
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
@dataclass
class Result:
    """What the parser concluded about one sentence."""

    #: Ile czytań zdanie ma, policzone po lesie i bez granicy, jakiej podlega
    #: :attr:`readings`.
    #: Liczba jest osobno od listy,
    #: bo werdykt nad zdaniem o sześciu nierozstrzygniętych przyłączeniach
    #: jest liczbą, której nikt nie chce zobaczyć wypisanej drzewo po drzewie.
    ile: int = 0
    readings: list[Node] = field(default_factory=list)
    #: The furthest graph node any partial analysis reached, which is where a
    #: rejected sentence stopped making sense.
    #: Over a sentence that has a reading it is the sentence's last node.
    #: ``None`` says that nobody asked (:func:`podsumuj`), not that no analysis
    #: reached anywhere: the first graph node is an answer, since a sentence
    #: that stops on its own first form stops there.
    furthest: int | None = None
    #: Czy wyliczanie stanęło na :data:`MAX_READINGS`,
    #: czyli czy lista czytań jest krótsza niż :attr:`ile`.
    truncated: bool = False
    #: Role, o które czytania się różnią, o ile :func:`parse` dostał :class:`Deklaracja`.
    #: Wzięte z lasu, a nie ze streszczeń, których jest najwyżej :data:`MAX_READINGS`;
    #: dlaczego, mówi :meth:`Las.różniące`.
    różniące: tuple[str, ...] = ()
    #: Przyłączenia, których czytania nie rozstrzygają,
    #: z tej samej deklaracji co :attr:`różniące`.
    #: Wpisane tu, a nie odpytywane z lasu:
    #: las jednego zdania waży tyle, ile jego tablica,
    #: a werdyktów trzyma się naraz tyle, ile dokument ma zdań.
    przyłączenia: tuple[Przyłączenie, ...] = ()
    #: Konstytuenty, w których czytania się różnią poza zasięgiem streszczenia,
    #: z tej samej deklaracji co :attr:`różniące`.
    rozbieżności: tuple[Rozbieżność, ...] = ()

    @property
    def valid(self) -> bool:
        return self.ile == 1

    @property
    def ambiguous(self) -> bool:
        return self.ile > 1

    @property
    def rejected(self) -> bool:
        return self.ile == 0

    @property
    def status(self) -> str:
        """Which of the three the sentence is, as the verdict a reader is shown."""
        if self.valid:
            return "valid"
        return "ambiguous" if self.ambiguous else "rejected"

ile = 0 class-attribute instance-attribute

readings = field(default_factory=list) class-attribute instance-attribute

furthest = None class-attribute instance-attribute

truncated = False class-attribute instance-attribute

różniące = () class-attribute instance-attribute

przyłączenia = () class-attribute instance-attribute

rozbieżności = () class-attribute instance-attribute

valid property

ambiguous property

rejected property

status property

Which of the three the sentence is, as the verdict a reader is shown.

__init__(ile=0, readings=list(), furthest=None, truncated=False, różniące=(), przyłączenia=(), rozbieżności=())