Przejdź do treści

olski.żądania

Czego czasownik żąda od słowa stojącego w jego pozycji: leksykon nad plikiem żądań.

Leksykon walencyjny mówi, co czasownik bierze, a nie mówi, czego od tego żąda: zażądać bierze dopełnienie w dopełniaczu, a w podmiocie żąda człowieka. To drugie stoi w olski/żądania.txt, który wychodzi z wydania TEI Walentego (harness/żądania.py), a czemu jest plikiem osobnym od leksykonu, mówi docs/walencja.md#żądanie-pozycji-jest-osobnym-plikiem-a-nie-kolumną-leksykonu.

Moduł ten czyta sam plik i odpowiada na pytanie o jedno słowo w jednej pozycji. Które słowo w zdaniu jest czasownikiem i którą pozycję obsadza które wypełnienie, rozstrzyga warstwa nad czytaniem (Verdict.żądania w olski/werdykt.py); tam też stoi wiersz, którym werdykt to nazywa. Podział jest ten sam co przy leksykonie walencyjnym: plik czyta moduł, który nie ogląda ani gramatyki, ani rozbioru, więc czyta się go bez analizatora morfologicznego i bez niego działa też przekład, który ten plik pisze.

Odpowiedź jest połową pytania i drugiej połowy tu nie ma. Warstwa nazywa żądanie i nie pyta, czy słowo stojące w pozycji je spełnia; orzekłby o tym wordnet, którego to repozytorium nie ma (docs/open-questions.md#shared-questions). Wyjątkiem są klasy osobowe (OSOBOWE), bo tam odpowiada projekt sam, deklaracją swoich osób (olski/osoby.py); żądanie i tam wychodzi stąd, a spełnienie stamtąd.

Milczenie jest odpowiedzią pełnoprawną, tak samo jak w warstwie rozstrzygającej (olski/rozstrzyganie.py), i jest odpowiedzią domyślną (żądane). Główną jego przyczyną jest zasięg samego pliku: warstwę semantyczną ma w tym wydaniu część czasowników leksykonu, i nie ma jej ani jeden z tych, którymi ten rejestr orzeka najczęściej (docs/prior-art.md#polish-language-resources).

PLIK = Path(__file__).parent / 'żądania.txt' module-attribute

DOWOLNA = 'ALL' module-attribute

SYNSETY = 'synsety' module-attribute

RELACJA = 'relacja' module-attribute

NIENAZWANE = frozenset({SYNSETY, RELACJA}) module-attribute

OSOBOWE = frozenset({'LUDZIE', 'ISTOTY', 'PODMIOTY'}) module-attribute

PRZYPADKI = (BIERNIK, CELOWNIK, DOPEŁNIACZ) module-attribute

żądane(słowa, pozycja)

Klasy, których te słowa żądają w tej pozycji; zbiór pusty jest milczeniem.

Powody milczenia są trzy i rozdzielać ich nie ma po co, bo autorowi mówią jedno: nie ma tu czego przeczytać. Plik o tym słowie w tej pozycji nie mówi nic; albo mówi, że w którymś znaczeniu nie żąda ono niczego (DOWOLNA); albo żąda samych klas, których nie nazywa (NIENAZWANE).

Znacznik klasy nienazwanej zostaje w odpowiedzi obok klasy nazwanej i wychodzi stąd do wydruku, bo kolumna klas jest alternatywą: pozycja żądająca w jednym znaczeniu ludzi, a w drugim zbioru synsetów, ludzi nie żąda, więc przemilczana połowa tej alternatywy czytałaby się jak żądanie ostrzejsze, niż Walenty stawia.

Słów jest kilka tam, gdzie formę licencjonuje w jednym kształcie kilka odczytań, a odpowiedź jest wtedy sumą i żąda milczenia od każdego z nich: czytanie nie mówi, którym z tych słów forma stoi (olski.parse.Node.signature), więc żądanie jednego z nich byłoby żądaniem postawionym pod monetę.

Source code in olski/żądania.py
104
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
def żądane(słowa: Iterable[tuple[str, str]], pozycja: str) -> frozenset[str]:
    """Klasy, których te słowa żądają w tej pozycji; zbiór pusty jest milczeniem.

    Powody milczenia są trzy i rozdzielać ich nie ma po co,
    bo autorowi mówią jedno: nie ma tu czego przeczytać.
    Plik o tym słowie w tej pozycji nie mówi nic;
    albo mówi, że w którymś znaczeniu nie żąda ono niczego (:data:`DOWOLNA`);
    albo żąda samych klas, których nie nazywa (:data:`NIENAZWANE`).

    Znacznik klasy nienazwanej zostaje w odpowiedzi obok klasy nazwanej i wychodzi
    stąd do wydruku, bo kolumna klas jest alternatywą: pozycja żądająca w jednym
    znaczeniu ludzi, a w drugim zbioru synsetów, ludzi nie żąda, więc przemilczana
    połowa tej alternatywy czytałaby się jak żądanie ostrzejsze, niż Walenty stawia.

    Słów jest kilka tam, gdzie formę licencjonuje w jednym kształcie kilka
    odczytań, a odpowiedź jest wtedy sumą i żąda milczenia od każdego z nich:
    czytanie nie mówi, którym z tych słów forma stoi
    (:meth:`olski.parse.Node.signature`),
    więc żądanie jednego z nich byłoby żądaniem postawionym pod monetę.
    """
    zebrane: set[str] = set()
    for słowo in słowa:
        klasy = _wpisy().get(słowo, {}).get(pozycja, frozenset())
        if DOWOLNA in klasy or not klasy - NIENAZWANE:
            return frozenset()
        zebrane |= klasy
    return frozenset(zebrane)

żąda_osoby(klasy)

Czy tej alternatywy nie spełnia nic poza kimś (OSOBOWE).

Odpowiedź jest połową pytania także tutaj: mówi ona o żądaniu, a o słowie stojącym w pozycji orzeka deklaracja projektu (olski/osoby.py).

Klasa nienazwana znosi żądanie w całości, tak samo jak DOWOLNA w żądane, i tym ta odpowiedź jest węższa od wiersza, który klasy wypisuje: pozycja żądająca w jednym znaczeniu ludzi, a w drugim zbioru synsetów, bywa obsadzona rzeczą i o tej rzeczy plik nie mówi nic.

Source code in olski/żądania.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def żąda_osoby(klasy: Iterable[str]) -> bool:
    """Czy tej alternatywy nie spełnia nic poza kimś (:data:`OSOBOWE`).

    Odpowiedź jest połową pytania także tutaj: mówi ona o żądaniu, a o słowie
    stojącym w pozycji orzeka deklaracja projektu (``olski/osoby.py``).

    Klasa nienazwana znosi żądanie w całości, tak samo jak :data:`DOWOLNA`
    w :func:`żądane`, i tym ta odpowiedź jest węższa od wiersza, który klasy
    wypisuje: pozycja żądająca w jednym znaczeniu ludzi, a w drugim zbioru
    synsetów, bywa obsadzona rzeczą i o tej rzeczy plik nie mówi nic.
    """
    zbiór = frozenset(klasy)
    return bool(zbiór) and zbiór <= OSOBOWE