Input/output formats¶
Biblioteka corpus2 udostępnia wiele tzw. czytników i piśników różnych formatów korpusu. Narzędzia wykorzystujące corpus2 zazwyczaj pozwalają na wybranie dowolnego formatu za pomocą przełączników -i oraz -o dla odpowiednio formatu wejścia i wyjścia.
Ogólna składnia to FORMAT(,OPCJA)*
, np. xces,ign,sh
. Opcje sa zazwyczaj specyficzne dla konkretnego formatu. Opcje mogą sterować dialektem, formatowaniem itp.
Formaty wejściowe¶
Dostępne formaty: ccl iob-chan rft xces xces-fast
Wspólne opcje czytników¶
,ign
— Niemożliwe do sparsowania tagi będą zamieniane na tagign
(lub jego odpowiednik w tagsecie).,loose
— „swobodne” parsowanie tagów: dopuszcza atrybuty spoza dopuszczalnych dla danej klasy, typu np.ign:pl
w KIPI oraz dopuszcza brak wymaganych atrybutów, na wyjściu mogą się więc pojawiać „niepełne” tagi typusubst:::
.,strict
— „ścisłe” parsowanie tagów: obecnie sprawdza tylko dodatkowo czy tagi są „jednostkowe”, tj. czy nie ma zapisu w rodzajuinf:perf.imperf
. todo: trochę to dziwne,ann
— wczytuje zdania jako zdania anotowane (AnnotatedSentence) nawet jeśli dany format nie zawiera informacji o anotacjach
XCES — znany i lubiany¶
xces
odpowiada formatowi CORPUS z TaKIPI, ale jest czytany przez poprawniejszy (acz potencjalnie wolny) parser XML (SAX, libxml2++). Ten czytnik może się obrazić gdy dostanie niepoprawny XML, ale za to doprze obsłuży poprawne konstrukcje trudne do załatwienia regeksami.
,disamb_only
— wczytuje tylko leksemy oznaczone disambem.,sh
— dialekt Pantery: leksemy oznaczonedisamb_sh=0
są traktowane jak zwykłe, a nieoznaczone — jak gdyby miałydisamb=1
.,no_warn_unexpected_xml
— wyłącza ostrzeżenia o nadmiarowych tagach XML-owych (struktura poza nimi musi być poprawna),no_warn_inconsistent
— wyłącza kilka mechanizmów ostrzegających o niespójności XMLa
Szybki XCES¶
xces-fast
jest zapożyczonym z Pantery (która bazuje na boostowych przykładach) parserem XML opartym o sendmaila i emacsa wyrażenia regularne Boosta. Jest szybszy od xces
, ale wybredny, może się psuć gdy np. wcięcia będą „nie takie”. Nie ma opcji.
CCL¶
Format ccl
opiera się o XCES, zakłada podział na chunki i zdania (tagi chunk
i sentence
), dodatkowo zawiera informacje o anotacjach w kanałach.
,disamb_only
— wczytuje tylko leksemy oznaczone disambem.,no_warn_inconsistent
— wyłącza kilka mechanizmów ostrzegających o niespójności XMLa
RFT¶
rft
to prosty format tabelaryczny, orth\ttag
. Zdania oddzielane są pustymi liniami. Nie zawiera informacji o lematach i jest wczytywany jeden tag jako leksem z lematem NO-BASE
, a wartości w nim oddzielane są kropkami a nie dwukropkami (zgodność z RFTaggerem).
,set_disamb
— zakłada że wczytywane leksemy są disambowe (format nie zawiera informacji o tym) todo: niespójne,mbt
— dialekt MBT: zdania oddzielane sekwencją <utt>, a nie pustą linią
IOB-CHAN~~~~~¶
Nowy format iob-chan
zapisuje anotacje w postaci IOB w formacie tabelarycznym: orth\tlemma\ttag\tannotations
, anotacje w formacie kanał-IOB
, np. NP-I
oddzielane przecinkami.
,no_set_disamb
— zakłada że wczytywane leksemy nie są disambowe (format nie zawiera informacji o tym), domyślnie zakłada się, że są. todo: niespójne
Formaty wyjściowe¶
Dostępne formaty: ccl iob-chan none orth plain premorph rft stat xces
Ponownie znany i lubiany XCES
¶
XCES zapisuje chunki i zdania, brak spacji przed tokenem oznacza tagiem <ns/>. Zapisuje tez atrybuty chunków.
,flat
— wyłącza generowanie wcięć w wynikowym XMLu,chunk
— ???,nochunk
— ???,nodisamb
— wypisuje leksemy bez znacznikówdisamb
,sorttags
— sortuje leksemy (deterministycznie),split
— Dzieli wyjście na chunki tam, gdzie zdanie zaczyna się tokenem przd którym były 2 lub więcej nowych linii (ws = ManyNewlines),ws
— wypisuje pełne informacje o białych znakach przed tokenem w postaci atrybutuws="none"
(przykładowo) na elementach <tok>.
CCL¶
Takie same opcje, jak XCES.
IOB-CHAN¶
Format tabelaryczny z anotacjami. Zapisuje jeden tzw. najlepszy leksem z tokenu.
,nowarn
— wyłącza ostrzeganie o np. braku leksemów w tokenie,noforce
— nie wymusza konwersji wewnętrznej zapisu anotacji w postaci indeksów segmentów na IOB przed zapisem (to nie jest ładne)
Format RFTaggera i podobne¶
Format zgodny z RFTaggerem, plus dialekty. Domyślnie rozdziela kategorie kropkami, a brak atrybutu opcjonalnego zaznacza wstawiają nazwę kategorii. DomuyZapisuje jeden tzw. najlepszy leksem z tokenu.
,mbt
— rozdziela zdania <utt> a nie pustą linią,nowarn
— wyłącza ostrzeganie o np. braku leksemów w tokenie,colon
— zapisuje tagi w zwykły sposób, czyliinf:perf
a nieinf.perf
,alltags
— zapisuje wszystkie tagi (oddzielone tabami),opt
— zapisuje brakujące atrybuty opcjonalne w zwykły sposób (pomijając je), a nie jako nazwę kategorii,latin2
— konwertuje wyjście do iso8859-2 todo: brzydkie
Brak wyjścia¶
none
powoduje, że nie jest wypisywane nic. Szybsze i czasami prostsze od przekierowywania wyjścia na /dev/null
. Nie ma opcji.
Same orthy¶
Formatorth
zapisuje same formy napotkane, bez informacji o leksemach etc. Domyślnie zapisuje jeden orth w linii i oddziela zdania pustą linią.
,actual_ws
— rozdziela tokeny w przybliżeniu takimi białymi znakami, jakie były w tekście (powinno dać w rezultacie tekst prawie identyczny z wejściowym czystym tekstem przed Macaniem),end_nl
— Dopsuje nową linię na końcu wszystkiego
Premorph¶
Zapispremorph
jest podobny do orth,actual_ws
, z tym, że tworzy premorpha.
,chunk
— wymusza <chunk> naokoło wszystkiego todo: po co, czy działa spójnie
Prosty format tekstowy¶
plain
to prosty format tabelaryczno-liniowy do testów. Wypisuje orth i informację o białych znakach, a w kolejnych liniach leksemy tokenu wcięte tabem w postaci \tlemma\ttag\tdisamb
(tagi niedisambowe nie mają oznaczenia disamb). Koniec zdania oznaczany jest pustą linią, koniec chunka kolejną. Brak informacji o metadanych chunka.
,nows
— nie zaznacza informacji o białych znakach po orcie tokenu,no_disamb_info
— nie zanzacza disambów,disamb_only
— wypisuje tylko leksemy z disambem,ds
— alias na,no_disamb_info,disamb_only
— wypisuje tylko leksemy z disambem, ale nie oznacza ich znacznikiem
Podgląd anotacji¶
stat
pokazuje tylko pierwsze litery tokenów oraz anotacje w zdaniach w kompaktowej formie. Nie ma opcji.
Przykłady danych w różnych formatach¶
CCL bez anotacji¶
<?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>Ala</orth> <lex><base>al</base><ctag>subst:sg:gen:m1</ctag></lex> <lex><base>al</base><ctag>subst:sg:acc:m1</ctag></lex> <lex><base>ala</base><ctag>subst:sg:nom:f</ctag></lex> </tok> <tok> <orth>ma</orth> <lex><base>mieć</base><ctag>fin:sg:ter:imperf</ctag></lex> <lex><base>mój</base><ctag>adj:sg:nom:f:pos</ctag></lex> </tok> <tok> <orth>kota</orth> <lex><base>kot</base><ctag>subst:sg:gen:m2</ctag></lex> <lex><base>kot</base><ctag>subst:sg:acc:m2</ctag></lex> <lex><base>kota</base><ctag>subst:sg:nom:f</ctag></lex> </tok> <ns/> <tok> <orth>.</orth> <lex><base>.</base><ctag>interp</ctag></lex> </tok> </sentence> </chunk> </chunkList>
CCL¶
<?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>Ala</orth> <lex><base>al</base><ctag>subst:sg:gen:m1</ctag></lex> <lex><base>al</base><ctag>subst:sg:acc:m1</ctag></lex> <lex><base>ala</base><ctag>subst:sg:nom:f</ctag></lex> <ann chan="NP">1</ann> <ann chan="ZX">1</ann> <ann chan="ZZZ">0</ann> </tok> <tok> <orth>ma</orth> <lex><base>mieć</base><ctag>fin:sg:ter:imperf</ctag></lex> <lex><base>mój</base><ctag>adj:sg:nom:f:pos</ctag></lex> <ann chan="NP">0</ann> <ann chan="ZX">1</ann> <ann chan="ZZZ">0</ann> </tok> <tok> <orth>kota</orth> <lex><base>kot</base><ctag>subst:sg:gen:m2</ctag></lex> <lex><base>kot</base><ctag>subst:sg:acc:m2</ctag></lex> <lex><base>kota</base><ctag>subst:sg:nom:f</ctag></lex> <ann chan="NP">2</ann> <ann chan="ZX">0</ann> <ann chan="ZZZ">0</ann> </tok> <ns/> <tok> <orth>.</orth> <lex><base>.</base><ctag>interp</ctag></lex> <ann chan="NP">0</ann> <ann chan="ZX">0</ann> <ann chan="ZZZ">1</ann> </tok> </sentence> </chunk> </chunkList>
XCES¶
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cesAna SYSTEM "xcesAnaIPI.dtd"> <cesAna xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" type="lex disamb"> <chunkList> <chunk type="s"> <tok> <orth>Ala</orth> <lex><base>al</base><ctag>subst:sg:gen:m1</ctag></lex> <lex><base>al</base><ctag>subst:sg:acc:m1</ctag></lex> <lex><base>ala</base><ctag>subst:sg:nom:f</ctag></lex> </tok> <tok> <orth>ma</orth> <lex><base>mieć</base><ctag>fin:sg:ter:imperf</ctag></lex> <lex><base>mój</base><ctag>adj:sg:nom:f:pos</ctag></lex> </tok> <tok> <orth>kota</orth> <lex><base>kot</base><ctag>subst:sg:gen:m2</ctag></lex> <lex><base>kot</base><ctag>subst:sg:acc:m2</ctag></lex> <lex><base>kota</base><ctag>subst:sg:nom:f</ctag></lex> </tok> <ns/> <tok> <orth>.</orth> <lex><base>.</base><ctag>interp</ctag></lex> </tok> </chunk> </chunkList> </cesAna>
RFT¶
Ala subst.sg.nom.f ma adj.sg.nom.f.pos kota subst.sg.nom.f . interp
(pusta linia na końcu)
IOB-CHAN bez anotacji¶
Ala ala subst:sg:nom:f ma mój adj:sg:nom:f:pos kota kota subst:sg:nom:f . . interp
(pusta linia na końcu, znaki tabulacji na końcach lini 1-4)
IOB-CHAN¶
Ala ala subst:sg:nom:f NP-B,ZX-B,ZZZ-O ma mój adj:sg:nom:f:pos NP-O,ZX-I,ZZZ-O kota kota subst:sg:nom:f NP-B,ZX-O,ZZZ-O . . interp NP-O,ZX-O,ZZZ-B
Plain¶
Ala al subst:sg:gen:m1 al subst:sg:acc:m1 ala subst:sg:nom:f disamb ma mieć fin:sg:ter:imperf disamb mój adj:sg:nom:f:pos kota kot subst:sg:gen:m2 kot subst:sg:acc:m2 disamb kota subst:sg:nom:f . . interp disamb