Changes between Initial Version and Version 1 of cs/PopisVertikalu


Ignore:
Timestamp:
Feb 27, 2014, 2:45:17 PM (10 years ago)
Author:
xkocinc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • cs/PopisVertikalu

    v1 v1  
     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
     5Zá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
     12Jeden soubor s vertikálním textem by měl mít velikost zhruba několik desítek kB.
     13
     14Kó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>
     23Co
     24stojí
     25za
     26tažením
     27hokejového
     28týmu
     29</head>
     30<p>
     31<lang id="en">
     32Hello
     33world
     34<g/>
     35!
     36</lang>
     37Další
     38zlato
     39</p>
     40<sign>
     41MARTIN
     42HAŠEK
     43</sign>
     44</doc>
     45</vertical>
     46}}}
     47== Rozdělení textu do pozic == #Rozd.2BARs-len.2BAO0_textu_do_pozic
     48Oddě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}}}
     53se převede na:
     54
     55{{{
     56(
     57<g/>
     58slovo
     59<g/>
     60,
     61které
     62...
     63}}}
     64Zatí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
     66Vš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
     68Způsob použití - Perl:
     69
     70{{{
     71use Corpus;
     72$line = Corpus::split($line);
     73}}}
     74Způsob použití - Python:
     75
     76{{{
     77import Corpus
     78line = Corpus.split(line)
     79}}}
     80Externí 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
     82Použ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
     89Vš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
     120Jak čí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
     184Př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 
     207přičemž [BLOK] znamená:
     208
     209<list>
     210         <item>
     211                  [BLOK]
     212
     213<lang>|<note>
     214
     215         [TEXT]
     216[TEXT]
     217
     218přičemž [TEXT] znamená:
     219
     220<q>
     221         [POZICE]
     222[POZICE]
     223
     224
     225př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-
     232jsou 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
     237Tyto  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
     240Další  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] .