Version 1 (modified by 9 years ago) (diff) | ,
---|
Popis vertikálů
Korpusová data jsou uložena v textové podobě jako tzv. vertikální texty (zkráceně "vertikály") (*.vert) a metainformace (*.meta). Tento dokument popisuje strukturu těch prvých - vertikálů. Vertikály obsahují vlastní texty korpusů (pozice) a také strukturní značky. Vertikál je XML dokument definovaný pomocí DTD.
Obecné informace
Základní formát vertikálního textu:
- textový soubor s koncovkou ‘.vert'
- na každém řádku jedna pozice (slovo, číslo, oddělovač) nebo strukturní značka (viz níže)
- u pozic jsou tabulátorem odděleny jednotlivé atributy (word, lemma, tag, příp. další). Při převodu nových textů je uveden pouze atribut word - vlastní slovo.
Jeden soubor s vertikálním textem by měl mít velikost zhruba několik desítek kB.
Kódování znaků je v iso-latin2. Znaky, které v iso-latin2 nejsou, jsou vkládány pomocí ‘&<jméno znaku>'. (Zatím není jasné, o které jde.)
Příklad vertikálu
<?xml version="1.0"?> <!DOCTYPE vertical SYSTEM "http://www.fi.muni.cz/nlp/vertical.dtd"> <vertical> <doc id="mf/1999/05/17/121"> <head> Co stojí za tažením hokejového týmu </head> <p> <lang id="en"> Hello world <g/> ! </lang> Další zlato </p> <sign> MARTIN HAŠEK </sign> </doc> </vertical>
Rozdělení textu do pozic
Oddělovače (tečky, čárky, závorky, ...) jsou na samostatné pozici, pouze v případě, že se těsně za sebou (bez mezer) vyskytuje stejný znak, tvoří celá skupina stejných znaků jednu pozici. Aby bylo zachována informace, zda byl daný oddělovač v textu těsně vedle sousedního slova, nebo tam byla mezera, jsou na místa, kde mezera nebyla, vloženy strukturní značky <g/> (glue). Například text
(slovo, které ...
se převede na:
( <g/> slovo <g/> , které ...
Zatím se tímto způsobem řeší všechny oddělovače, tedy i tečky u zkratek, časových a kalendářních údajů. Později se pravděpodobně některé oddělovače automaticky spojí s předcházejícími pozicemi.
Vše řeší buď externí program, nebo, při práci v Perlu / Pythonu, volání funkce split
z modulu Corpus
(dostupné přes module add corpus
).
Způsob použití - Perl:
use Corpus; $line = Corpus::split($line);
Způsob použití - Python:
import Corpus line = Corpus.split(line)
Externí program v Perlu, který volá funkci Corpus::split
, se jmenuje corpus_split
. Pracuje s STDIN a STDOUT a každý řádek, na kterém není "tag" (tj. neodpovídá regulárnímu výrazu '<.*>'), rozdělí.
Použití:
$ module add corpus $ corpus_split < bez_glue > s_glue
Popis strukturních značek
Všechny uvedené značky kromě <pre> a <g> jsou párové. Značky <doc> a <lang> mají atribut id.
<vertical> hranice vertikálu <doc> hranice dokumentu atribut id - jednoznačná identifikace v rámci vertikálu <head> nadpis <caption> průběžný titulek, popisky (nepatří do textu); například popisek pod obrázkem v novinách <p> odstavec <poem> báseň <lg> "line group" - skupina řádků v básni <l> "line" - řádek básně <list> seznam <item> odrážka v seznamu <note> poznámky (pod čarou) <q> uvození (uvozovky, apostrofy), zvýraznění (font) <sign> podpis, jméno autora <lang> jazyk jiný než čeština atribut id - identifikaci jazyka dle ISO 639:1988 <pre> zastupuje vypuštěné větší objekty (obrázek, tabulka, graf, zdrojový kód) prázdná, nepárová značka, jen ve formě <pre/> <code> krátké části kódu, počítačové adresy, ... <table> tabulka - strukturované textové údaje, které netvoří věty <row> řádek tabulky <cell> buňka tabulky <g> glue - "lepidlo", viz rozdělení textu do pozic prázdná, nepárová značka, jen ve formě <g/>
"Document Type Definition" - DTD vertikálu
Jak číst toto DTD?
- ENTITY popisuje textové nahrazení v rámci tohoto DTD - obsahuje název zkratky a v uvozovkách to, čím se má nahradit
- %POZICE; bude vždy nahrazeno textem 'z,(g,z)*'
- ELEMENT popisuje značku - obsahuje název značky a její obsah
- vertical je značka obsahující jeden nebo více prvků doc
- g je značka obsahující EMPTY, tedy nic
- ATTLIST popisuje atributy nějaké značky
- značka doc má povinný atribut id
- Význam symbolů +,*,| je postupně: 1 a více opakování, 0 a více opakování, výběr
<!-- Definice DTD pro korpusova data - vertikaly --> <!-- odpovida jednomu nerozdelenemu slovu --> <!ENTITY % POZICE 'z,(g,z)*' > <!ENTITY % TEXT '(%POZICE;)+ | q' > <!ENTITY % BLOK '(%TEXT;)+|list|lang|note|code'> <!ELEMENT vertical ((doc)+)> <!ELEMENT doc (p|head|caption|table|sign|list|pre|poem)+> <!ATTLIST doc id CDATA #REQUIRED> <!ELEMENT p (%BLOK;)+> <!ELEMENT head (%BLOK;)+> <!ELEMENT caption (%BLOK;)+> <!ELEMENT sign (%BLOK;)+> <!ELEMENT poem (lg|l)+> <!ELEMENT lg (l)+> <!ELEMENT l (%TEXT;)+> <!ELEMENT table ((%TEXT;)+|(row)+)> <!ELEMENT row (cell)+> <!ELEMENT cell (%TEXT;)+> <!ELEMENT list (item)+> <!ELEMENT item (%BLOK;)+> <!ELEMENT pre EMPTY> <!ELEMENT g EMPTY> <!-- z je virtualni tag, reprezentuje jednu pozici --> <!ELEMENT z EMPTY> <!ELEMENT q (%POZICE;)+> <!ELEMENT lang (%TEXT;)+> <!ATTLIST lang id (aa|ab|af|am|ar|as|ay|az|ba|be|bg|bh|bi|bn|bo|br |ca|co|cs|cy|da|de|dz|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|fy |ga|gd|gl|gn|gu|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw |ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|lo|lt|lv |mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|no |oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw |sa|sd|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw |ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz |vi|vo|wo|xh|yo|zh|zu) #REQUIRED> <!ELEMENT note (%TEXT;)+> <!ELEMENT code (%TEXT;)+>
Orientační schéma zanoření značek
Předchozí DTD se dá orientačně zapsat asi takto:
<vertical> <doc> <head>|<caption>|<p>|<sign> [BLOK] <list> <item> [BLOK] <pre> <table> [TEXT] <row> <cell> [TEXT] <poem> <lg> <l> [TEXT] <l> [TEXT] přičemž [BLOK] znamená: <list> <item> [BLOK] <lang>|<note> [TEXT] [TEXT] přičemž [TEXT] znamená: <q> [POZICE] [POZICE] přičemž [POZICE] znamená: <z/> (zde bude ve skutečnosti konkrétní pozice) <g/>
Rozdíly mezi vertikálem a jeho DTD definicí
jsou dva
- kódování - DTD předpokládá UTF-8, vertikál používá ISO-8859-2 (Latin-2)
- značka <z/> - tam, kde ji očekává DTD, má vertikál pozici
Tyto rozdíly se musí smazat před tím, než provedeme kontrolu (včetně validace) vertikálu pomocí xml-parseru. Proto se každá pozice převede na značku <z/>. Tím navíc vyřeším problém s kódováním UTF-8 (to nepodporuje české znaky) u pozic. V druhém kroku odstraním možnou češtinu v atributu id značky <doc> tím, že nastavím <doc id="X">. To vše není třeba provádět explicitně, je to zahrnuto jako preprocessing v kontrolním programu xml_check
. Jen je třeba si být vědom, že výstupní zprávy od xml-parseru se vztahují k takto předzpracovanému dokumentu.
Závěrečné info
Další atributy dokumentu (autor, typ textu, ...) jsou uloženy v samostatném souboru se jménem stejným jako soubor vertikálního textu až na koncovku ‘.meta'. Například vertikální text bude v souborech nevpes95.vert, nevpes96.vert, nevpes97.vert a metainformace v souborech nevpes95.meta, nevpes96.meta, nevpes97.meta. Popis metainformací o dokumentech je popsán [[PopisMetainformaci| zde] .