Błąd #1266
Wyjątkowo słabe uzgodnienie w unify
Status: | Zamknięty | Start date: | 15 Feb 2011 | |
---|---|---|---|---|
Priority: | Normalny | Due date: | ||
Assignee: | Adam Radziszewski | % Done: | 0% | |
Category: | - | |||
Target version: | - |
Description
Po rozpatrzeniu błędu 1264 zobaczyłem, że wywala się inny test z testu unify o "kobiecie nie bitej". Ale wg mnie unify działa zgodnie ze specyfikacją czyli "wyjątkowo słabym uzgodnieniem" tzn. nie spełnianym nawet przez końce zakresu. Ale to pewnie wynika z niezrozumienia specyfikacji, które z kolei może wynikać z nieścisłości w specyfikacji =)
Muszę jeszcze raz poczytać spec, a tymczasem przekazuję to pod rozważenie Tobie, Adamie R.
Zasadnicze pytanie wynikające z przykładu poniżej, to czy to "wyjątkowo słabe" uzgodnienie nadal musi mieć przynajmniej jedną pasującą kategorię na obu końcach
// eee chyba to można by zapisać jako
// category_count(początkowy_token | końcowy_token | attribs) >= 1
Wracając do "kobiety nie bitej" (przykładu testowego) trzy tokeny "to jak kosa" i reguła
rules( rule("unify3-case", not( equal(cas[0], {}), equal(cas[2], {}) ), unify(0, 2, {nmb, gnd, cas}) ) )
<tok> <orth>to</orth> <lex><base>ten</base><ctag>adj:sg:nom:n:pos</ctag></lex> <lex><base>ten</base><ctag>adj:sg:acc:n:pos</ctag></lex> <lex><base>ten</base><ctag>adj:sg:voc:n:pos</ctag></lex> <lex><base>to</base><ctag>conj</ctag></lex> </tok> <tok> <orth>jak</orth> <lex><base>jak</base><ctag>conj</ctag></lex> <lex><base>jak</base><ctag>subst:sg:nom:m1</ctag></lex> <lex><base>jak</base><ctag>subst:sg:nom:m2</ctag></lex> <lex><base>jak</base><ctag>subst:sg:nom:m3</ctag></lex> <lex><base>jaka</base><ctag>subst:pl:gen:f</ctag></lex> </tok> <tok> <orth>kosa</orth> <lex><base>kosa</base><ctag>subst:sg:nom:f</ctag></lex> <lex><base>kosy</base><ctag>adj:sg:nom:f:pos</ctag></lex> <lex><base>kosy</base><ctag>adj:sg:voc:f:pos</ctag></lex> </tok>
Z pliku out wynika, że oczekuje się że te tokeny zostaną, jak są, tymczasem obecny algorytm pozostawia
<tok> <orth>to</orth> <lex><base>to</base><ctag>conj</ctag></lex> </tok> <tok> <orth>jak</orth> <lex><base>jak</base><ctag>conj</ctag></lex> </tok> <tok> <orth>kosa</orth> <lex><base>kosa</base><ctag>subst:sg:nom:f</ctag></lex> <lex><base>kosy</base><ctag>adj:sg:nom:f:pos</ctag></lex> <lex><base>kosy</base><ctag>adj:sg:voc:f:pos</ctag></lex> </tok>
I w zasadzie tak jak na to patrzę, to jest to zgodnie z moim zrozumieniem specyfikacji. Token "to" posiada cas, zarówno jak "kosa", zatem warunek wstępny jest spełniony. Teraz pytanie o słabe uzgodnienie na wszystkich trzech tokenach. Kwestia sporna jest, czy istnieje uzgodnienie, czy nie - wg mnie, wg tego co było powiedziane, uzgodnienie istnieje, bo token "to" oraz "jak" ma zupełnie niedospecyfikowane lexemy "conj", zatem oba zgadzają się z dowolnymi leksemami tokenu "kosa". Bo miało być, że uzgodnienie słabe może zachodzić także na końcu zakresu, a jak rozumiem uzgodnienie słabe istnieje przez niedospecyfikowany leksem.
Ale pewnie tak jak pisałem na początku chodzi o to, żeby mimo wszystko końce zakresu wchodziły w uzgodnienie używając co najmniej jednej kategorii z zadanych, a nie zupełnie niedospecyfikowanego lexemu.
Related issues
History
#1 Updated by Adam Radziszewski almost 13 years ago
- Status changed from Nowy to Rozwiązany
Nie, to wynikało z mojego niezrozumienia specyfikacji :) Masz rację, to zachowanie jest prawidłowe. Nie pomyślałem, że unifikacja może w szczególności prowadzić do pozostawienia tylko jednego tokenu z określonymi wartościami atrybutów. Wychodzi teraz na to, że może prowadzić nawet do wywalenia wszystkich takich leksemów i jest to prawidłowe.
A pisząc tę regułę nie pomyślałem, że not(equal(cas[0], {}), equal(cas[2], {}))
odpali się też tam, gdzie będą i leksemy z podanym przypadkiem, i te bez (token to).
Fix: poprawiłem test.
#2 Updated by Adam Radziszewski over 12 years ago
- Status changed from Rozwiązany to Zamknięty