Changes between Initial Version and Version 1 of cs/JakVytvoritKorpus1


Ignore:
Timestamp:
Feb 27, 2014, 3:32:45 PM (6 years ago)
Author:
xkocinc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • cs/JakVytvoritKorpus1

    v1 v1  
     1= Jak vytvořit korpus = #Jak_vytvo.2BAVk-it_korpus
     2[[BR]]          Tento článek slouží jako průvodce při vytváření korpusu. Je určen pro  studenty a další zájemce, kteří chtějí pořizovat a převádět data pro  potřeby korpusů. Za prvé popisuje strukturu korpusů, s využitím odkazů  na příslušné normy.  Za druhé popisuje možnosti kontroly správnosti  korpusových dat.  A za třetí podává návod, jak vytvářet korpusy převodem  z HTML stránek.
     3
     4== Úvod == #A.2BANo-vod
     5=== Co jsou to korpusy === #Co_jsou_to_korpusy
     6Obecně  - počítačový korpus je rozsáhlý, vnitřně strukturovaný a ucelený soubor   textů daného jazyka, elektronicky uložený a zpracovávaný. Práci s  korpusovými daty zprostředkovává program nazývaný korpusový  manažer.
     7
     8Aby  mohl být určitý text do korpusu zařazen, musí být připravena  dvojice  textových souborů - tzv. vertikální text (zkráceně vertikál)  a  metainformace. Vertikál obsahuje samotná korpusová data, metainformace  obsahují doplňující údaje o těchto datech. V tomto textu bude množina  takových dvojic souborů označována zjednodušeně jako korpus (viz dále).
     9
     10== Struktura korpusových dat == #Struktura_korpusov.2BAP0-ch_dat
     11=== Jak jsou korpusy uloženy === #Jak_jsou_korpusy_ulo.2BAX4-eny
     12Korpusy  jsou uloženy jako textové soubory. Korpus je jednoznačně určen jménem  adresáře. Všechny soubory, které končí .vert (vertikály) a .meta  (metainformace) a které jsou obsaženy v tomto adresáři a všech jeho  podadresářích, tvoří korpus.
     13
     14=== Struktura vertikálů === #Struktura_vertik.2BAOE-l.2BAW8-
     15Strukturu vertikálů popisuje norma pro vertikály  [[PopisVertikalu| Popis vertikálů]] .
     16
     17=== Struktura metainformací === #Struktura_metainformac.2BAO0-
     18Strukturu metainformací popisuje norma pro metainformace  [[PopisMetainformaci| Popis metainformací]] .
     19
     20=== Vazby mezi vertikály a metainformacemi === #Vazby_mezi_vertik.2BAOE-ly_a_metainformacemi
     21 1. V každém adresáři či podadresáři si musejí co do počtu i do jmen (až na příponu) tyto odpovídat.
     22 1. Každý z dvojice (vertikál, metainformace) obsahuje dokumenty stejných jmen ve stejném pořadí. Příklad:
     23   * mf-1999-05-17.vert obsahuje dokumenty                "<doc mf/1999/05/17/1>" až        "<doc mf/1999/05/17/159>"
     24
     25 * mf-1999-05-17.meta obsahuje dokumenty "Doc        : mf/1999/05/17/1" až "Doc        : mf/1999/05/17/159"
     26
     27== Nástroje pro kontrolu správnosti korpusových dat == #N.2BAOE-stroje_pro_kontrolu_spr.2BAOE-vnosti_korpusov.2BAP0-ch_dat
     28Dají se rozdělit na tři skupiny:
     29
     30 * kontrola konzistence mezi vertikály a metainformacemi
     31 * kontrola vertikálů
     32 * kontrola metainformací
     33
     34Všechny jsou dostupné po přidání modulu:
     35
     36{{{
     37$ module add corpus
     38}}}
     39na strojích aurora (Linux), aisa (IRIX) a oreias (SunOS).
     40
     41=== Pomocné programy === #Pomocn.2BAOk_programy
     42Většina  programů pracuje se standardním vstupem a výstupem. To znamená, že  kontrolní program nezná jméno souboru, jehož obsah mu byl přesměrován na  jeho standardní vstup. Proto je tu program `check_file`.  Použití:
     43
     44{{{
     45check_file [-l číslo -s -S] program file
     46
     47$ check_file -l 20 meta_check neco.meta
     48}}}
     49Jako  argumenty mu dáme jméno kontrolního programu  a souboru, který chceme  zkontrolovat. Jeho výstup obsahuje jméno kontrolovaného souboru a   výstup kontrolního programu. Volby:
     50
     51 * -l číslo ... výstup kontrolního programu se ořeže na 'číslo' řádek
     52 * -s ... totéž co -l 0
     53 * -S ... pokud kontrola byla bez chyby, potlačí všechen výstup
     54
     55Další pomocný program je `traverse_dir`, který je vystavěn na programu ` find `.   Použití:
     56
     57{{{
     58traverse_dir [-v] suffix program [argumenty pro program]
     59
     60$ traverse_dir vert check_file -S xml_check
     61}}}
     62Suffix je buď `vert` nebo `meta`.  Program vyhledá všechny soubory s příponou suffix a provede volání  specifikovaného programu s jeho argumenty a jako poslední argument přidá  jméno nalezeného souboru. Takže v ukázkovém  případu se volá  ` check_file -S xml_check neco.vert`. Volba `-v` provede navíc výpis těchto volání.
     63
     64=== Kontrola konzistence mezi vertikály a metainformacemi === #Kontrola_konzistence_mezi_vertik.2BAOE-ly_a_metainformacemi
     65Kontroluje se, jestli si odpovídají soubory .vert a .meta:
     66
     67{{{
     68$ v2m_files
     69}}}
     70Dále se kontrolují seznamy jmen dokumentů - program `v2m_docs`.  Kontrola jedné dvojice souborů .meta a .vert:
     71
     72{{{
     73$ v2m_docs soubor.meta                        #Zadám jen jméno metainformací
     74}}}
     75Kontrola celého korpusu:
     76
     77{{{
     78$ traverse_dir meta v2m_docs
     79}}}
     80=== Kontrola vertikálů a metainformací === #Kontrola_vertik.2BAOE-l.2BAW8_a_metainformac.2BAO0-
     81K dispozici jsou tyto programy:
     82
     83 1. `il2_check` [[BR]]     Určeno pro: *.vert, *.meta. Kontroluje kódování češtiny. Ohlásí  podezřelé znaky. Je nutno zvážit, zda se jedná o skutečnou chybu nebo  ne.
     84
     85 1. `tags_check` [[BR]]     Určeno pro: *.vert. Kontroluje, zda řádky, které vypadají jako značky, jsou ze seznamu povolených značek.
     86
     87 1. `pozice_check` [[BR]]     Určeno pro: *.vert. Kontroluje, zda řádky, které nejsou značkami, jsou dále nedělitelné pomocí funkce Corpus::split().
     88
     89 1. `heuristic_check` [[BR]]     Určeno pro: *.vert. Kontrola pozic, zda neobsahují řídící a  značkovací řetězce originálního textu. Hledá HTML značky a příkazy  LATEXu.
     90
     91 1. `xml_check` [[BR]]     Určeno pro: *.vert. Kontrola struktury vertikálů.
     92
     93 1. `meta_check` [[BR]]    Určeno pro: *.meta. Kontrola struktury metainformací.
     94
     95Všechny tyto programy jsou filtry. Proto je používáme jedním z těchto tří způsobů:
     96
     97{{{
     98$ xml_check < soubor.vert > zde_je_vystup 2>&1
     99}}}
     100nebo:
     101
     102{{{
     103$ check_file xml_check soubor.vert > zde_je_vystup
     104}}}
     105nebo:
     106
     107{{{
     108$ cd adresar_s_daty
     109$ traverse_dir vert check_file xml_check > zde_je_vystup
     110}}}
     111Všechny kontroly se dají spustit pomocí dávky `check_all`:
     112
     113{{{
     114$ check_all > zde_je_vystup 2>&1
     115}}}
     116=== Jak číst výstupy kontrolních programů === #Jak_.2BAQ0A7Q-st_v.2BAP0-stupy_kontroln.2BAO0-ch_program.2BAW8-
     117 * `v2m_files, v2m_docs`[[BR]]    Oba programy používají při hlášení rozdílů v seznamech jmen (`v2m_files` - jmen souborů a `v2m_docs` - jmen dokumentů) standardní program  `comm` s parametrem `-3`.  Ten uvede rozdíly ve dvou tabulátorem odsazených sloupcích.  Viz také `man comm`.
     118
     119 * `il2_check, tags_check, pozice_check, heuristic_check, meta_check` [[BR]]    Tyto programy mají snadno čitelný výstup, a není tedy nutno jej zde dále komentovat.
     120
     121 * `xml_check` [[BR]]    Program `xml_check` je založen na volání xml-parseru `rxp`. Jen je proveden určitý preprocessing - viz  kapitola [[PopisVertikalu#rozdily| Rozdíly mezi vertikálem a jeho DTD definicí]]
     122
     123Výstup programu bude vyložen na několika příkladech:
     124
     125{{{
     126VSTUP č.1:
     127<?xml version="1.0"?>
     128<!DOCTYPE vertical SYSTEM "/net/aisa/corpus/vertical.dtd">
     129<vertical>
     130</vertical>
     131
     132VÝSTUP:
     133Warning: Content model for vertical does not allow it to end here
     134 in unnamed entity at line 4 char 11 of <stdin>
     135
     136VYSVĚTLENÍ:
     137Vertikál neobsahoval žádný dokument, ale párová značka
     138<vertical> nesmí být prázdná.
     139
     140----------
     141VSTUP č.2:        (jen jeho relevantní část)
     142<doc id="neco">
     143Ahoj
     144<head>
     145Jaroslav
     146
     147VÝSTUP:
     148Warning: Content model for doc does not allow element z here
     149 in unnamed entity at line 5 char 3 of <stdin>
     150
     151VYSVĚTLENÍ:
     152Po značce <doc> musí bezprostředně následovat npaříklad <head>
     153nebo <p> a nikoli pozice  (element z označuje pozici Ahoj).
     154
     155---------
     156VSTUP č.3:        (jen jeho relevantní část)
     157<p>
     158<head>
     159V
     160zázemí
     161</head>
     162blabla
     163</p>
     164
     165VÝSTUP:
     166Content model for p does not allow element head here
     167 in unnamed entity at line 6 char 6 of <stdin>
     168
     169VYSVĚTLENÍ:
     170V <p> nesmí být zanořen <head>
     171
     172---------
     173VSTUP č.4:        (jen jeho relevantní část)
     174<doc id="a">
     175<p>
     176V
     177<p>
     178A
     179</doc>
     180
     181VÝSTUP:
     182Warning: Content model for p does not allow element p here
     183 in unnamed entity at line 7 char 3 of <stdin>
     184Error: Mismatched end tag: expected </p>, got </doc>
     185 in unnamed entity at line 9 char 6 of <stdin>
     186 
     187VYSVĚTLENÍ:
     188Neuzavřené značky <p>.
     189
     190
     191---------
     192VSTUP č.5:        (jen jeho relevantní část)
     193<p>
     194<g/>
     195konec
     196
     197VÝSTUP:
     198Warning: Content model for p does not allow element g here
     199 in unnamed entity at line 6 char 3 of <stdin>
     200 
     201VYSVĚTLENÍ:
     202Značka <g/> zde nemůže být, protože musí být vždy z obou stran obklopena
     203pozicemi, které spojuje a zde je nad ní nikoli pozice, ale značka <p>.
     204Tato chyba nemůže vzniknout, pokud se použije na "rozsekání"
     205textu funkce Corpus::split nebo program corus_split.
     206}}}
     207== Převod HTML stránek na vertikální tvar == #P.2BAVk-evod_HTML_str.2BAOE-nek_na_vertik.2BAOE-ln.2BAO0_tvar
     208Pokud  si jako zdroj zvolíme webovské HTML stránky, potom jsou zde k dispozici  nástroje pro převod do vertikálu. Jsou založeny na perlovském modulu  HTML::Parser (`man HTML::Parser`) a na funkci Corpus::split.
     209
     210HTML  stránky obsahují kromě značek také ještě posloupnosti znaků zvané  entity, například & nebo   anebo °. Tyto entity je třeba převést na  odpovídající znaky. K tomu je k dipsozici filtr nazvaný `html`.  Dokumenty jsou často v jiném kódování (1250), v tom případě je třeba použít filtr `cstocs 1250 il2` a to až po aplikaci filtru ` html` (jinak by došlo k chybnému převodu  entit typu °).
     211
     212Pomocný program `vert2xml`  vznikl k překlenutí rozdílů mezi starší a novější definicí struktury  vertikálu.  Pracuje jako filtr, který přidá ke svému vstupu hlavičku  vertikálu (první tři řádky), opraví tvar některých značek a přidá na  konec řádek </vertical>. Programy dále popsané dávají výstup ve  starším formátu, proto jako postprocessing  je vhodné zařadit filtr `vert2xml`.
     213
     214Vzhledem  k tomu, že struktura HTML dokumentů je celkem volná, pouhým překladem  značek nedospějeme ke dobře utvořenému vertikálu. Proto jsou dále  popsány prográmky na úpravu některých neduhů - provádějí párování,  rušení nebo vkládání značek. Několik programů je spojeno do dávky `tags_all`, kterou je možné použít jako poslední postprocessing.
     215
     216=== Příklad 1. - nejjednodušší použití === #P.2BAVkA7Q-klad_1._-_nejjednodu.2BAWEBYQDt_pou.2BAX4-it.2BAO0-
     217Je implementováno v programu  [http://nlp.fi.muni.cz/cs/Jak_vytvorit_korpus?action=AttachFile&do=view&target=html2vert.1 html2vert.1]  . Program funguje jako filtr. Použití:
     218
     219{{{
     220 html <  muj.html | html2vert.1 |vert2xml | tags_all > muj.vert
     221}}}
     222Výpis programu:
     223
     224{{{
     225BEGIN {push @INC ,                                                                  #Do seznamu cest modulu pridej
     226"/usr/local/lib/perl5/site_perl/5.005",          #Cestu k modulu HTML::Parser
     227"/packages/share/corpus/lib"                         #Cestu k modulu Corpus       
     228};
     229
     230use Corpus;                                                                                #Vyzada si balik Corpus               
     231require HTML::Parser;                                                                #Vyzada si balik HTML::Parser
     232package Muj_Parser;                                                                  #Odtud zacne balik Muj_Parser
     233
     234#Nastavuje dedicnost
     235@ISA=qw(HTML::Parser);
     236
     237sub start {}                  #vola se, kdyz je rozpoznana nekoncova znacka, zatim nedela nic
     238sub end        {}                  #vola se, kdyz je rozpoznana koncova znacka, zatim nedela nic
     239
     240#Tato procedura se vola vzdy, kdyz je rozpozan nejaky text
     241sub text                                                                 
     242{
     243  my($self, $text) = @_;                                  #do $self, $text si ulozim parametry
     244  return unless $text;                                         #pokud $text je prazdny, vrat se
     245  my $t=(Corpus::split($text));                 #do $t uloz rozdeleny text
     246  print $t unless $t =~ /^$/;                        #tiskni $t, pokud neni prazdny
     247}
     248
     249$p = Muj_Parser->new;                  #Vytvorim novy objekt tridy  Muj_Parser
     250$p->parse_file(\*STDIN);                  #Volam parsovani standardniho vstupu
     251}}}
     252Program  převede entity, vypustí všechny HTML značky a text "rozseká" pomocí  funkce Corpus::split na pozice. Proto jediná značka ve výstupu bude  <g>.[[BR]] Program funguje takto:[[BR]] Metoda parse_file postupně zpracovává STDIN a vždy, když rozpozná  nějakou značku, zavolá proceduru start, případně end, a tuto značku,  převedenou na malá písmena a zbavenou atributů, předá jako druhý  argument.  Text mezi značkami je předán proceduře text.
     253
     254=== Příklad 2. - přidání některých značek === #P.2BAVkA7Q-klad_2._-_p.2BAVk-id.2BAOE-n.2BAO0_n.2BARs-kter.2BAP0-ch_zna.2BAQ0-ek
     255Je k dispozici v souboru  [http://nlp.fi.muni.cz/cs/Jak_vytvorit_korpus?action=AttachFile&do=view&target=html2vert.2 html2vert.2]   . Pokud budeme chtít, aby se ve výsledném vertikálu objevily značky  <doc>, resp. <p>, tehdy, když ve zdroji byly značky  <HTML>, resp. <p>, změníme definici procedur start a end  tak, aby tiskly značky, když se rozpoznají jejich HTML ekvivalenty.  Navíc do značky  <doc> se přidá jako atribut jméno, které je  prvním argumentem programu. Použití :
     256
     257{{{
     258 html < muj.html | html2vert.2 blabla | vert2xml | tags_all > muj.vert
     259}}}
     260Změněné procedury:
     261
     262{{{
     263sub start
     264{
     265        my($self, $tag) = @_;
     266        if ($tag eq "html") {print "<doc $ARGV[0]>\n"};
     267        if ($tag eq "p") {print "<p>\n"};
     268}
     269
     270sub end
     271{
     272        my($self, $tag) = @_;
     273        if ($tag eq "html") {print "</doc>\n"};
     274}
     275}}}
     276=== Příklad 3. - pokročilejší značení === #P.2BAVkA7Q-klad_3._-_pokro.2BAQ0-ilej.2BAWEA7Q_zna.2BAQ0-en.2BAO0-
     277Je k dispozici v souboru  [http://nlp.fi.muni.cz/cs/Jak_vytvorit_korpus?action=AttachFile&do=view&target=html2vert.3 html2vert.3]  . Testovací soubor lidových novin je v souboru  ln-1999-11-10.all[https://nlp.fi.muni.cz/nlp/cgi-local/edit.cgi/NlpCz/ln-1999-11-10.all ?] .  Použití:
     278
     279{{{
     280 html < ln-1999-11-10.all | html2vert.3 l n | vert2xml | tags_all > muj.vert
     281}}}
     282Předpokládejme strukturu HTML dokumentu reprezentovanou těmito zanořenými značkami (text byl vypuštěn - viz [http://nlp.fi.muni.cz/cs/Jak_vytvorit_korpus#html_pp html_pp]):
     283
     284{{{
     285        <HTML>
     286                <HEAD>
     287                        <SCRIPT LANGUAGE="JavaScript">
     288                        </SCRIPT>
     289                </HEAD>
     290                <BODY>
     291                        <P ALIGN="center">
     292                        <DIV CLASS="vlclanek">
     293                                <P ALIGN="right">
     294                                <B>
     295                                        <I>
     296                                        </I>
     297                                </B>
     298                        </DIV>
     299                        <HR ALIGN="center" NOSHADE SIZE=2 WIDTH="30%">
     300                        <DIV CLASS="vlclanek">
     301                                <P ALIGN="right">
     302                                <B>
     303                                        <I>
     304                                        </I>
     305                                </B>
     306                        </DIV>
     307                </BODY>
     308        </HTML>
     309}}}
     310Toto je zjednodušená struktura HTML souborů na serveru www.trafika.cz (dnes již na [http://noviny.trafika.cz/ noviny.trafika.cz]  deníky Lidové noviny, Mladá fronta Dnes a Právo nenajdete). Jeden   soubor bude převeden na vertikál s několika dokumenty. Jeden dokument  odpovídá kontejneru značek <div> a </div>. Proto do  vertikálu pustíme jen text z těchto oblastí. Navíc víme, že text  zanořený ve značkách <b> a <i> je tučnou kurzívou vysázené  jméno autora, které chceme mít ve vertikálu mezi značkami <sign> a  </sign>. Dále budeme jednotlivé dokumenty číslovat, dvanáctý  dokument Lidových novin bude <doc ln/12>.
     311
     312Předefinujeme procedury start, end a text:
     313
     314{{{
     315sub start
     316{
     317         my($self, $tag) = @_;
     318         if ($tag eq "div") {$self->{"poradi"}++;                        #zvysim si pocitadlo
     319                        print "<doc $ARGV[0]/$self->{poradi}>\n"; #tisknu <doc jm/cislo>
     320                                                                $self->{"div"}=1;                                                         #indikuju oblast div
     321                                                          }
     322         elsif ($tag eq "p") {print "<p>\n" if $self->{"div"}; }         #tisknu <p>, pokud  je div
     323         elsif ($tag eq "b") {$self->{"b"}=1}                                                          #indikuju b
     324         elsif ($tag eq "i") {$self->{"i"}=1;                                                #indikuju i
     325                                print "<sign>\n" if $self->{"b"};  #tisknu <sign>, pokud je b
     326                                                                }
     327}
     328
     329sub end
     330{
     331         my($self, $tag) = @_;
     332         if         ($tag eq "b") {$self->{"b"}        =0}                        #konci b
     333         elsif ($tag eq "i") {$self->{"i"}        =0;                        #konci i
     334                                                                 print "</sign>\n" if $self->{"b"};  #tisknu </sign>, je-li b
     335                                                                }
     336         elsif ($tag eq "div")  {$self->{"div"} =0;                        #konci div
     337                                                                         print "</doc>\n";                                         #tisknu </doc>
     338                                                                        }
     339}
     340
     341
     342sub text {
     343        my($self, $text) = @_;          #do $self, $text si ulozim parametry
     344        return unless $self->{"div"};   #Pokud neni v mezich div, tak netiskni
     345        return unless $text;            #pokud $text je prazdny, vrat se
     346        my $t = (Corpus::split($text)); #do $t uloz rozdeleny text
     347        print $t unless $t =~ /^$/;     #tiskni $t, pokud neni prazdny
     348}
     349}}}
     350Objekt $p si nese informaci, ve kterém zanoření zrovna je, a to pomocí ukazatele $self na hash. Například `$self->{"div"} =1;` signalizuje, že jsme vstoupili do div kontejneru.
     351
     352=== Příklad č.4 - program používaný pro převod periodik z www.trafika.cz (dnes noviny.trafika.cz) === #P.2BAVkA7Q-klad_.2BAQ0.4_-_program_pou.2BAX4A7Q-van.2BAP0_pro_p.2BAVk-evod_periodik_z_www.trafika.cz_.28dnes_noviny.trafika.cz.29
     353Je k dispozici bez dalších komentářů v souboru  [http://nlp.fi.muni.cz/nlp/files/html2corpora html2corpora] .[[BR]]
     354
     355=== Pomocný nástroj pro analýzu struktury HTML - html_pp (pp - pretty printer) === #Pomocn.2BAP0_n.2BAOE-stroj_pro_anal.2BAP0-zu_struktury_HTML_-_html_pp_.28pp_-_pretty_printer.29
     356Program  slouží k tomu, aby bylo snadnější nahlédnout strukturu konkrétního HTML  dokumentu. Ponechá pouze značky a odsadí je podle zanoření pomocí  tabulátorů. [http://nlp.fi.muni.cz/cs/Jak_vytvorit_korpus#struktura Struktura] v předchozím příkladu byla vygenerována právě pomocí html_pp.  Použití:
     357
     358{{{
     359cat ln-1999-11-10.all | html_pp
     360}}}
     361K běhu potřebuje perlovský modul HTML::TreeBuilder.
     362
     363== Programy na opravu častých chyb == #Programy_na_opravu_.2BAQ0-ast.2BAP0-ch_chyb
     364=== Pro vertikály === #Pro_vertik.2BAOE-ly
     365Všechny jsou dostupné po přidání modulu:
     366
     367{{{
     368$ module add corpus
     369}}}
     370na strojích aurora (Linux), aisa (IRIX) a oreias (SunOS).  Jsou to:
     371
     372 1. tags_pair_doc [[BR]]    Páruje značku <doc>.
     373
     374 1. tags_rm_bad_glue [[BR]]    Maže značku <g/>, pokud není "obalena" pozicemi.
     375
     376 1. tags_rm_multi  [[BR]]    Maže opakující se značky (nechá jen první výskyt z posloupnosti).
     377
     378 1. tags_pair_item  [[BR]]    Páruje značku <item>.
     379
     380 1. tags_rm_empty  [[BR]]    Maže počáteční a koncovou značku, pokud jsou bezprostředně za sebou.
     381
     382 1. tags_insert_p [[BR]]    Vkládá značku  <p> před pozici tam, kde by tato pozice byla zahnízděná přímo v kontejneru značky <doc>.
     383
     384 1. tags_pair_p [[BR]]    Páruje značku <p>.
     385
     386 1. tags_all [[BR]]    Dávka, která kombinuje některé výše uvedené programy.
     387
     388Použití:  všechny programy pracují jako filtry, takže  se dají přidat  na konec  kolony, která produkuje vertikál. Na už vygenerovaný vertikál je vhodné  je spustit pomocí pomocného programu apply_filter:
     389
     390úprava jednoho souboru:
     391
     392{{{
     393$ apply_filter tags_all vertikal.vert
     394}}}
     395úprava všech vertikálů v korpusu:
     396
     397{{{
     398$ cd korpus
     399$ traverse_dir vert apply_filter tags_all
     400}}}
     401=== Pro metainformace === #Pro_metainformace
     402`atrib_insert_povinne`  - program, který doplní neuvedené povinné atributy a nastaví jim  hodnotu Y (nezjistitelné). Je to také filtr, takže použití vypadá takto:
     403
     404úprava jednoho souboru:
     405
     406{{{
     407$ apply_filter atrib_insert_povinne vertikal.meta
     408}}}
     409úprava všech metainformací v korpusu:
     410
     411{{{
     412$ cd korpus
     413$ traverse_dir meta apply_filter atrib_insert_povinne
     414}}}
     415Vložení dalších atributů zajišťují programy:
     416
     417 1. atrib_insert_offset [[BR]]
     418
     419 1. atrib_insert_size [[BR]]
     420
     421 1. atrib_insert_lemmat  [[BR]]
     422
     423 1. atrib_insert_signat (běží zatím je na auroře)
     424
     425Všechny programy očekávají jako svůj jediný argument jméno souboru  s metainformacemi.
     426
     427Použití:  Úprava jednoho souboru:
     428
     429{{{
     430$ atrib_insert_size vertikal.meta
     431}}}
     432úprava všech metainformací v korpusu:
     433
     434{{{
     435$ cd korpus
     436$ traverse_dir meta atrib_insert_size
     437}}}
     438== Doplňkové programy == #Dopl.2BAUg-kov.2BAOk_programy
     439 1. vert2xml [[BR]]    Program vhodný pro transformaci starého formátu vertikálů na nový. Filtr, který vkládá tyto 3 řádky před svůj vstup:
     440
     441{{{
     442<?xml version="1.0"?>
     443<!DOCTYPE vertical SYSTEM "/net/aisa/corpus/vertical.dtd">
     444<vertical>
     445}}}
     446  a tento za svůj vstup:
     447
     448{{{
     449</vertical>
     450}}}
     451  a provádí změnu u značek <doc> , <pre> a <g>.
     452
     453 1. cisti_corpus [[BR]]    Najde soubory, které nekončí .vert nebo .meta (lze je potom smazat). Použití:
     454
     455{{{
     456$ cd korpus
     457$ cisti_corpus                                #vypis
     458$ cisti_corpus | xargs rm -f                #smazani
     459}}}
     460 1. docs2meta[[BR]]    Přejmenuje .docs soubory na .meta (docs - starší, již  nepoužívaná koncovka pro metainformace). Použití:
     461
     462{{{
     463$ cd korpus
     464$ docs2meta
     465}}}
     466 1. corpus_size[[BR]]    Zjistí velikost korpusu. Na výstup dá počet pozic korpusu.
     467
     468{{{
     469$ cd korpus
     470$ corpus_size
     471}}}