diff --git a/examples/qa-input0.xml b/examples/qa-input0.xml new file mode 100644 index 0000000000000000000000000000000000000000..88f7b40346778c39e1e93445f5777dbfbeee3696 --- /dev/null +++ b/examples/qa-input0.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE cesAna SYSTEM "xcesAnaIPI.dtd"> +<chunkList xmlns:xlink="http://www.w3.org/1999/xlink"> + <chunk id="ch1" type="p"> + <sentence> + <tok> + <orth>Gdzie</orth> + <lex disamb="1"><base>gdzie</base><ctag>adv</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>jest</orth> + <lex disamb="1"><base>być</base><ctag>fin:sg:ter:imperf</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>Bagdad</orth> + <lex disamb="1"><base>Bagdad</base><ctag>subst:sg:nom:m3</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">1</ann> + <ann chan="chunk_np">1</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <ns/> + <tok> + <orth>?</orth> + <lex disamb="1"><base>?</base><ctag>interp</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">0</ann> + </tok> + </sentence> + </chunk> +</chunkList> diff --git a/examples/qa-input1.xml b/examples/qa-input1.xml new file mode 100644 index 0000000000000000000000000000000000000000..5f64d40c72b64e446fd4b0d7e8a8566e1527ef0c --- /dev/null +++ b/examples/qa-input1.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE cesAna SYSTEM "xcesAnaIPI.dtd"> +<chunkList xmlns:xlink="http://www.w3.org/1999/xlink"> + <chunk id="ch1" type="p"> + <sentence> + <tok> + <orth>Ile</orth> + <lex disamb="1"><base>ile</base><ctag>num:pl:acc:m3:rec</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">1</ann> + <ann chan="chunk_np">1</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>kosztują</orth> + <lex disamb="1"><base>kosztować</base><ctag>fin:pl:ter:imperf</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>buty</orth> + <lex disamb="1"><base>but</base><ctag>subst:pl:acc:m3</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">2</ann> + <ann chan="chunk_np">2</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>do</orth> + <lex disamb="1"><base>do</base><ctag>prep:gen</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">3</ann> + <ann chan="chunk_np">2</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>biegania</orth> + <lex disamb="1"><base>biegać</base><ctag>ger:sg:gen:n:imperf:aff</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">3</ann> + <ann chan="chunk_np">2</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <ns/> + <tok> + <orth>?</orth> + <lex disamb="1"><base>?</base><ctag>interp</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">0</ann> + </tok> + </sentence> + </chunk> +</chunkList> diff --git a/examples/qa-input2.xml b/examples/qa-input2.xml new file mode 100644 index 0000000000000000000000000000000000000000..537b60e76cb0f5095159b54868e06e5cf571c96c --- /dev/null +++ b/examples/qa-input2.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE cesAna SYSTEM "xcesAnaIPI.dtd"> +<chunkList xmlns:xlink="http://www.w3.org/1999/xlink"> + <chunk id="ch1" type="p"> + <sentence> + <tok> + <orth>Po</orth> + <lex disamb="1"><base>po</base><ctag>prep:loc</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">1</ann> + <ann chan="chunk_np">1</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>ilu</orth> + <lex disamb="1"><base>ile</base><ctag>num:pl:loc:m3:congr</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">1</ann> + <ann chan="chunk_np">1</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>dniach</orth> + <lex disamb="1"><base>dzień</base><ctag>subst:pl:loc:m3</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">1</ann> + <ann chan="chunk_np">1</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>mogę</orth> + <lex disamb="1"><base>móc</base><ctag>fin:sg:pri:imperf</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>znowu</orth> + <lex disamb="1"><base>znowu</base><ctag>qub</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>zacząć</orth> + <lex disamb="1"><base>zacząć</base><ctag>inf:perf</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>śpiewać</orth> + <lex disamb="1"><base>śpiewać</base><ctag>inf:imperf</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <ns/> + <tok> + <orth>?</orth> + <lex disamb="1"><base>?</base><ctag>interp</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">0</ann> + </tok> + </sentence> + </chunk> +</chunkList> diff --git a/examples/qa-input3.xml b/examples/qa-input3.xml new file mode 100644 index 0000000000000000000000000000000000000000..46f65b63de72fa3a51473cf8f312e39af2d07a95 --- /dev/null +++ b/examples/qa-input3.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE cesAna SYSTEM "xcesAnaIPI.dtd"> +<chunkList xmlns:xlink="http://www.w3.org/1999/xlink"> + <chunk id="ch1" type="p"> + <sentence> + <tok> + <orth>Za</orth> + <lex disamb="1"><base>za</base><ctag>prep:acc</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">1</ann> + <ann chan="chunk_np">1</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>ile</orth> + <lex disamb="1"><base>ile</base><ctag>num:pl:acc:f:rec</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">1</ann> + <ann chan="chunk_np">1</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>godzin</orth> + <lex disamb="1"><base>godzina</base><ctag>subst:pl:gen:f</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">2</ann> + <ann chan="chunk_np">1</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>będzie</orth> + <lex disamb="1"><base>być</base><ctag>bedzie:sg:ter:imperf</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>można</orth> + <lex disamb="1"><base>można</base><ctag>pred</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>kupić</orth> + <lex disamb="1"><base>kupić</base><ctag>inf:perf</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">1</ann> + </tok> + <tok> + <orth>telewizor</orth> + <lex disamb="1"><base>telewizor</base><ctag>subst:sg:acc:m3</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">3</ann> + <ann chan="chunk_np">2</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>po</orth> + <lex disamb="1"><base>po</base><ctag>prep:loc</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">4</ann> + <ann chan="chunk_np">2</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>niższej</orth> + <lex disamb="1"><base>niski</base><ctag>adj:sg:loc:f:com</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">4</ann> + <ann chan="chunk_np">2</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <tok> + <orth>cenie</orth> + <lex disamb="1"><base>cena</base><ctag>subst:sg:loc:f</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">4</ann> + <ann chan="chunk_np">2</ann> + <ann chan="chunk_vp">0</ann> + </tok> + <ns/> + <tok> + <orth>?</orth> + <lex disamb="1"><base>?</base><ctag>interp</ctag></lex> + <ann chan="chunk_adjp">0</ann> + <ann chan="chunk_agp">0</ann> + <ann chan="chunk_np">0</ann> + <ann chan="chunk_vp">0</ann> + </tok> + </sentence> + </chunk> +</chunkList> diff --git a/examples/qa-prop-match.ccl b/examples/qa-prop-match.ccl new file mode 100644 index 0000000000000000000000000000000000000000..940e0f2a6b8ccb3c7d89d950f1938b3c1555b257 --- /dev/null +++ b/examples/qa-prop-match.ccl @@ -0,0 +1,47 @@ +match_rules( + apply( + match( + and( + inter(lower(base[0]), ["za", "po"]), + inter(lower(base[1]), ["ile"]) + ) + ), + actions( + setprop(M, "qtype2", "price"), + setprop(M, "qtype3", "time") + ) + ); + apply( + match( + inter(base[0], ["kupić", "płacić", "nabyć", "sprzedać", "kosztować"]) + ), + actions( + setprop(M, "qtype1", "price") + ) + ); + apply( + match( + inter(base[0], ["cena"]) + ), + actions( + setprop(M, "qtype2", "price") + ) + ); + apply( + match( + inter(base[0], ["gdzie"]) + ), + actions( + setprop(M, "qtype2", "where") + ) + ); + apply( + match( + inter(base[0], ["sekunda", "minuta", "godzina", "rok", "dzień"]) + ), + actions( + setprop(M, "qtype2", "time") + ) + ) + +) diff --git a/examples/wccl-qa_README b/examples/wccl-qa_README new file mode 100644 index 0000000000000000000000000000000000000000..7fcc8e946899d9650a837d510875f356c455ff01 --- /dev/null +++ b/examples/wccl-qa_README @@ -0,0 +1,100 @@ + + Przykład użycia skryptu wccl-qa.py + + + 0. Uwagi: + +*skrypt docelowo będzie wywoływany na tekście otagowanym i (może) ochunkowanym +*jeden plik interpretowany jest jako jedno pytanie, tzn. jedno uruchomienie skryptu zwraca jedną etykietę rodzaju pytania, który wynika z właściwości qtype1, qtype2, qtype3 +*jeżeli użyto opcji -r (--result) wtedy wynik działania skryptu jest dołączany (append) do wskazanego pliku (nowa etykieta na nowej linii) + + + 1. Przykład działania skryptu: + +Pytania (przetworzone przy pomocy narzędzi MACA, WCRFT, IOBBER - opis znajduje się poniżej): + +./qa-input0.xml: Gdzie jest Bagdad? +./qa-input1.xml: Za ile można kupić buty do biegania? +./qa-input2.xml: Po ilu dniach mogę znowu zacząć śpiewać? +./qa-input3.xml: Za ile godzin będzie można kupić telewizor po niższej cenie? + +./qa-prop-match.wccl - plik z regułami definiującymi właściwoci qtype1, qtype2, qtype3 + + + + 1.1 Uruchomienie skryptu: + + Uwagi: + +*qa-inputN.xml: N = {0,1,2,3}: +*opcjonalny plik: wccl_processed_output zawiera przetworzony plik wejściowy z dodanymi przez reguły WCCL elementami + + + Uruchomienie: + +A) z plikiem wejściowym (-I): + +$> cd ../doc +$> ./wccl-qa.py ../examples/qa-prop-match.ccl -I ../examples/qa-inputN.xml -t nkjp -O ~/wccl_processed_output + +B) ze strumieniem wejściowym: + +$> cd ../doc +$> cat ../examples/qa-inputN.xml | ./wccl-qa.py ../examples/qa-prop-match.ccl -t nkjp -O ~/wccl_processed_output + + + +Wyniki działania skryptu (tylko wartość podana po 'OUTPUT: ') otrzymane dla przykładowych pytań oraz rozkład wartości qtypeX będący podstawą do wygenerowania wyniku: + +* oznaczenie: {wartość właściwości qtypeX:liczba wystąpień na poziomie X:suma wystąpień na wszystkich poziomach}: +* położenie OUTPUT oznacza miejsce gdzie następuje podjęcie decyzji (nie są rozpatrywane niższe poziomy qtypeX) + + qa-input0.xml: Gdzie jest Bagdad? +qtype1 = {} +qtype2 = {where:1:1} OUTPUT: where +qtype3 = {} + + + qa-input1.xml: Za ile można kupić buty do biegania? +qtype1 = {price:1:1} OUTPUT: price +qtype2 = {} +qtype3 = {} + + + qa-input2.xml: Po ilu dniach mogę znowu zacząć śpiewać? +qtype1 = {} +qtype2 = {price:1:1, time:1:1} +qtype3 = {price:0:1, time:1:2} OUTPUT: time + + + qa-input3.xml: Za ile godzin będzie można kupić telewizor po niższej cenie? +qtype1 = {price:1:1} OUTPUT: price +qtype2 = {price:2:3, time:1:1} +qtype3 = {price:0:3, time:1:2} + + +================================================================== += Wygenerowanie plików wejściowych dla skryptu wccl-qa.py = +================================================================== + +* %WCRFT_ROOT_DIR% - główny katalog projektu WCRFT +* do otagowania przykładowych pytań użyto WCRFT z opcją -i text która korzysta z instalacji programu MACA - może wystąpić konieczność dostosowania w pliku %WCRFT_ROOT_DIR%/config/nkjp.ini konfiguracji MACA'y: + +macacfg = morfeusz-nkjp ; zależnie od zainstalowanej wersji Morfeusza + ; patrz Available configurations w: + ; maca-analyse --help + +* konfiguracji wymaga: + - ścieżka do modelu WCRFT (można go pobrać z: http://156.17.129.129/share/) + - ścieżka do modelu IOBBERa (obecnie dostępny w projekcie IOBBER w katalogu %IOBBER_ROOT_DIR%/iobber/data/model-kpwr03/) + + + Użycie: + +$> cd %WCRFT_ROOT_DIR% +$> echo "Za ile godzin będzie można kupić telewizor po niższej cenie?" | wcrft/wcrft.py -d /path/to/wcrft/model/model_nkjp10_wcrft -i text config/nkjp.ini - -o ccl | iobber kpwr.ini -d /path/to/iobber/model/model-kpwr03/ - > qa-input3.xml + +Zamiast przekierowania wyjścia do pliku qa-input3.xml można od razu zastosować skrypt wccl-qa.py: + +$> cd %WCRFT_ROOT_DIR% +$> echo "Za ile godzin będzie można kupić telewizor po niższej cenie?" | wcrft/wcrft.py -d /path/to/wcrft/model/model_nkjp10_wcrft -i text config/nkjp.ini - -o ccl | iobber kpwr.ini -d /path/to/iobber/model/model-kpwr03/ - | %WCCL_ROOT_DIR%/doc/wccl-qa.py %WCCL_ROOT_DIR%/examples/qa-prop-match.ccl -t nkjp