Changes between Initial Version and Version 1 of cs/JakVytvoritKorpus2


Ignore:
Timestamp:
Feb 28, 2014, 1:28:18 PM (10 years ago)
Author:
xkocinc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • cs/JakVytvoritKorpus2

    v1 v1  
     1= Jak vytvořit korpus 2 = #Jak_vytvo.2BAVk-it_korpus_2
     2[[BR]]          Tento článek slouží jako průvodce druhou fází při vytváření korpusu. Je  určen pro administrátory korpusu. Vysvětluje jak vytvořit korpus, se  kterým bude možno pracovat pomocí  korpusového manažeru za předpokladu,  že již máme k dispozici vertikální text a případně i metainformace.
     3
     4== Co je cílem == #Co_je_c.2BAO0-lem
     5Naším  cílem je z vertikálního textu vytvořit korpus, se kterým bude moci  uživatel pracovat s pomocí korpusového manažeru a příslušného klienta.  Jelikož se v současné době používá jednak manažer cqp s klientem gcqp a   manažer manatee s klientem bonito bude v dalším textu vždy uvedeno, jak  potupovat pro konkrétní případ.  Zprovoznění korpusu pro uživatele  sestává ze dvou kroků:
     6
     7 * Editace  konfiguračních souborů - nastavení parametrů pro jednotlivého uživatele  a pro jednotlivý korpus (tzv. corpus registry). Pro uživatele  nastavujeme zejména  tyto paramatry:  jméno, heslo a seznam povolených  korpusů.
     8 * Vybudování binárních souborů korpusu z vertikálního textu.
     9
     10== Nastavení parametrů pro jednotlivý korpus - corpus registry. ==
     11manatee:[[BR]] Soubor corpus registry najdeme  v adresáři /nlp/corpora/manatee/registry/ a obvykle je třeba generovat ručně.    cqp:[[BR]]
     12
     13Soubor  corpus registry najdeme obvykle v adresáři /nlp/corpora/cqp/registry/  (přesnou pozici zjistíme ze souboru /nlp/corpora/cqp/corpora, nebo  ze  souborů v adresáři /nlp/corpora/cqp/corplists/) a obvykle je generován  automaticky.
     14
     15== Nastavení parametrů pro jednotlivého uživatele. ==
     16manatee:[[BR]] Vše podstatné je v tomto úryvku z mailu:
     17
     18{{{
     19podle toho, jak spoustis server:
     20* lokalne (v polozce server je `|manager ....' -- ta trubka na zacatku
     21  je dulezita), tak to napises jako parametr toho serveru, treba:
     22          |manager "desam mini" 2>errlog
     23* pres internet (v plozce server je `aurora.fi.muni.cz'), tak to udelas
     24  v konfiguraci v /home/corpadm/users, pripadne /nlp/corpora/manatee/corplists
     25
     26Jo, asi jsem ti to neposlal (ze se tak blbe ptas :-), vytvoril jsem
     27uzivatele corpadm, pod kterym ten server bezi a v jehoz adresari je
     28konfigurace. V souboru users ma kazdy uzivatel vypsany korpusy nebo tam
     29je neco jako `@jmeno' a pak je seznam v souboru /nlp/corpora/manatee/corplists/jmeno
     30
     31Jinak se to da vycist v ~corpadm/runm.pl, coz jsi mohl zjistit z
     32/etc/inetd.conf, ... , proste kdo hleda, najde :-).
     33}}}
     34cqp:[[BR]] Vše podstatné je v tomto úryvku z mailu:
     35
     36{{{
     37posilam navod, jak v manazeru cqp a klientovi gcqp vytvorit korpusy.
     38V podstate vsechno jsem udelal, staci kdyz do prislusneho adresare
     39nakopirujes vertikaly a jinde das make corpus, ale radsi to popisu.
     40-----------------------------------------------------------------------
     411.  V /home/pary/src/cqsd/cqsd.users jsem pridal uzivatele emasters
     42(s prazdnym heslem)
     43
     44emasters:::0:0:emasters:
     45-----------------------------------------------------------------------
     462. Tento uzivatel ma v souboru /nlp/corpora/cqp/corplists/emasters
     47napsano k jakym korpusum pristupuje:
     48
     49$ cat /nlp/corpora/cqp/corplists/emasters
     50
     51korpus1 /nlp/corpora/cqp/emasters/korpus1/registry
     52korpus2 /nlp/corpora/cqp/emasters/korpus2/registry
     53
     54
     55Jsou tam dva korpusy - pokud by bylo vic skupin tak analogii
     56se prida dalsi. Ale je mozne, ze lepsi bude mit korpus jen jeden.
     57
     58-----------------------------------------------------------------------
     593. Vytvoril jsem adresare, kde budou vertikaly k temto korpusum:
     60
     61$ cd  /nlp/corpora/vertical/emasters/
     62$ mkdir korpus1/  korpus2/
     63
     64a do souboru /nlp/corpora/cqp/emasters/korpus1/source
     65jsem tento adresar zadal:
     66
     67$ cat /nlp/corpora/cqp/emasters/korpus1/source
     68/nlp/corpora/vertical/emasters/korpus1/
     69
     70obdobne pro korpus2
     71
     72-----------------------------------------------------------------------
     734. Ted staci zadat pro kazdy korpus
     74
     75$ cd /nlp/corpora/cqp/emasters/korpus1
     76$ make clean
     77$ make corpus
     78
     79To projde rekurzivne adresar s vertikaly (ktere jsi tam predtim nakopcil)
     80a vytvori z nej korpus.
     81
     82-----------------------------------------------------------------------
     835. Ted je vse priprave pro to, abys zadal:
     84
     85$ gcqp&
     86
     87a jako uzivatele dal emasters bez hesla.
     88-----------------------------------------------------------------------
     89
     90Poznamka: v Makefile jsou napsany znacky, ktere korpus pouziva,
     91seznam uprav dle potreby:
     92
     93$ grep 'STRUCTURES' /nlp/corpora/cqp/emasters/korpus1/Makefile
     94
     95STRUCTURES = p g
     96VAL_STRUCTURES = doc
     97
     98-----------------------------------------------------------------------
     99}}}
     100== Vybudování binárních souborů korpusu z vertikálního textu. ==
     101Každý  korpusový manažer má k dispozici program, který vybuduje potřebné  binární soubory a který očekává na svém standardním vstupu vertikální  text.
     102
     103cqp:[[BR]] cat vertikal.vert | encode  nejake_parametry_pro_encode
     104
     105manatee:[[BR]] cat vertikal.vert | encodevert nejake_parametry_pro_encodevert
     106
     107Je  vidět, že přístup je podobný - vždy je třeba vytvořit proud  vertikálního textu. V praxi se nejspíše setkáme s dvěma následujícími  případy - chceme vytvořit korpus ze všech vertikálů v nějakém adresáři a  jeho podadresářích, anebo chceme vytvořit korpus ze seznamu dokumentů  (pozn. - jeden vertikál obsahuje jeden nebo více dokumentů).
     108
     109=== Vytvoření proudu vertikálního textu ze seznamu adresářů. ===
     110Mějme soubor source se seznamem adresářů:
     111
     112{{{
     113$ cat source
     114/nlp/corpora/vertical/eso/
     115/nlp/corpora/vertical/i047_2000/
     116/nlp/corpora/vertical/i047_1999/
     117}}}
     118Proud  vertikálního textu vytvoříme rekurzivním průchodem adresářů a tiskem  obsahu nalezených  vertikálů, přičemž z vertikálů odstraníme nežádoucí  XML tagy, které nejsou součástí dokumentů.
     119
     120{{{
     121$ cat source                                                    #produkuje seznam adresaru                             
     122| xargs --replace=dirs find dirs -type f -name "*.vert"         #produkuje seznam souboru
     123| xargs cat                                                     #produkuje vertikalni text
     124| grep -v -E '^<(\?xml|!DOCTYPE|vertical|\/vertical)'           #cisti vertikalni text
     125}}}
     126Pro  každý korpus je vytvořen Makefile, který obsahuje tyto nebo jim podobné  řádky. Poslední dva řádky jsou součástí programu vert2cqp, který tedy  ze seznamu souborů  generuje vertikální text.
     127
     128=== Vytvoření proudu vertikálního textu ze seznamu dokumentů. ===
     129Mějme  soubor source se seznamem dokumentů, takový soubor většinou získáme  z  metainformací, když chceme vytvořit specifický korpus.
     130
     131{{{
     132$ cat source
     133975573,8794:S/J/1994/abc94/165:cnktag/ABC/abc94.vert
     134984367,11934:S/J/1994/abc94/166:cnktag/ABC/abc94.vert
     1351013021,1132:S/J/1995/abc95/179:cnktag/ABC/abc95.vert
     136}}}
     137Formát tohoto souboru je následující:
     138
     139{{{
     140offset,delka:identifikator:vertikal
     141}}}
     142Přičemž ''offset'' je číslo udávající, na kterém bytu v souboru ''vertikal'' (cesta k souboru vertikal neobsahuje standardní prefix /nlp/corpora/vertical) začíná dokument se jménem ''identifikator''. Z tohoto místa se pak načte ''delka'' bytu, což je délka dokumentu v bytech. To se dejě pomocí funkcí open, seek, read a close. Údaj ''identifikator''  je de facto nadbytečný a slouží jen pro kontrolu. Může se totiž stát,  že někdo pozměnil strukturu vertikálu a v metainformacích zapomněl  aktualizovat položky offset a delka a tím pádem získaný text neodpovídá  hranicím požadovaného dokumentu.
     143
     144Proud  vertikálního textu vytvoříme programem list2vert, který očekává na  vstupu seznam v uvedeném formátu a pomocí fcí open, seek, read a close  produkuje vertikální text. Pokud bude seznam setříděn podle vertikálu  (který někdy obsahuje stovky dokumentů), tak běh programu bude  rychlejší, protože nebude docházet k nadbytečným voláním open a close na  jeden vertikál.
     145
     146{{{
     147$ cat source                                                     #produkuje seznam dokumentu   
     148| sort -t: -k3,3                                                #tridi seznam podle vertikalu
     149| list2vert                                                       #produkuje vertikalni text
     150}}}
     151Pro každý korpus je vytvořen Makefile, který obsahuje tyto nebo jim podobné řádky.