| 1 | = Popis vertikálů = #Popis_vertik.2BAOE-l.2BAW8- |
| 2 | [[BR]] 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. |
| 3 | |
| 4 | == Obecné informace == #Obecn.2BAOk_informace |
| 5 | Základní formát vertikálního textu: |
| 6 | |
| 7 | * textový soubor s koncovkou ‘.vert' |
| 8 | |
| 9 | * na každém řádku jedna pozice (slovo, číslo, oddělovač) nebo strukturní značka (viz níže) |
| 10 | * 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. |
| 11 | |
| 12 | Jeden soubor s vertikálním textem by měl mít velikost zhruba několik desítek kB. |
| 13 | |
| 14 | 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.) |
| 15 | |
| 16 | == Příklad vertikálu == #P.2BAVkA7Q-klad_vertik.2BAOE-lu |
| 17 | {{{ |
| 18 | <?xml version="1.0"?> |
| 19 | <!DOCTYPE vertical SYSTEM "http://www.fi.muni.cz/nlp/vertical.dtd"> |
| 20 | <vertical> |
| 21 | <doc id="mf/1999/05/17/121"> |
| 22 | <head> |
| 23 | Co |
| 24 | stojí |
| 25 | za |
| 26 | tažením |
| 27 | hokejového |
| 28 | týmu |
| 29 | </head> |
| 30 | <p> |
| 31 | <lang id="en"> |
| 32 | Hello |
| 33 | world |
| 34 | <g/> |
| 35 | ! |
| 36 | </lang> |
| 37 | Další |
| 38 | zlato |
| 39 | </p> |
| 40 | <sign> |
| 41 | MARTIN |
| 42 | HAŠEK |
| 43 | </sign> |
| 44 | </doc> |
| 45 | </vertical> |
| 46 | }}} |
| 47 | == Rozdělení textu do pozic == #Rozd.2BARs-len.2BAO0_textu_do_pozic |
| 48 | 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 |
| 49 | |
| 50 | {{{ |
| 51 | (slovo, které ... |
| 52 | }}} |
| 53 | se převede na: |
| 54 | |
| 55 | {{{ |
| 56 | ( |
| 57 | <g/> |
| 58 | slovo |
| 59 | <g/> |
| 60 | , |
| 61 | které |
| 62 | ... |
| 63 | }}} |
| 64 | 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. |
| 65 | |
| 66 | 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`). |
| 67 | |
| 68 | Způsob použití - Perl: |
| 69 | |
| 70 | {{{ |
| 71 | use Corpus; |
| 72 | $line = Corpus::split($line); |
| 73 | }}} |
| 74 | Způsob použití - Python: |
| 75 | |
| 76 | {{{ |
| 77 | import Corpus |
| 78 | line = Corpus.split(line) |
| 79 | }}} |
| 80 | 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í. |
| 81 | |
| 82 | Použití: |
| 83 | |
| 84 | {{{ |
| 85 | $ module add corpus |
| 86 | $ corpus_split < bez_glue > s_glue |
| 87 | }}} |
| 88 | == Popis strukturních značek == #Popis_strukturn.2BAO0-ch_zna.2BAQ0-ek |
| 89 | Všechny uvedené značky kromě <pre> a <g> jsou párové. Značky <doc> a <lang> mají atribut id. |
| 90 | |
| 91 | {{{ |
| 92 | <vertical> hranice vertikálu |
| 93 | <doc> hranice dokumentu |
| 94 | atribut id - jednoznačná identifikace v rámci vertikálu |
| 95 | <head> nadpis |
| 96 | <caption> průběžný titulek, popisky (nepatří do textu); |
| 97 | například popisek pod obrázkem v novinách |
| 98 | <p> odstavec |
| 99 | <poem> báseň |
| 100 | <lg> "line group" - skupina řádků v básni |
| 101 | <l> "line" - řádek básně |
| 102 | <list> seznam |
| 103 | <item> odrážka v seznamu |
| 104 | <note> poznámky (pod čarou) |
| 105 | <q> uvození (uvozovky, apostrofy), zvýraznění (font) |
| 106 | <sign> podpis, jméno autora |
| 107 | <lang> jazyk jiný než čeština |
| 108 | atribut id - identifikaci jazyka dle ISO 639:1988 |
| 109 | <pre> zastupuje vypuštěné větší objekty |
| 110 | (obrázek, tabulka, graf, zdrojový kód) |
| 111 | prázdná, nepárová značka, jen ve formě <pre/> |
| 112 | <code> krátké části kódu, počítačové adresy, ... |
| 113 | <table> tabulka - strukturované textové údaje, které netvoří věty |
| 114 | <row> řádek tabulky |
| 115 | <cell> buňka tabulky |
| 116 | <g> glue - "lepidlo", viz rozdělení textu do pozic |
| 117 | prázdná, nepárová značka, jen ve formě <g/> |
| 118 | }}} |
| 119 | == "Document Type Definition" - DTD vertikálu == #A.22Document_Type_Definition.22_-_DTD_vertik.2BAOE-lu |
| 120 | Jak číst toto DTD? |
| 121 | |
| 122 | * ENTITY popisuje textové nahrazení v rámci tohoto DTD - obsahuje název zkratky a v uvozovkách to, čím se má nahradit |
| 123 | * %POZICE; bude vždy nahrazeno textem 'z,(g,z)*' |
| 124 | * ELEMENT popisuje značku - obsahuje název značky a její obsah |
| 125 | * vertical je značka obsahující jeden nebo více prvků doc |
| 126 | * g je značka obsahující EMPTY, tedy nic |
| 127 | * ATTLIST popisuje atributy nějaké značky |
| 128 | * značka doc má povinný atribut id |
| 129 | * Význam symbolů +,*,| je postupně: 1 a více opakování, 0 a více opakování, výběr |
| 130 | |
| 131 | {{{ |
| 132 | <!-- Definice DTD pro korpusova data - vertikaly --> |
| 133 | <!-- odpovida jednomu nerozdelenemu slovu --> |
| 134 | <!ENTITY % POZICE 'z,(g,z)*' > |
| 135 | |
| 136 | |
| 137 | <!ENTITY % TEXT '(%POZICE;)+ | q' > |
| 138 | <!ENTITY % BLOK '(%TEXT;)+|list|lang|note|code'> |
| 139 | |
| 140 | <!ELEMENT vertical ((doc)+)> |
| 141 | <!ELEMENT doc (p|head|caption|table|sign|list|pre|poem)+> |
| 142 | <!ATTLIST doc id CDATA #REQUIRED> |
| 143 | |
| 144 | <!ELEMENT p (%BLOK;)+> |
| 145 | <!ELEMENT head (%BLOK;)+> |
| 146 | <!ELEMENT caption (%BLOK;)+> |
| 147 | <!ELEMENT sign (%BLOK;)+> |
| 148 | <!ELEMENT poem (lg|l)+> |
| 149 | |
| 150 | <!ELEMENT lg (l)+> |
| 151 | <!ELEMENT l (%TEXT;)+> |
| 152 | |
| 153 | <!ELEMENT table ((%TEXT;)+|(row)+)> |
| 154 | <!ELEMENT row (cell)+> |
| 155 | <!ELEMENT cell (%TEXT;)+> |
| 156 | |
| 157 | <!ELEMENT list (item)+> |
| 158 | <!ELEMENT item (%BLOK;)+> |
| 159 | |
| 160 | <!ELEMENT pre EMPTY> |
| 161 | <!ELEMENT g EMPTY> |
| 162 | |
| 163 | <!-- z je virtualni tag, reprezentuje jednu pozici --> |
| 164 | <!ELEMENT z EMPTY> |
| 165 | |
| 166 | <!ELEMENT q (%POZICE;)+> |
| 167 | |
| 168 | <!ELEMENT lang (%TEXT;)+> |
| 169 | <!ATTLIST lang id |
| 170 | (aa|ab|af|am|ar|as|ay|az|ba|be|bg|bh|bi|bn|bo|br |
| 171 | |ca|co|cs|cy|da|de|dz|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|fy |
| 172 | |ga|gd|gl|gn|gu|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw |
| 173 | |ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|lo|lt|lv |
| 174 | |mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|no |
| 175 | |oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw |
| 176 | |sa|sd|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw |
| 177 | |ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz |
| 178 | |vi|vo|wo|xh|yo|zh|zu) #REQUIRED> |
| 179 | |
| 180 | <!ELEMENT note (%TEXT;)+> |
| 181 | <!ELEMENT code (%TEXT;)+> |
| 182 | }}} |
| 183 | == Orientační schéma zanoření značek == #Orienta.2BAQ0-n.2BAO0_sch.2BAOk-ma_zano.2BAVk-en.2BAO0_zna.2BAQ0-ek |
| 184 | Předchozí DTD se dá orientačně zapsat asi takto: |
| 185 | |
| 186 | {{{ |
| 187 | <vertical> |
| 188 | <doc> |
| 189 | <head>|<caption>|<p>|<sign> |
| 190 | [BLOK] |
| 191 | <list> |
| 192 | <item> |
| 193 | [BLOK] |
| 194 | <pre> |
| 195 | <table> |
| 196 | [TEXT] |
| 197 | <row> |
| 198 | <cell> |
| 199 | [TEXT] |
| 200 | <poem> |
| 201 | <lg> |
| 202 | <l> |
| 203 | [TEXT] |
| 204 | <l> |
| 205 | [TEXT] |
| 206 | |
| 207 | přičemž [BLOK] znamená: |
| 208 | |
| 209 | <list> |
| 210 | <item> |
| 211 | [BLOK] |
| 212 | |
| 213 | <lang>|<note> |
| 214 | |
| 215 | [TEXT] |
| 216 | [TEXT] |
| 217 | |
| 218 | přičemž [TEXT] znamená: |
| 219 | |
| 220 | <q> |
| 221 | [POZICE] |
| 222 | [POZICE] |
| 223 | |
| 224 | |
| 225 | přičemž [POZICE] znamená: |
| 226 | |
| 227 | <z/> (zde bude ve skutečnosti konkrétní pozice) |
| 228 | <g/> |
| 229 | }}} |
| 230 | == == #Rozd.2BAO0-ly_mezi_vertik.2BAOE-lem_a_jeho_DTD_definic.2BAO0- |
| 231 | == Rozdíly mezi vertikálem a jeho DTD definicí == #Rozd.2BAO0-ly_mezi_vertik.2BAOE-lem_a_jeho_DTD_definic.2BAO0- |
| 232 | jsou dva |
| 233 | |
| 234 | * kódování - DTD předpokládá UTF-8, vertikál používá ISO-8859-2 (Latin-2) |
| 235 | * značka <z/> - tam, kde ji očekává DTD, má vertikál pozici |
| 236 | |
| 237 | 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. |
| 238 | |
| 239 | == Závěrečné info == #Z.2BAOE-v.2BARs-re.2BAQ0-n.2BAOk_info |
| 240 | 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] . |