wiki:cs/JakVytvoritKorpus2

Version 2 (modified by xkocinc, 6 years ago) (diff)

--

Jak vytvořit korpus 2


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.

Co je cílem

Naší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ů:

  • 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ů.
  • Vybudování binárních souborů korpusu z vertikálního textu.

Nastavení parametrů pro jednotlivý korpus - corpus registry.

manatee:
Soubor corpus registry najdeme v adresáři /nlp/corpora/manatee/registry/ a obvykle je třeba generovat ručně. cqp:

Soubor 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.

Nastavení parametrů pro jednotlivého uživatele.

manatee:
Vše podstatné je v tomto úryvku z mailu:

podle toho, jak spoustis server:
* lokalne (v polozce server je `|manager ....' -- ta trubka na zacatku
  je dulezita), tak to napises jako parametr toho serveru, treba:
          |manager "desam mini" 2>errlog
* pres internet (v plozce server je `aurora.fi.muni.cz'), tak to udelas
  v konfiguraci v /home/corpadm/users, pripadne /nlp/corpora/manatee/corplists

Jo, asi jsem ti to neposlal (ze se tak blbe ptas :-), vytvoril jsem
uzivatele corpadm, pod kterym ten server bezi a v jehoz adresari je
konfigurace. V souboru users ma kazdy uzivatel vypsany korpusy nebo tam
je neco jako `@jmeno' a pak je seznam v souboru /nlp/corpora/manatee/corplists/jmeno

Jinak se to da vycist v ~corpadm/runm.pl, coz jsi mohl zjistit z
/etc/inetd.conf, ... , proste kdo hleda, najde :-).

cqp:
Vše podstatné je v tomto úryvku z mailu:

posilam navod, jak v manazeru cqp a klientovi gcqp vytvorit korpusy. 
V podstate vsechno jsem udelal, staci kdyz do prislusneho adresare
nakopirujes vertikaly a jinde das make corpus, ale radsi to popisu.
-----------------------------------------------------------------------
1.  V /home/pary/src/cqsd/cqsd.users jsem pridal uzivatele emasters
(s prazdnym heslem)

emasters:::0:0:emasters:
-----------------------------------------------------------------------
2. Tento uzivatel ma v souboru /nlp/corpora/cqp/corplists/emasters 
napsano k jakym korpusum pristupuje:

$ cat /nlp/corpora/cqp/corplists/emasters

korpus1 /nlp/corpora/cqp/emasters/korpus1/registry
korpus2 /nlp/corpora/cqp/emasters/korpus2/registry


Jsou tam dva korpusy - pokud by bylo vic skupin tak analogii
se prida dalsi. Ale je mozne, ze lepsi bude mit korpus jen jeden. 

-----------------------------------------------------------------------
3. Vytvoril jsem adresare, kde budou vertikaly k temto korpusum:

$ cd  /nlp/corpora/vertical/emasters/
$ mkdir korpus1/  korpus2/

a do souboru /nlp/corpora/cqp/emasters/korpus1/source
jsem tento adresar zadal:

$ cat /nlp/corpora/cqp/emasters/korpus1/source
/nlp/corpora/vertical/emasters/korpus1/

obdobne pro korpus2

-----------------------------------------------------------------------
4. Ted staci zadat pro kazdy korpus

$ cd /nlp/corpora/cqp/emasters/korpus1
$ make clean
$ make corpus

To projde rekurzivne adresar s vertikaly (ktere jsi tam predtim nakopcil)
a vytvori z nej korpus.

-----------------------------------------------------------------------
5. Ted je vse priprave pro to, abys zadal:

$ gcqp&

a jako uzivatele dal emasters bez hesla. 
-----------------------------------------------------------------------

Poznamka: v Makefile jsou napsany znacky, ktere korpus pouziva,
seznam uprav dle potreby:

$ grep 'STRUCTURES' /nlp/corpora/cqp/emasters/korpus1/Makefile

STRUCTURES = p g
VAL_STRUCTURES = doc

-----------------------------------------------------------------------

Vybudování binárních souborů korpusu z vertikálního textu.

Kaž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.

cqp:
cat vertikal.vert | encode nejake_parametry_pro_encode

manatee:
cat vertikal.vert | encodevert nejake_parametry_pro_encodevert

Je 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ů).

Vytvoření proudu vertikálního textu ze seznamu adresářů.

Mějme soubor source se seznamem adresářů:

$ cat source
/nlp/corpora/vertical/eso/
/nlp/corpora/vertical/i047_2000/
/nlp/corpora/vertical/i047_1999/

Proud 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ů.

$ cat source							#produkuje seznam adresaru                              
| xargs --replace=dirs find dirs -type f -name "*.vert"		#produkuje seznam souboru
| xargs cat							#produkuje vertikalni text
| grep -v -E '^<(\?xml|!DOCTYPE|vertical|\/vertical)'		#cisti vertikalni text

Pro 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.

Vytvoření proudu vertikálního textu ze seznamu dokumentů.

Mějme soubor source se seznamem dokumentů, takový soubor většinou získáme z metainformací, když chceme vytvořit specifický korpus.

$ cat source
975573,8794:S/J/1994/abc94/165:cnktag/ABC/abc94.vert
984367,11934:S/J/1994/abc94/166:cnktag/ABC/abc94.vert
1013021,1132:S/J/1995/abc95/179:cnktag/ABC/abc95.vert

Formát tohoto souboru je následující:

offset,delka:identifikator:vertikal

Př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.

Proud 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.

$ cat source							#produkuje seznam dokumentu    
| sort -t: -k3,3						#tridi seznam podle vertikalu
| list2vert							#produkuje vertikalni text

Pro každý korpus je vytvořen Makefile, který obsahuje tyto nebo jim podobné řádky.