Przejdź do treści

olski.odniesienia

Zaimek, który wskazuje na dwie rzeczy naraz.

Wieloznaczność, którą liczy werdykt, kończy się na kropce: mówi ona, ile kształtów ma jedno zdanie (olski/werdykt/zdanie.py). Zaimek trzeciej osoby wychodzi poza tę granicę, bo rzecz, na którą wskazuje, nazywa czasem dopiero zdanie wcześniejsze, a rozbiór zdania z zaimkiem o tamtym zdaniu nic nie wie. Werdykt nad Są one czerwone. jest przez to ten sam po Widzimy pole maków. i po Maki rosną w garnkach., choć po pierwszym z nich czytelnik ma jedną rzecz do wyboru, a po drugim dwie. Umowa olskiego jest o tekście właśnie z tego powodu (docs/roadmap.md#podzbiór-jest-umową-a-nie-zasięgiem), a ta warstwa jest tym kawałkiem umowy, którego rozbiór jednego zdania nie obejmuje.

Zaimek dostaje zgłoszenie wtedy, gdy zdanie obok nazywa dwie rzeczy albo więcej, a każda z nich zgadza się z nim liczbą i rodzajem. Co to znalezisko mówi autorowi i jakie zaimki bierze, trzyma docs/subset.md#zaimek-wskazujący-na-dwie-rzeczy-jest-drugim-znaleziskiem. Tutaj stoją trzy warunki, których z kodu nie widać, cena każdego z nich oraz rozszerzenie, które czeka za flagą.

Rzecz nazywa najszersza grupa imienna, a nie każdy rzeczownik pod nią. duże pole maków nazywa pole, a maków jest w nim określeniem. Bez tego zawężenia kandydatów jest tylu, ile zdanie ma rzeczowników: Ogrodnik ogląda pole maków w doniczce bratków. nazywa dwie rzeczy, a wydałoby czterech kandydatów, wśród nich maków i bratków, więc Są one czerwone. dostałoby po nim zgłoszenie. Tu widać, czego ta warstwa żąda od rozbioru: morfologia mówi, że pole i maków są rzeczownikami, a która z tych dwóch form jest głową grupy, mówi dopiero drzewo. Drzewo wskazuje czasem dwie głowy jednej grupy naraz, a rzecz jest wtedy dalej jedna (_Rzecz).

Rzeczy podaje pierwszy kawałek tekstu przed zaimkiem, który cokolwiek nazywa. Kawałkiem jest zdanie składowe: najpierw własne, w części stojącej przed zaimkiem, potem składowe stojące przed nim w tym samym zdaniu, jedno po drugim wstecz, a na końcu zdanie obok. Kawałek własnego zdania rozstrzyga milczeniem, a nie listą rzeczy, i to jest wstrzymanie się nad zaimkiem rozstrzygniętym na miejscu: Pierwsze ma jedno odczytanie, więc autor nie ma w nim czego wybierać. nie odsyła czytelnika do zdania obok, bo autor stoi przed nim i zgadza się z nim, a sięganie dalej byłoby zgadywaniem, którego czytelnik nie wykonuje. Wstrzymanie się jest tu odpowiedzią pełnoprawną (docs/linter.md#abstention-is-allowed) i płaci się je milczeniem: wśród zdjętych zgłoszeń jest Olski go nie czyta i o jego polszczyźnie milczy., gdzie kandydatem miejscowym jest sam podmiot zdania, a rzecz podejmowana stoi w zdaniu obok. Zawężenia, po którym Olski przestaje być kandydatem, nikt nie napisał.

Granicą sięgania wstecz jest zdanie obok, a nie akapit. Bierzemy ją stamtąd, skąd bierze ją druga strona: olski/skład/opowieść.py opuszcza podmiot tylko wtedy, gdy o rzeczy była mowa w zdaniu obok. Kandydaci z całego akapitu byliby przez to szersi niż to, co druga strona uznaje za rzecz podaną czytelnikowi.

Wszystkie trzy warunki mylą się w jedną stronę: zdejmują kandydatów, a nie dokładają ich, i tak samo myli się zdanie obok, którego gramatyka nie wyprowadza wcale. Na tej asymetrii stoi decyzja o zaimku bez ani jednego kandydata.

Za flagą w_zdaniu kawałek własnego zdania wydaje rzeczy zamiast milczeć. Zaimek dostaje wtedy zgłoszenie i tam, gdzie dwie rzeczy nazywa składowe obok — Pies gonił kota, a on uciekł. — i tam, gdzie nazywa je własne składowe zaimka dzierżawczego — Jan poprosił Piotra o jego samochód. Rozszerzenie stoi za flagą, bo sądy czytelnika go nie awansowały: przeczytane trafienia nad NKJP są w większości fałszywe (docs/subset.md#rzeczy-z-tego-samego-zdania-czekają-za-flagą). Zgłoszenie spod flagi nosi własną nazwę (olski.werdykt.ODNIESIENIE_W_ZDANIU), więc baza sądów ocenia dwie reguły osobno, a kod wyjścia tej nazwy nie liczy; przebieg, który tych trafień żąda, jest sondą oceniającą (harness/sądy.py).

ZAIMEK = 'ppron3' module-attribute

IMIENNE = frozenset({'subst', 'depr'}) module-attribute

ZGODNE = ('number', 'gender') module-attribute

Odniesienie dataclass

Zaimek wraz z rzeczami, na które może wskazywać.

Rzeczy nazwane są formą, tak jak olski.parse.Przyłączenie nazywa gospodarzy: autor ma je odszukać w tekście, a stoją tam właśnie w tej formie.

Source code in olski/odniesienia.py
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
@dataclass(frozen=True)
class Odniesienie:
    """Zaimek wraz z rzeczami, na które może wskazywać.

    Rzeczy nazwane są formą, tak jak :class:`olski.parse.Przyłączenie` nazywa
    gospodarzy: autor ma je odszukać w tekście, a stoją tam właśnie w tej formie.
    """

    #: Zaimek tak, jak stoi w zdaniu.
    zaimek: str
    #: Formy rzeczy, które się z nim zgadzają, ustawione tak jak w kawałku,
    #: z którego wyszły.
    rzeczy: tuple[str, ...]
    #: Czy rzeczy stoją w zdaniu zaimka, czy w zdaniu obok. Rozdziela to dwie
    #: reguły, bo pierwszą z nich wydaje samo rozszerzenie za flagą, a baza sądów
    #: ocenia je osobno (:data:`olski.werdykt.ODNIESIENIE_W_ZDANIU`).
    w_zdaniu: bool

zaimek instance-attribute

rzeczy instance-attribute

w_zdaniu instance-attribute

__init__(zaimek, rzeczy, w_zdaniu)

niejasne_odniesienia(text, wyniki, w_zdaniu=False)

Zgłoszenia o zaimkach, po jednej krotce na zdanie i w kolejności zdań.

Tekstem, a nie samym podziałem, bo tak bierze go druga warstwa tekstowa (olski.rozstrzyganie.sąsiedztwa), i tak samo buduje sobie dokument. Zdanie obok wskazuje ostatni z numerów, które podaje olski.document.Document.wcześniejsze.

w_zdaniu jest flagą rozszerzenia, którego sądy czytelnika nie awansowały; co za nią stoi i czemu domyślnie milczy, trzyma docstring modułu.

Rozbiór, a nie werdykt nad nim: i zaimki, i kandydatów wyjmuje się z czytań, a werdykt czyta stąd (olski.werdykt.nad_tekstem), więc import w tamtą stronę zamykałby krąg.

Source code in olski/odniesienia.py
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
def niejasne_odniesienia(
    text: str, wyniki: Sequence[Result], w_zdaniu: bool = False
) -> list[tuple[Odniesienie, ...]]:
    """Zgłoszenia o zaimkach, po jednej krotce na zdanie i w kolejności zdań.

    Tekstem, a nie samym podziałem, bo tak bierze go druga warstwa tekstowa
    (:func:`olski.rozstrzyganie.sąsiedztwa`), i tak samo buduje sobie dokument.
    Zdanie obok wskazuje ostatni z numerów, które podaje
    :attr:`olski.document.Document.wcześniejsze`.

    ``w_zdaniu`` jest flagą rozszerzenia, którego sądy czytelnika nie awansowały;
    co za nią stoi i czemu domyślnie milczy, trzyma docstring modułu.

    Rozbiór, a nie werdykt nad nim: i zaimki, i kandydatów wyjmuje się z czytań,
    a werdykt czyta stąd (:func:`olski.werdykt.nad_tekstem`), więc import
    w tamtą stronę zamykałby krąg.
    """
    return [
        _zgłoszenia(wynik, wyniki[poprzednie[-1]] if poprzednie else None, w_zdaniu)
        for wynik, poprzednie in zip(wyniki, Document(text).wcześniejsze, strict=True)
    ]