Stahování, zpracování a indexování rozsáhlých textových korpusů

Obsah

1 Popis zpracování

Zpracování je rozděleno do několika kroků. K jednotlivým krokům byly vytvořeny skripty zjednodušující práci pomocí jednotných argumentů a umožňují zpracování provádět na jednom stroji, nebo paralelně na více strojích.

Veškeré zdrojové texty programů a skripty jsou v repozitáři corpora_processing_sw a případné chybějící závislosti (knihovny) jsou v /mnt/minerva1/nlp/projects/corpproc. Hledáte-li jinde, najdete obvykle staré nefunkční verze!

1.1 Distribuce programů / dat ke zpracování

Skript umožňuje přerozdělit data (soubory) mezi dané servery. Data to rozděluje na základě jejich velikosti tak, aby všechny servery dostaly podobné množství dat. Přepínačem -a se přerozdělování vypne a každý soubor bude nakopírován na všechny servery. To je vhodné především k distribuci programů pro zpracování.

 ./processing_steps/1/distribute.py
        

Usage:

 ./distribute.py [-i INPUT_DIRECTORY] -o OUTPUT_DIRECTORY -s SERVER_LIST [-a] [-e ERRORS_LOG_FILE]

 -i   --input     vstupní adresář/soubor určený distribuci (pokud není nastaven jsou názvy souborů očekávány na stdin oddělené '\n')
 -o   --output    výstupní adresář na cílovém serveru, pokud adresář neexistuje, skript se jej pokusí vytvořit
 -a   --all       každý soubor bude zkopírován na všechny servery (vhodné pro skripty/programy)
 -s   --servers   soubor se seznamem serverů, kde na každém řádku je hostname jednoho stroje, pokud řádek obsahuje tabulátor, 
                  je brán jako oddělovač a jako hostname se bere jen text před ním (kvůli kompatibilitě tohoto konfiguračního
                  souboru se skripty, u kterých je možné specifikovat počet vláken pro konkrétní stroj, tam je možný formát: 
                  HOSTNAME \t THREADS pro každý řádek)                   
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
        

Například:

 ./distribute.py -i ~/data_to_distribution/ -o /mnt/data/project/data/ -s ~/servers
 # Všechny soubory z adresáře ~/data_to_distribution/ přerozdelí mezi servery, určenými souborem ~/servers.
 # Výstupním adresářem je /mnt/data/project/data/. Pokud adresář data na některém stroji neexistuje, pokusí se ho skript vytvořit.

 ./distribute.py -i ~/NLP-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar -o /mnt/data/commoncrawl/software/ -s ~/servers -a
 # Zkopíruje program NLP-slave na servery, určené souborem ~/servers.
 # Výstupním adresářem je /mnt/data/commoncrawl/software/. Pokud adresář software na některém stroji neexistuje, pokusí se ho skript vytvořit.
        

1.1.1 Stažení dumpu Wikipedie

Pro extrakci čistého textu z Wikipedie slouží program WikiExtractor

Spouští se:

 cd /mnt/minerva1/nlp/corpora_datasets/monolingual/english/wikipedia/
 ./download_wikipedia_and_extract_html.sh 20151002
        

Skript v pracovním adresáři očekává soubor hosts.txt se seznamem serverů (1 na řádek), na kterých se má spustit

 /mnt/minerva1/nlp/corpora_datasets/monolingual/english/wikipedia/tools/WikiExtractor.py
        

Výsledkem je sada cca 100MB souborů rozdělených na uvedené servery v /mnt/data/wikipedia/enwiki-.../html_from_xml/enwiki=...

1.1.2 Stažení CommonCrawlu

Pro stažení WARC je potřeba znát označení CommonCrawlu, např. "2015-18"

 ./processing_steps/1b/download_commoncrawl/dl_warc.sh
        

stažené soubory jsou v:

 /mnt/data/commoncrawl/CC-Commoncrawl_specification/warc/
        

pomocné soubory do:

 /mnt/minerva1/nlp-2/download_commoncrawl/CC-Commoncrawl_specification/download/
        

Následně je možné vypočítat statistiku URI spuštěním:

 ./processing_steps/1b/uri_stats.sh
        

výsledek se uloží do:

 /mnt/minerva1/nlp-2/download_commoncrawl/CC-Commoncrawl_specification/uri/
        

a na jednotlivých strojích jsou data v:

 /mnt/data/commoncrawl/CC-Commoncrawl_specification/uri/
        

1.1.3 Stažení webových stránek z RSS zdroje

K získání url ze zadaného RSS zdroje slouží:

 ./processing_steps/1c/collect.py
        

Použití:

 ./collect.py [-i INPUT_FILE] [-o OUTPUT_FILE [-a]] [-d DIRECTORY|-] [-e ERRORS_LOG_FILE]
 
 -i   --input     vstupní soubor s RSS url oddělenými '\n' (pokud není nastaven jsou očekávány na stdin)
 -o   --output    výstupní soubor pro uložení vyparsovaných url (pokud není nastaven jsou tisknuty na stdout)
 -a   --append    výstupní soubor je v režimu přidávání
 -d   --dedup     deduplikace získávaných odkazů (podle shody url), volitelně může být zadána složka se soubory se seznamem již nasbíraných url, tyto url budou zahrnuty do deduplikace, v režimu -a je výstupní soubor táké zahrnut
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
        

Například:

 ./collect.py -i rss -o articles -a
 # Do souboru articles přidá url z RSS zdrojů v souboru rss
        

Pro stažení webových stránek dle zadaného seznamu url a ukložení do WARC archívu slouží:

 ./processing_steps/1c/download.py
        

Usage:

 ./download.py [-i INPUT_FILE] -o OUTPUT_FILE [-e ERRORS_LOG_FILE]
 
 -i   --input     vstupní soubor s url (pokud není nastaven jsou očekávány na stdin)
 -o   --output    výstupní soubor pro uložení warc archívu
 -r   --requsts   limit počtu požadavků za minutu na jednu doménu (výchozí 10)
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
        

Skript stránky nestahuje v pořadí podle vstupního souboru, ale, aby nedocházelo k "útokům", stahuje rovnoměrně podle domény. Zároveň je možné nastavit limit požadavků na doménu za minut. V případě že je limit vyčerpán u všech domén je stahování pozastaveno, než je limit obnoven. Limit se obnovuje každých 6s (1/10 minuty) a to na 1/10 celkového limitu.

Pokud dojde ke stahování k jakékoliv chybě (cokoliv kromě kódu 200), je celá doména vyřazena ze stahování.

Example:

 ./download.py -i articles -o today.warc.gz
 # Stáhne stránky jejichž url jsou v souboru articles do archívu today.warc.gz
        

1.2 Verticalization

Popis vertikálneho formátu

Vstupem vertikalizátoru je soubor warc.gz, ze kterého se postupně vybalují jednotlivé záznamy, vyfiltruje se z nich HTML, vyfiltrují se neanglické články a provede se tokenizace. Zpracovat lze také 1 webovou stránku v .html a Wikipedii v předzpracovaném HTML. Výsledek je uložen s příponou vert do cílového adresáře.

Nový vertikalizátor:

 ./processing_steps/2/vertikalizator/main.py
        

Přeloží se příkazem:

 make
        

Při překladu může nastat chyba s překladem justextu (aclocal.m4). V takovém případě je potřeba ve složce justextcpp/htmlcxx spustit příkazy:

 touch aclocal.m4 configure Makefile.in
 ./configure
        

Na Salomonu můžou být potřeba moduly (některé z následujících nebo jejich závislostí):

 module load OpenMPI/1.8.8-GNU-4.9.3-2.25
 module load Autoconf/2.69
 module load Automake/1.15
 module load Autotools/20150215
 module load Python/2.7.9
 module load GCC/4.9.3-binutils-2.25
        

Pokud je navíc vyžadovaný LZMA komprimovaný WARC výstup, je nutné doinstalovat modul backports.lzma:

 pip install --user backports.lzma
        

Při jeho instalaci může nastat chyba při kompilaci (na serveru není dostupná knihovna lzma), v takovém případě je nutno zavolat:

 make lzma
        

Je potřeba mít nainstalován balíček liblzma-dev:

 apt-get install -y liblzma-dev
        

Usage:

 ./main.py main.py [-h] [-i INPUT] [-o OUTPUT] [-n] [-t INPUTTYPE] -s STOPWORDS [-l LOG] [-a WARCOUTPUT] [-d]
 
 -i   --input        vstupní soubor určený k vertikalizaci (pokud není nastaveno očekává WARC na stdin)
 -o   --output       výstupní soubor, pokud není zadaný, výstup se vypisuje na stdout
 -n   --nolangdetect vypne detekci jazyka, vertikalizace je rychlejší, rozdíl minimální
 -t   --inputtype    voľba typu vstupu, ktorý má vertikalizátor očakávať, viz Vstupy vertikalizácie
 -s   --stopwords    soubor se seznamem stop slov
 -l   --log          soubor pro ukládaní logu (ladících informací). Pro výstup na stdout musí být jeho hodnota STDOUT, pro výstup na stderr musí být hodnota STDERR.
                     Ak parameter nie je prítomný, log sa ukladať ani zobrazovať nebude.
 -a   --warcoutput   cesta k výstupnému WARC archívu. Tento archív obsahuje tie záznamy z WARC achívu na vstupe, ktorých obsah nebol úplne odstránený pomocou algoritmu justext
                     alebo na základe detekcie jazyka. Ak parameter nie je prítomný, žiadny WARC výstup sa negeneruje. Parameter nemá žiadny účinok, ak je vstupom Wiki archív
                     alebo jedna webová stránka. Parameter neruší generovanie výstupu vo vertikálnom formáte, vertikalizácia má tak 2 výstupy súčasne.
                     Výstup bude komprimovaný, ak meno súboru končí príponou .gz(GZip) alebo .xz(LZMA).
 -d   --dedup        výstupný vertikál je deduplikovaný, do súboru dedup_servers.txt je nutné doplniť mená serverov, na ktorých sa majú spustiť deduplikačné procesy.
                     Po skončení vertikalizácie sa procesy deduplikácie nevynú, aby tak nenastal problém v iných procesoch vertikalizácie, ktoré ešte svoju činnosť 
                      neskončili (procesy deduplikačného servera sú zdieľané všetkými procesmi vertikalizátora)
 -m   --map          konfigurační mapa pro deduplikaci(aktuálně pouze ve větvi hash redistribution.
        

Spuštění se stdin vstupem:

Vertikalizátor je rychlejší se stdin vstupem než se vstupním souborem. Př.

 xzcat file | python main.py [-o OUTPUT] [-n] -s STOPWORDS [-l LOG] [-a WARCOUTPU] [-d]
        

1.2.1 Warcreader

Nově se warcreader nachází ve složce vertikalizátoru.

Při přechodu na novější verzi vertikalizátoru, může být nutné přeinstalovat balík warcreader, jehož vývoj probíhá zároveň s vývojem vertikalizéru. Je však zveřejněný na Python Package Indexu jako samostatná knihovna. Tento balík se instaluje do domovského adresáře uživatele při použití příkazu make a nemůže být odstraněný nebo aktualizovaný pomocí příkazu pip. Je nutné ho odstranit manuálně zavoláním:

 rm -r ~/.local/lib/pythonX.X/site-packages/warcreader*
        

kde X.X je použitá verze jazyka Python, většinou 2.7. Potom je možné nainstalovat novou verzi balíku warcreader pomocí nástroje pip:

1.2.2 Vstupy vertikalizace

Vertikalizátor umí zpracovat několik typů vstupu, parametrem -t/--inputtype mu musí být zdělen typ, možné hodnoty jsou:

Starý vertikalizátor - nepoužívat

Pro vertikalizaci slouží program NLP-slave (závislý na lokálním langdetect), jehož zdrojové kódy jsou v repozitáři v:

 ./processing_steps/2/NLP-slave
        

Tento program předpokládá na vstupu (jako první parametr) soubor warc.gz, ze kterého postupně vybaluje jednotlivé záznamy, vyfiltruje z nich HTML, vyfiltruje neanglické články a provede tokenizaci. Zpracovat lze také 1 webovou stránku v .html a Wikipedii v předzpracovaném plaintextu či HTML. Výsledek je uložen s příponou vert do cílového adresáře.

Přeloží se příkazem:

 mvn clean compile assembly:single
        

Použití starého vertikalizátoru:

 java -jar package [opts] input_file.html output_dir file_URI [langdetect_profiles]
 java -jar package [opts] input_file.txt output_dir [langdetect_profiles]
 java -jar package [opts] input_file-warc.gz output_dir [langdetect_profiles]
 java -jar package [opts] input_file output_dir [langdetect_profiles]
        

Skript pro paralelní spuštění na více serverech:

 ./processing_steps/2/verticalize.py
        

Použití:

 ./verticalize.py -i INPUT_DIRECTORY -o OUTPUT_DIRECTORY [-s SERVERS_FILE] [-b BINARY] [-t THREADS] [-l] [-d] [-s STOPWORDS_LIST] [-e ERRORS_LOG]
 
 -i   --input     vstupní adresář se soubory určenými k vertikalizaci
 -o   --output    výstupní adresář, pokud adresář neexistuje, skript se jej pokusí vytvořit
 -s   --servers   soubor se seznamem serverů, kde je formát: HOSTNAME '\t' THREADS '\n' (jeden řádek pro jeden stroj)
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
 -b   --binary    argument specifikující cestu k vetrikalizátoru (výchozí je ./processing_steps/2/vertikalizator/main.py)
 -t   --threads   nastavuje počet vláken (výchozí je 6, jsou-li počty vláken v souboru se seznamem serverů, mají vyšší prioritu)
 -l   --no-lang   vypne detekci jazyka
 -d   --debug     vertikalizátor tiskne ladící informace
 -w   --stopwords soubor se seznamem stop slov (výchozí je ./processing_steps/2/vertikalizator/stoplists/English.txt)
        

Například:

 ./verticalize.py -i /mnt/data/commoncrawl/CC-2015-18/warc/ -o /mnt/data/commoncrawl/CC-2015-18/vert/ -s ~/servers -b /mnt/data/commoncrawl/software/NLP-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar
 # Data z adresáře /mnt/data/project/CC-2015-18/warc/ vertikalizuje do adresáře /mnt/data/commoncrawl/CC-2015-18/vert/
 # Vetrikalizaci provede na všech serverech daných souborem -s ~/servers
 # Použije k tomu program /mnt/data/commoncrawl/software/NLP-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar, který musí být na všech strojích
        

1.2.3 Pomocné skripty pro profilování vertikalizátoru

Všechny skripty se nacházejí v profiling ve složce vertikalizátoru

files_compare.py Jedná se o skript, který je určen pro porovnávání obsahu dvou souborů. Skript očekává dva argumenty, jedná se o cesty ke vstupním souborům.

Spuštění skriptu může být například:

 python files_compare.py testregularpuvodni.txt testregular11.vert
        

profiling.py

Skript slouží pro usnadnění profilování. Funguje na principu, že se do složky jako první nahrají všechny varianty, které se mají profilovat. Pokud se zde nachází více souborů stejného typu jako například tokenizer.py, tak se na konec před koncovku připíše - a zbytek textu.

Example:

 tokenizer-2.py or tokenizer-slouceniVyrazu.py
        

Jako první vertikalizátor spustí neupravenou verzi vertikalizátoru, kvůli porovnávání výsledku profilování. Poté skript bere jednotlivé soubory, přepíše soubor pro otestování a spustí se vertikalizátor. Až se vertikalizátor ukončí, tak se ze složky reset vezme původní soubor a ten přepíše do vertikalizátoru (Ošetření, kdyby se testoval jako první verticalizate.py a poté tokenizer.py, aby se nepoužíval stále ten upravený verticalizate.py).

Požadavky: Vytvořenou složku reset, kde jsou uloženy původní soubory. Složku profiling, kde se budou ukládat výsledky profilování. Skript i složky musí být ve složce vertikalizator.

Skript potřebuje dva argumenty. První je cesta k souboru, který slouží jako vstupní soubor pro vertikalizátor. Druhý je typ souboru.

Spuštění:

 python profiling.py /mnt/data/commoncrawl/CC-2016-40/warc/1474738659833.43_20160924173739-00094-warc.xz warc
        

profiling_results.py

Poté co profilování doběhne je potřeba zobrazit výsledky. K tomu slouží skript profiling_results.py. Ten očekává tři argumenty. Prvním argumentem je složka, kde se výsledky nachází. Druhým argumentem je podle čeho se mají výsledky seřadit. A třetím argumentem je kolik položek každého souboru se má zobrazit.

Run example:

 python profiling_result.py profiling tottime 20
        

Nejdůležitější možnosti seřazení jsou:

1.3 Deduplikace

Detailní dokumentace deduplikace je umístěna zde.

K deduplikci slouží programy dedup a server dostupné přeložením pomocí Makefilu ve složce:

 processing_steps/3/dedup/
 in repository corpproc_dedup
        

Parametry pro spouštění těchto programů jsou následující:

 ./server -m=~/hashmap.conf [-i=INPUT_FILE] [-o=OUTPUT_FILE [-d]] [-s=STRUCT_SIZE] [-p=PORT] [-j=JOURNAL_FILE] [-k] [a] [-P=RPORT]

 -i   --input    vstupní soubor 
 -o   --output   výstupní soubor
 -h   --help     vypíše zoznam spúšťacích argumentov a ich použitie
 -p   --port     port serveru (výchozí je 1234)
 -s   --size     změna velikosti struktury pro uložení hashů (výchozí velikost je 300,000,000)
 -d   --debug    zároveň s výstupním souborem je generován soubor s debug výpisy
 -j   --journal  obnovenie hashov zo zálohy (použiť v kombinácii s -j u klienta)
 -k   --keep     ponechanie záložného súboru aj po úspešnom uložení hashov do výstupného súboru
 -m   --map      serializovaná mapa s rozložením hashov na serveroch
 -a   --altered  skontroluje mapu(--map) a odošle cudzie bloky novým vlastníkom. Nutné pri zmene mapy!
 -P   --rport    port služby pre migráciu hashov (predvolený je -p + 1)
        

Server běží do doby než je "killnut". Reakcí na signály SIGHUP a SIGTERM je uložení hashů do výstupního souboru (pokud je zadána cesta).

 ./dedup -i=INPUT_DIR -o=OUTPUT_DIR -s=SERVERS_STRING [-p=PORT] [-t=THREADS] [-n] [-d] [-wl] [-uf=FILTER_FILE]

 -i   --input       vstupní adresář se soubory určenými k deduplikaci
 -o   --output      výstupní adresář, pokud adresář neexistuje, skript se jej pokusí vytvořit
 -p   --port        port serveru (výchozí je 1234)
 -t   --threads     nastavuje počet vláken (výchozí je 6)
 -n   --near        použije algoritmus "nearDedup"
 -d   --debug       ke každému výstupnímu souboru .dedup je zároveň generován soubor .dedup.debug
                    obsahující debug výpisy
 -wl  --wikilinks   deduplikace formátu Wikilinks
 -dr  --dropped     ke každému výstupnímu souboru .dedup je generován soubor .dedup.dropped
                    obsahující odstraněné duplicity
 -f   --feedback    záznamy v souboru .dedup.dropped obsahující referenci na záznamy
                    kvůli kterým byly vyloučeny (viz. níže) 
 -dd  --droppeddoc  ku každému výstupnému súboru *.dedup je vytvorený súbor .dedup.dd
                    obsahujúci zoznam URL adries
                          kompletne vylúčených dokumentov
 -j   --journal     pokračovanie v deduplikácii po páde - spracované dokumenty budú
                    preskočené, rozpracované budú dokončené
                    - používa sa v kombinácii s -j u servera
 -h   --help        vypíše zoznam vstupných argumentov
 -m   --map       konfiguračná mapa rozloženia hashov
        

Pro jejich jednodušší spouštění byly vytvořeny skripty server.py a deduplicate.py (popsány níže), které umožnují spustit deduplikaci paralelně na více strojích. Programy musí být předem rozdistribuovány na všechny použité stroje a na nich být ve stejném umístění například: /mnt/data/bin/dedup

Spuštění serverů pro deduplikaci

Skript s argumentem start nejprve spouští screeny a v nich teprve samotné servery. Zadáním argumentu stop naopak screeny ukončuje. Pokud není zadán ani start ani stop ani restart, tak skript testuje nejprve zda běží screeny a poté také servery.

 ./processing_steps/3/server.py
        

Usage:

 ./server.py [start|stop|restart|migrate] -m MAP_FILE [-i INPUT_FILE] [-o OUTPUT_FILE [-d]] [-a] [-t THREADS] [-p PORT] [-e ERRORS_LOG_FILE] [-b BINARY] [-d] [-j] [-k] [-r SPARSEHASH_SIZE] [-P rport]


 start             Spustí servery
 stop              Zastaví servery a počká na serializáciu hashov
 restart           Reštartuje servery
 migrate           Spustí migráciu hashov. Po ukončení migrácie zastaví servery.
 -i   --input      vstupní soubor 
 -o   --output     výstupní soubor
 -t   --threads    počet vlákien obsluhujúcich workerov (default = 384) (pozn. odstránené v hash_redistribution)
 -p   --port       port serveru (výchozí je 1234)
 -r   --resize     změna velikosti struktury pro uložení hashů (výchozí velikost je 300000000)
 -e   --errors     pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
 -b   --binary     argument specifikující cestu k deduplikačnímu serveru (výchozí je /mnt/data/commoncrawl/corpproc/bin/server)
 -d   --debug      zároveň s výstupním souborem je generován soubor s debug výpisy, povoľuje core dump
 -j   --journal    obnovenie hashov zo žurnálového súboru ( použiť v kombinácii s -j u klienta)
 -k   --keep       ponechanie záložného súboru aj po úspešnom uložení hashov do výstupného súboru 
 -v   --valgrind   Spustí server vo valgrinde - iba pre debugovanie v prípade núdze
 -P   --rport      Port služby pre migráciu hashov (predvolený je -p + 1)
 -E   --excluded   Zoznam vylúčených serverov (vygenerovaný distribučným programom) pre migráciu hashov
 -a   --altered    Povolí migráciu hashov. viď. -a pri server
 -m   --map        Mapa rozloženia hashov.
        

Poznámka k -j, --journal: pro obnovení hashů ze zálohy je potřebné uvést cestu k vstupnímu souboru, který byl před pádem serveru zadaný jako výstupní. Skript ověří, zda se u něj nenachází soubor "vstupní_soubor".backup. Pokud vstupní soubor na nějakých serverech neexistuje, bude vytvořený.

Například:

 ./server.py start -m ~/hashmap
 # Spustí screeny a v nich servery na strojích určených souborem ~/hashmap
 # Servery čekají až se připojí workery

 ./server.py -m ~/hashmap
 # Otestuje zda jsou spuštěny screeny a servery na strojích určených souborem ~/hashmap

 ./server.py stop -m ~/hashmap -E ~/excluded.list
 # Ukončí screeny a v nich spuštěné servery na strojích určených souborem ~/hashmap a ~/excluded.list

 ./server.py migrate -m ~/hashmap -E ~/excluded.list -i ~/input.hash -o ~/output.hash
 # Spustí migráciu hashov podľa distribučnej mapy. Po ukončení migrácie zastaví servery a uloží hashe.
        

Spuštění workerů pro deduplikaci

Před tím je nutné spustit servery se stejnými parametry -m a -p.

 ./processing_steps/3/deduplicate.py
        

Usage:

 ./deduplicate.py -i INPUT_DIRECTORY -o OUTPUT_DIRECTORY -w WORKERS_FILE -m MAP_FILE [-p PORT] [-e ERRORS_LOG_FILE] [-b BINARY] [-n] [-d] [-wl]

 -i  --input      vstupní adresář se soubory určenými k deduplikaci
 -o  --output     výstupní adresář, pokud adresář neexistuje, skript se jej pokusí vytvořit
 -w  --workers    soubor se seznamem workerů, kde je formát: HOSTNAME '\t' THREADS '\n' (jeden řádek pro jeden stroj)
                   (pozn. pozor na nahrádzanie tabov medzerami, nebude fungovať)
 -p  --port       port serveru (výchozí je 1234)
 -e  --errors     pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
 -b  --binary     argument specifikující cestu k deduplikačnímu programu (výchozí je /mnt/data/commoncrawl/corpproc/bin/dedup)
 -t  --threads    nastavuje počet vláken (výchozí je 6, jsou-li počty vláken v souboru se seznamem serverů, mají vyšší prioritu)
 -n  --near       použije algoritmus "nearDedup"
 -d  --debug      ke každému výstupnímu souboru .dedup je zároveň generován soubor .dedup.dropped obsahující odstraněné duplicity
                   a .dedup.debug obsahující debug výpisy
 -wl --wikilinks  deduplikace formátu Wikilinks
 -dr --dropped    ke každému výstupnímu souboru .dedup je zároveň generován soubor .dedup.dropped obsahující odstraněné duplicity
 -f  --feedback   záznamy v souboru .dedup.dropped obsahující referenci na záznamy kvůli kterým byly vyloučeny (viz. níže)
 -dd --droppeddoc Ve výstupním adresáři bude vytvořený soubor "droppedDocs.dd" obsahující seznam kompletně vyloučených dokumentů
 -j  --journal    pokračování v deduplikaci po pádu systému
                  zpracované dokumenty budou přeskočené, rozpracované budou dokončené
                  používat v kombinaci s -j na serveru
 -m --map         Mapa rozložení hashů
        

Deduplikace formátu wikilinks je implementována tak, že se počítá hash pro konkatenaci sloupců 2, 3, 5, 6, tedy musejí byt všechny sloupce stejné, aby byl řádek vyhodnocen jako duplicitní. Neardedup funguje tak, že výpočet hashů pomocí N-gramů se provádí na konkatecaci sloupců 5, 3, 6 (v tomto pořadí), dále se počítá hash 2. sloupce a aby byl rádek duplicitní, musejí oba předchozí přístupy odhalit shodu.

Například:

 ./deduplicate.py -i /mnt/data/commoncrawl/CC-2015-18/vert/ -o /mnt/data/commoncrawl/CC-2015-18/dedup/ -w ~/workers-s ~/servers 
 # Data z adresáře /mnt/data/commoncrawl/CC-2015-18/vert/ deduplikuje do adresáře /mnt/data/commoncrawl/CC-2015-18/dedup/
 # Deduplikace probíhá na strojích specifikovaných v souboru ~/workers
 # Očekává, že na strojích určených souborem ~/hashmap je spuštěn server
        

1.3.1 Deduplikace pro Salomon

Jediný tento krok je pro Salomon jiný, protože se jedná o distribuovaný výpočet. Ve standardním provedení se komunikuje přes sokety standardním TCP/IP. Na Salomonu to však není možné (InfiniBand), proto je použita knihovna mpi. Zdrojové kódy jsou v

 /mnt/minerva1/nlp/projects/corpproc/corpora_processing_sw/processing_steps/salomon/mpidedup
        

Doporu4uje se používat výhradně modul OpenMPI/1.8.8-GNU-4.9.3-2.25 kvůli problémům s kompatibilitou s některými verzemi.

Překlad:

 module load OpenMPI/1.8.8-GNU-4.9.3-2.25
 make
        

Spuštění na Salomonu

Deduplikaci je nejjednodušší spustit pomocí skriptu v5/start.sh, spouštěcí parametry se nastavují ve skruptu, doporučuje se použít 4 uzly:

 bash start.sh dedup 4 qexp
        

Parameters:

  -h --hash    - relativní počet serverů držících jednotlivé podprostory celkového hashovacího prostoru
 -w --work    - relativní počet worker serverů, které provádějí vlastní deduplikaci
 -i --input   - vstupní adresář se soubory určenými k deduplikaci
 -o --output  - výstupní adresář
 -l --load    - volitelný adresář odkud se nahrají existující hashe (pro inkrementální deduplikaci - musí se to samozřejmě
     pustit stejným způsobem (infrastruktura, počet workerů a serverů s hashovacím prostorem), jakým byly hashe dříve uloženy)
 -s --store   - volitelný adresář pro uložení hashů
 -r --resize  - volitelný parametr pro změnu velikosti struktury pro uložení hashů
 -d --debug   - zapne ladící režim (generuje logy)
 -p --dropped - ku každému vertikálu generuje súbor *.dropped s odstránenými paragrafmi
 -c --droppeddoc - ku každému vertikálu generuje súbor *.dd so zoznamom spracovaných dokumentov a ich stavom.
 -n --near    - přepne na neardedup algoritmus
 -j --journal - zohlední zpracované soubory a žurnály (neuložené hashe a nedokončené soubory)
              - pokusí se zotavit po pádu a pokračovat v deduplikaci
 -m --map     - načítá konfigurační mapu rozložení hashů na serverech KNOT a použije toto rozložení 
        

Čo robiť pri páde?

Preskúmať čo pád spôsobilo (súbory dedup.eXXXXX and dedup.oXXXXX) a spustiť znova.

Pri spúšťaní cez v5/start.sh, ktorý po nastavení premenných prostredia volá v5/dedup.sh je prednastavený parameter -j, ktorý sa postará o pokračovanie v rozpracovanej deduplikácii nezávisle od toho, či bola ukončená správne alebo nie. Treba mať na pamäti, že použitie parametra -j spôsobí, že už spracované vertikály sa preskočia, teda ak požadujete nové/čisté spustenie, je dôležité vymazať obsah výstupného priečinka s deduplikovanými vertikálmi. Režim obnovy je možné vypnúť v súbore v5/dedup.sh.

Ako presne funguje režim obnovy(-j)?

Spustenie na serveroch KNOT:

 mpiexec dedup -h H -w W -i ~/vert/ -o ~/dedup/ -s ~/hash/
        

Více informací zde.

1.3.1.1 Migráce hashů KNOT <-> Salomon

Hashe rozložené podľa distribučnej mapy na KNOT serveroch je možné importovať na salomon, použiť a exportovať naspäť. Slúžia na to skripty v zložke processing_steps/salomon/migration.

Import hashov:

 python3 importhashes.py [-h] [-s SERVERS] [-m MAP] FILE TARGET

 FILE       Cesta k hashmape na KNOT serveroch, napr. /tmp/dedup/server.hashes
 TARGET     Cieľový adresár na salomone, napr. /scratch/work/user/$(whoami)/deduphashes
 -h --help  Vypíše tieto informácie
 -s SERVERS Cesta k súboru so zoznamom serverom na import
            1 hostname na riadok (bez .fit.vutbr.cz), napr. athena5
 -m MAP     Cesta k distribučnej mape, alternatíva ku -s
            zoznam serverov na import vytiahne z distribučnej mapy
        

Export hashov:

 python3 exporthashes.py [-h] SOURCE TARGET

 SOURCE    Zdrojový adresár napr. /scratch/work/user/$(whoami)/deduphashes
 TARGET    Cieľový súbor na serveroch KNOT, napr. tmp/dedup/dedup.hash
        

Hostname servera je zistený z mena hashmapy.

Použitie importovaných hashov na salomone

Nastaviť premennú MAP_PATH, pri spúštaní úlohy, napríklad v súbore v5/start.sh:

 MAP_PATH="/scratch/work/user/${LOGIN}/hashmap.conf"
        

Deduplikácia prispôsobí počet hashholderov počtu serverov v distribučnej mape. Teda ak distribučná mapa obsahuje 46 serverov KNOT, tak je potrebných minimálne 47 jadier (46 hashholderov a 1 worker), optimálne aspoň dvojnásobok. Premenné NUM_HASHES a NUM_WORKERS sú v tomto prípade ignorované.

1.4 Tagging

Tagging se provádí programem TT-slave (závislý na /opt/TreeTagger), který lze najít v:

 ./processing_steps/4/TT-slave
        

Přeloží se příkazem:

 mvn clean compile assembly:single
        

Použití:

 java -jar package [opts] input_file output_dir [treetagger.home]
        

Skript pro paralelní spuštění na více serverech:

 ./processing_steps/4/tag.py
        

Použití:

 ./tag.py -i INPUT_DIRECTORY -o OUTPUT_DIRECTORY [-s SERVERS_FILE] [-e ERRORS_LOG_FILE] [-b BINARY] [-t THREADS] [-d] [-u]
 
 -i   --input     vstupní adresář se soubory určenými k tagování
 -o   --output    výstupní adresář, pokud adresář neexistuje, skript se jej pokusí vytvořit
 -s   --servers   soubor se seznamem serverů, kde je formát: HOSTNAME '\t' THREADS '\n' (jeden řádek pro jeden stroj)
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
 -b   --binary    argument specifikující cestu k tagovacímu .jar programu (výchozí je ./processing_steps/4/TT-slave/target/TT-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar)
 -t   --threads   nastavuje počet vláken (výchozí je 6, jsou-li počty vláken v souboru se seznamem serverů, mají vyšší prioritu)
 -d   --debug     ladící výpisy
 -u   --uri       zapne odstraňovaní URI z odkazů
        

Například:

 ./tag.py -i /mnt/data/commoncrawl/CC-2015-18/dedup/ -o /mnt/data/commoncrawl/CC-2015-18/dedup/tagged/ -s ~/servers
 # taguje soubory ze složky /mnt/data/commoncrawl/CC-2015-18/dedup/ a uloží do
 # složky /mnt/data/commoncrawl/CC-2015-18/dedup/tagged/ na strojích určených souborem ~/servers
        

1.5 Parsing

Parsing se provádí upraveným MDParserem, který lze nalézt v:

 ./processing_steps/5/MDP-package/MDP-1.0
        

Přeloží se příkazem:

 ant make-mdp
        

Použití:

 java -jar package [opts] input_file output_dir [path_to_props]
        

Důležité soubory, pokud by se něco měnilo:

 ./processing_steps/5/MDP-package/MDP-1.0/src/de/dfki/lt/mdparser/test/MDParser.java
 ./processing_steps/5/MDP-package/MDP-1.0/src/de/dfki/lt/mdparser/outputformat/ConllOutput.java
        

Skript pro paralelní spuštění na více serverech:

 ./processing_steps/5/parse.py
        

Použití:

 ./parse.py -i INPUT_DIRECTORY -o OUTPUT_DIRECTORY [-s SERVERS_FILE] [-e ERRORS_LOG_FILE] [-b BINARY] [-t THREADS] [-u] [-p XML_FILE]
 
 -i   --input     vstupní adresář se soubory určenými k parsování
 -o   --output    výstupní adresář, pokud adresář neexistuje, skript se jej pokusí vytvořit
 -s   --servers   soubor se seznamem serverů, kde je formát: HOSTNAME '\t' THREADS '\n' (jeden řádek pro jeden stroj)
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
 -b   --binary    argument specifikující cestu k parsovacímu .jar programu (výchozí je ./processing_steps/5/MDP-package/MDP-1.0/build/jar/mdp.jar)
 -t   --threads   nastavuje počet vláken (výchozí je 6, jsou-li počty vláken v souboru se seznamem serverů, mají vyšší prioritu)
 -u   --uri       zapne odstraňovaní URI z odkazů 
 -p   --props     Cesta k .xml súboru s parametrami programu (výchozí je ./processing_steps/5/MDP-package/MDP-1.0/resources/props/propsKNOT.xml)
        

Například:

 ./parse.py -i /mnt/data/commoncrawl/CC-2015-18/tagged/ -o /mnt/data/commoncrawl/CC-2015-18/parsed/ -s ~/servers
 # parsuje soubory ze složky /mnt/data/commoncrawl/CC-2015-18/tagged/ do 
 # složky /mnt/data/commoncrawl/CC-2015-18/parsed/ na strojích určených souborem ~/servers

 ./parse.py -i /mnt/data/commoncrawl/CC-2015-18/tagged/ -o /mnt/data/commoncrawl/CC-2015-18/parsed/ -s ~/servers \
  -p ./processing_steps/5/MDP-package/MDP-1.0/resources/props/propsKNOT.xml
 # parsuje soubory ze složky /mnt/data/commoncrawl/CC-2015-18/tagged/ do 
 # složky /mnt/data/commoncrawl/CC-2015-18/parsed/ na strojích určených souborem ~/servers
 # zároveň MDParseru předá konfigurační soubor propsKNOT.xml (musí být dostupný na všech strojích kde spouštíme)
        

1.6 SEC (NER)

Pro rozpoznání pojmenovaných entit se používá SEC (viz SEC). Klienta sec.py lze paralelně na více serverech spustit pomocí:

 ./processing_steps/6/ner.py
        

Použití:

 ./ner.py -i INPUT_DIRECTORY -o OUTPUT_DIRECTORY [-s SERVERS_FILE] [-e ERRORS_LOG_FILE] [-b BINARY]

 -i   --input     vstupní adresář 
 -o   --output    výstupní adresář
 -s   --servers   soubor se seznamem serverů, kde na každém řádku je hostname jednoho stroje, pokud řádek obsahuje tabulátor, 
                  je brán jako oddělovač a jako hostname se bere jen text před ním (kvůli kompatibilitě tohoto konfiguračního souboru se skripty, 
                  u kterých je možné specifikovat počet vláken pro konkrétní stroj, tam je možný formát: HOSTNAME \t THREADS pro každý řádek)
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
 -b   --binary    změna cesty k SEC klientovi (výchozí je /var/secapi/SEC_API/sec.py)
        

Například:

 ./ner.py -i /mnt/data/commoncrawl/CC-2015-18/parsed/ -o /mnt/data/commoncrawl/CC-2015-18/secresult/ -s ~/servers
 # zpracovává soubory ze složky /mnt/data/commoncrawl/CC-2015-18/parsed/ do 
 # složky /mnt/data/commoncrawl/CC-2015-18/secresult/ na strojích určených souborem ~/servers
        

Příklad konfigurace SEC s mapováním vstupního vertikálu na výstupní, jenž anotuje vertikál do formátu MG4J

 {
    "annotate_vertical": {
        "annotation_format": "mg4j",
        "vert_in_cols": [
           "position", "token", "postag", "lemma", "parabspos", "function", "partoken", "parpostag", "parlemma", "parrelpos", "link", "length"
        ],
        "vert_out_cols": [
           "position", "token", "postag", "lemma", "parabspos", "function", "partoken", "parpostag", "parlemma", "parrelpos", "link", "length"
        ]
    }
        

1.7 Indexace MG4J

Intro do MG4J: http://www.dis.uniroma1.it/~fazzone/mg4j-intro.pdf

Zdrojové soubory programu určeného pro sémantické indexování se nacházejí v adresáři:

 ./processing_steps/7/corpproc
        

Přeloží se příkazem:

 mvn package
        

Skript pro paralelní spuštění na více serverech: (pozor, zatím nefunguje s novým serverem)

Skript spouští indexaci tak, že vytvoří 6 shardů, ty naplní a z nich vytvoří kolekce a nad nimi spustí indexaci. K tomu je potřeba zadat argument start. Pokud není zadán, bude vypsán stav jednotlivých screenů a stav programů v nich. Argumentem stop budou screeny ukončeny.

 ./processing_steps/7/index.py
        

Použití:

 ./index.py [start|stop] -i INPUT_DIRECTORY -o OUTPUT_DIRECTORY [-s SERVERS_FILE] [-e ERRORS_LOG_FILE] [-b BINARY]
 
 -i   --input     vstupní adresář 
 -o   --output    výstupní adresář
 -s   --servers   soubor se seznamem serverů, kde na každém řádku je hostname jednoho stroje, pokud řádek obsahuje tabulátor, 
                  je brán jako oddělovač a jako hostname se bere jen text před ním (kvůli kompatibilitě tohoto konfiguračního souboru se skripty,
                  u kterých je možné specifikovat počet vláken pro konkrétní stroj, tam je možný formát: HOSTNAME \t THREADS pro každý řádek)
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
 -b   --binary    cesta do složky obsahující .jar soubory (výhozí je /mnt/data/wikipedia/scripts/mg4j/)
        

Například:

 ./index.py -s ~/servers
 # zobrazí stav spuštění screenů a programu v nich na všech serverech ze souboru ~/servers

 ./index.py -i /mnt/data/commoncrawl/CC-2015-18/secresult/ -o /mnt/data/indexes/CC-2015-18/ -s ~/servers start
 # spustí indexaci na zvolených serverech

 ./index.py -s ~/servers stop
 # ukončí screeny a tím i procesy v nich na všech serverech ze souboru ~/servers
        

Sloupce:

 https://docs.google.com/spreadsheets/d/1S4sJ00akQqFTEKyGaVaC3XsCYDHh1xhaLtk58Di68Kk/edit#gid=0
        

Pozn.: Zatím není jasné, jestli mají být speciální znaky XML ve sloupcích escapované. Současná implementace SEC je neescapuje, resp. případné escapování odstraní. tagMG4JMultiproc.py je také neescapuje, ale escapování, které je na vstupu (pouze částečné - pravděpodobně jen některé sloupce) ponechá.

Pokud se sloupce změní, je třeba změnit následující parametry:

1.8 Daemony odpovídající na dotazy (servery běžící nad indexy)

Daemon vyžaduje soubor .collection ve složce s indexem, nový indexer ho vytváří automaticky. Je možné ale použít i indexy vytvořené starým indexerem, tam se soubor .collection automaticky převede do nového formátu. Při přesunu indexu nebo datových souborů do nového umístění stačí pouze změnit cesty k datovým souborům v souboru .collection - jedná se pouze o jednoduchý JSON. (Ve staré verzi by bylo nutné data přeindexovat.)

Spuštění pomocí následujících příkazů:

 cd /mnt/data/indexes/CC-2015-18/final
 java -jar processing_steps/7/mg4j/corpproc-1.0-SNAPSHOT-jar-with-dependencies.jar serve /mnt/data/indexes/CC-2015-18/final
        

Skript pro paralelní spuštění na více serverech: (pozor, zatím nepracuje s novým serverem)

Spouští daemony odpovídající na dotazy. Spouštění probíhá ve screenech a musí být zadán parametr start. Bez parametru vypíše stav screenů a daemonů. Parametr stop ukončí screeny.

 ./processing_steps/7/daemon.py
        

Použití:

 ./daemon.py [start|stop|restart] -i INPUT_DIRECTORY [-s SERVERS_FILE] [-e ERRORS_LOG_FILE] [-b BINARY]
 
 -i   --input     vstupní adresář (automaticky přidává na konec cesty /final/)
 -p   --port      port (defaut is 12000)
 -s   --servers   soubor se seznamem serverů, kde na každém řádku je hostname jednoho stroje, pokud řádek obsahuje tabulátor, 
                  je brán jako oddělovač a jako hostname se bere jen text před ním (kvůli kompatibilitě tohoto konfiguračního souboru se skripty, 
                  u kterých je možné specifikovat počet vláken pro konkrétní stroj, tam je možný formát: HOSTNAME \t THREADS pro každý řádek)
 -e   --errors    pokud je nastaven jsou chyby logovány do tohoto souboru s aktuálním datem a časem
 -b   --binary    cesta do složky obsahující .jar soubory (výhozí je /mnt/data/wikipedia/scripts/mg4j/)
        

Například:

 ./daemon.py -i /mnt/data/indexes/CC-2015-18/final -s ~/servers start
 # spustí screeny a v nich daemon nad kolekcemi ve složce /mnt/data/indexes/CC-2015-18/final
 # na strojích v souboru ~/servers

 ./daemon.py -s ~/servers
 # zobrazí stav spuštěných screenů a daemonů na strojích v souboru ~/servers

 ./daemon.py -s ~/servers stop
 # ukončí screeny na strojích v souboru ~/servers
        

1.9 Commandlinový dotazovač

Zdrojové soubory programu jsou v adresáři:

 ./processing_steps/8a/mg4jquery
        

Lze je přeložit příkazem:

 JAVA_HOME=/usr/lib/jvm/java-8-oracle/; mvn clean compile assembly:single
        

Příklady spuštění:

 JAVA_HOME=/usr/lib/jvm/java-8-oracle/; java -jar mg4jquery-0.0.1-SNAPSHOT-jar-with-dependencies.jar -h ../../servers.txt -m ../src/main/java/mg4jquery/mapping.xml -s ../src/main/java/mg4jquery/config.xml  -q "\"was killed\""
 JAVA_HOME=/usr/lib/jvm/java-8-oracle/; java -jar mg4jquery-0.0.1-SNAPSHOT-jar-with-dependencies.jar -h ../../servers.txt -m ../src/main/java/mg4jquery/mapping.xml -s ../src/main/java/mg4jquery/config.xml  -q "1:nertag:person < 2:nertag:person" -c "1.nerid != 2.nerid"
        

Tohle by například vrátilo dokumenty, kde jsou alespoň dva různí lidé. Soubor se servery na očekává na každém řádku adresu serveru s portem, např.:

 knot01.fit.vutbr.cz:12000
        

1.10 Webové GUI

Skript na prípravu:

 ./prepare_webGUI.py
        

Použitie:

 python ./prepare_webGUI.py -po PORT -pa PATH -n NAME [-a] [-e ERRORS_LOG_FILE]
        

Napríklad:

 python ./prepare_webGUI.py -po 9094 -pa ./src/main/webapp/WEB-INF/ -n users -a
 # nainštaluje potrebné artefakty, preloží zdrojové súbory a pripraví DB v adresári ./src/main/webapp/WEB-INF/ s náznom mem:users na porte 9094
        

Spuštění na portu 8086:

 mvn jetty:run -Djetty.port=8086
        

Ukončenie:

 ./stop_webGUI.py
        

Použitie:

 python ./stop_webGUI.py
 # potrebné spustiť vždy pri ukončovaní webového GUI
        

V podadresáři maven_deps/src jsou obsaženy i zdroje vlastní gwt komponenty pro zobrazení dynamických tooltipů. Pro úspěšné navrácení výsledků dotazu ze serveru je nutné v nastavit v možnostech adresy těchto serverů (v klasickém formátu doménové_jméno_serveru:port). Dále lze nastavit počet výsledků na stránku, chování info oken (dynamické - po odjetí kurzoru myši z entity se info okno skryje, statické - zůstane viditelné, dokud uživatel nenajede kurzorem nad jinou entitu, či jiným způsobem nezmění stav aplikace) a typ zobrazení (defaultní je corpus based, ale lze zapnout i document based).

1.10.1 Dotazování

Probíhá podobným způsobem, jako v MG4J, sémantický index automaticky přemapuje dotazy do stejného indexu, není tedy třeba psát:

 "(nertag:person{{nertag-> token}}) killed"
        

Stačí takovýto dotaz:

 "nertag:person killed"
        

Oproti mg4j je zde rozšířeí "Global constraints", které umožňuje označit token a provést na něm post-filter.

 1:nertag:person < 2:nertag:person
 1.fof != 2.fof AND 1.nerid = 2.nerid
        

Toto by například vrátilo dokumenty, kde je tatáž osoba v různých formách (nejčastěji asi jméno a koreference). V případě potřeby dotazování se na výskyty v rámci jedné věty lze použít operátor diference.

 nertag:person < nertag:person - _SENT_
 nertag:person < nertag:person - _PAR_
        

Tyto dotazy hledají dva lidi uvnitř věty, resp. odstavce. Diference znamená, že se má vzít takový úsek textu, ve kterém se daný token nevyskytuje.

1.11 Indexy

Existuje množství indexů, do kterých se dá dotazovat:

 position
 token
 tag
 lemma
 parpos
 function
 parword
 parlemma
 paroffset
 link
 length
 docuri
 lower
 nerid
 nertag
 person.name
 person.gender
 person.birthplace
 person.birthdate
 person.deathplace
 person.deathdate
 person.profession
 person.nationality
 artist.name
 artist.gender
 artist.birthplace 
 artist.birthdate
 artist.deathplace
 artist.deathdate
 artist.role
 artist.nationality
 location.name
 location.country
 artwork.name
 artwork.form
 artwork.datebegun
 artwork.datecompleted
 artwork.movement
 artwork.genre
 artwork.author
 event.name
 event.startdate
 event.enddate
 event.location
 museum.name
 museum.type
 museum.estabilished
 museum.director
 museum.location
 family.name
 family.role
 family.nationality
 family.members
 group.name
 group.role
 group.nationality
 nationality.name
 nationality.country
 date.year
 date.month
 date.day
 interval.fromyear
 interval.frommonth
 interval.fromday
 interval.toyear
 interval.tomonth
 interval.today
 form.name
 medium.name
 mythology.name
 movement.name
 genre.name
 nertype
 nerlength
        

Jen upozornění, že všechny dotazy začínající na číslo nebo obsahující hvězdičku se musí závorkovat, jinak je to syntaktická chyba dotazu.

 nertag:event ^ event.startdate: (19*)
        

Také je dobré vědět, že dotazy na atributy nějaké pojmenované entity by se měly uvádět v kombinaci s dotazem do indexu nertag (to protože se indexy překrývají z důvodu úspory místa). Pro "Global constraints" lze navíc použít dotaz "fof", což je zkratka pro "full occurrence form".

1.12 Redistribuce souborů

Skript umožňuje přerozdělit data (soubory) mezi dané servery tak, aby byla rovnoměrně využitá kapacita diskových polí (přerozděluje i z N serverů na M serverů, kde M je větší než N).

Script location:

 ./processing_steps/1/redistribute.py
        

Použití:

 ./redistribute.py -i INPUT_DIRECTORY [-o OUTPUT_DIRECTORY [-d DISTRIB_DIRECTORY]] -s SERVER_LIST [-p RELATED_PATHS] [-x EXTENSION] [-r] [-m] [-e ERRORS_LOG_FILE]
        

Výsledné rozdistribuované skripty je potřeba spustit paralelním ssh a pak odstranit.

Například:

 python /mnt/minerva1/nlp/projects/corpproc/corpora_processing_sw/processing_steps/1/redistribute.py -i /mnt/data/commoncrawl/CC-2015-14/warc -s /mnt/minerva1/nlp/projects/corpproc/corpora_processing_sw/processing_steps/servers.txt -m -o /home/idytrych/redistributionScripts -d /mnt/data/commoncrawl/software/redistributionScripts -x "-warc.gz" -p /home/idytrych/CC-2015-14-rel.txt >moves.txt
        

kde CC-2015-14-rel.txt obsahuje:

 /mnt/data/commoncrawl/CC-2015-14/uri	-warc.domain
 /mnt/data/commoncrawl/CC-2015-14/uri	-warc.domain.srt
 /mnt/data/commoncrawl/CC-2015-14/uri	-warc.netloc
 ...
        

následně se skripty ve screenu spustí:

 parallel-ssh -h servery_b9_idytrych.txt -t 0 -A -i "bash /mnt/data/commoncrawl/software/redistributionScripts/\$HOSTNAME.sh"
        

a odstraní:

 parallel-ssh -h servery_b9_idytrych.txt -t 0 -A -i "rm /mnt/data/commoncrawl/software/redistributionScripts/\$HOSTNAME.sh"
        

Na serverech, na které se nebude nic přesouvat, není žádný skript, takže to vypíše chybu.

1.13 Kde lze otestovat?

Aktuálně běží vyhledávač na serveru athena1, lze vyzkoušet např. zde.

Indexy pro tento vyhledávač běží téměř na všech serverech. Pro Wikipedii lze démony restartovat takto (může udělat jen ten, kdo je spustil):

 python daemon.py restart -i /mnt/data/indexes/wikipedia/enwiki-20150901/ -s /mnt/minerva1/nlp/projects/corpproc/serverLists/serversIW.txt -b /mnt/data/wikipedia/software/mg4j
        

Pro CC (v pořadí dle inkrementální deduplikace):

 python daemon.py restart -i /mnt/data/indexes/CC-2015-32/ -s /mnt/minerva1/nlp/projects/corpproc/serverLists/serversIC32.txt -b /mnt/data/commoncrawl/software/mg4j -p 12001
 python daemon.py restart -i /mnt/data/indexes/CC-2015-35/ -s /mnt/minerva1/nlp/projects/corpproc/serverLists/serversIC35.txt -b /mnt/data/commoncrawl/software/mg4j -p 12002
 python daemon.py restart -i /mnt/data/indexes/CC-2015-40/ -s /mnt/minerva1/nlp/projects/corpproc/serverLists/serversIC40.txt -b /mnt/data/commoncrawl/software/mg4j -p 12003
 python daemon.py restart -i /mnt/data/indexes/CC-2015-27/ -s /mnt/minerva1/nlp/projects/corpproc/serverLists/serversIC27.txt -b /mnt/data/commoncrawl/software/mg4j -p 12004
        

Indexy dělané na Salomonu potřebují symlinky - jsou tam cesty jako /scratch/work/user/idytrych/CC-2015-32/mg4j_index

1.14 Přebalení warc podle vertikálu

Skript umožňuje prebaliť vstupný warc.gz súbor podľa príslušného vertikálu. Z pôvodneho warc.gz súboru sú vybrané len dokumenty, ktoré sa nachádzaju vo vstupnom vertikále a výsledok je uložený do súboru warc.xz. Skript je možné spustiť pre jeden warc.gz súbor a konkrétny vertikál, alebo pre zložku v ktorej sa nachádzaju vstupné warc.gz súbory a zložku v ktorej sa nachádzaju vertikály. Iná kombinácia nie je možná.

Umístění skriptu:

 ./processing_steps/1/warc_from_vert/warc_from_vert.py
        

Spuštění

 -i --input      vstupný warc.gz súbor/zložka
 -v --vertical   vstupný vertikál/zložka
 -o --output     výstupna zložka, do ktorej budú uložené výsledky
        

1.15 Zabalení wikipedie do warc

Skript umožnuje zabaliť predspracovanú wikipediu do warc.gz alebo warc.xz súboru. Vstupom môže byť jeden súbor alebo zložka obsahujúca súbory na spracovanie.

Umistenie skriptu:

 ./processing_steps/1/pack_wikipedia/pack_wiki.py
        

Spustenie:

 -i --input    vstupný súbor/zložka
 -o --output   výstupná zložka
 -d --date     dátum stiahnutia wikipedie vo formáte DD-MM-YYYY
 -f --format   formát výstupného súboru. Možnosti sú gz alebo xz.
        

1.16 Monitorovaní zátěže sítě

Skript network_monitor.py, umožňuje zisťovať aktuálne vyťaženie liniek CESNET. Je možné ho spustiť ako samostatný skript, alebo použiť ako knižnicu pre python. Pri použití ako knižnice je dostupná trieda NetMonitor, ktorej je možné predať názov siete, ktorú chceme monitorovať. Instancia tejto triedy poskytuje funkciu get_status, ktorá vráti výsledok vo formáte JSON, obsahujúci počet prichadzajúcich a odchadzajúcich bitov za sekundu a prichadzajúcu a odchadzajúcu zátaž v %.

Pri spustení ako samostatného skriptu sa na terminál podľa parametrov vypíše prichadzajúca/odchadzajúca záťaž v % alebo sa vypíše najhoršia z nich.

Hodnoty sú aktualizované raz za minútu. Frekventovanejšie zisťovanie stavu nemá zmysel.

Values are refreshed every minute. More frequent refresh rate is pointless.

Cesta k skriptu:

 ./processing_steps/1/network_monitor.py
        

Spustenie:

 -i --datain    Zobrazí prichadzajúcu záťaž v %
 -o --dataout   Zobrazí odchadzajúcu zátaž v %
 -w --worst     Zobrazí najhoršiu zátaž v %
 -l --link      Linka, ktorú chceme monitorovať, bez udania sa monitoruje linka Telia  
        

1.17 Automatizované stahování CommonCrawl

Slúži pre automatické sťahovanie veľkých dát CC, pričom udržiava záťaž siete v určitom rozsahu. Pre sledovanie stavu siete sa používa vyššie zmienený skript network_monitor.py. Skriptu je zadaný spodný limit záťaže siete v %, pričom skript bude udržiavať zátaž medzi touto hodnotou a hodnotou o 10% vyššiou. Vstupom je súbor warcs.lst alebo jeho časť, v prípade sťahovania na viacerých serveroch. Pomocou parametru je možné zvoliť maximálny počet sťahovacích procesov v rozsahu 1 až 15. Skript je vhodné používať súčasne na menej serveroch s viacerými procesmi.

Bol testovaný na Salomone pri stahovaní CC-2016-44. Skript bežal na 4 serveroch s maximálnym počtom procesov 12 a dolnou hranicou siete 55%, pričom zátaž siete sa udržiavala medzi 55-65%.

Cesta k sriptu:

 ./processing_steps/1/cc_auto_download.py
        

Spustenie:

 -i --input_file   Cesta k vstupnému súboru warcs.lst alebo jeho časti
 -o --output_dir   Cesta k výstupnej zložke
 -p --process      Počet sťahovacích procesov v rozsahu 1 až 15
 -l --limit        Spodný limit pre záťaž siete v %, možné hodnoty sú od 10 do 80
        

1.18 Zimlib

Program, ktorý umožnuje extrahovať stránky wikipedie zo súboru vo formáte zim. Výstup je vo formáte predspracovanej wikipedie, ktorý sa ukladá do výstupnej zložky a je rozdelený na súbory o veľkosti približne 100 MB. Program sa nachádza v zložke:

Program location:

 /mnt/minerva1/nlp/corpora_datasets/monolingual/english/wikipedia/zim_data/zimlib-1.2
        

Preloží sa príkazom make. Po preložení vznikne spustiteľný program zimdump, ktorý sa bude nachádzať v zložke:

 /mnt/minerva1/nlp/corpora_datasets/monolingual/english/wikipedia/zim_data/zimlib-1.2/src/tools
        

Príklad spustenia programu:

 ./zimdump -a ~/output -J cs wikipedia_en_2016_05.zim

Parametre:


2 Getting it working on Salomon

  1. Naklonovat si repozitář se SEC API (minerva1.fit.vutbr.cz:/mnt/minerva1/nlp/repositories/decipher/secapi) do home na Salomonu
  2. Stáhnout KB (ve složce secapi/NER ./downloadKB.sh)
  3. Nakopírovat si do home na Salomon:
  4. Vyhledat si ve všech souborech v home (a v podsložkách) string "idytrych", případně "smrz" a upravit absolutní cesty
  5. Build mpidedup (cd mpidedup; make)
  6. Vytvořit pracovní adresáře skriptem createWorkDirs_single.sh
  7. Soubor warcDownloadServers.cfg obsahuje seznam uzlů, na kterých se bude stahovat CommonCrawl - je vhodné zkontrolovat jeho aktuálnost.
  8. Pro stahování CommonCrawl je nutné někde nějak získat soubor .s3cfg a dát si ho do home.

Pro verzi skriptů 4:

  1. Naklonovat si repozitář se SEC API (minerva1.fit.vutbr.cz:/mnt/minerva1/nlp/repositories/decipher/secapi) do home na Salomonu
  2. Stáhnout KB (ve složce secapi/NER ./downloadKB.sh)
  3. Nakopírovat si do home na Salomon:
  4. Build mpidedup (cd mpidedup; make)
  5. Vytvořit pracovní adresáře skriptem createWorkDirs_single.sh
  6. Soubor warcDownloadServers.cfg obsahuje seznam uzlů, na kterých se bude stahovat CommonCrawl - je vhodné zkontrolovat jeho aktuálnost.
  7. Pro stahování CommonCrawl je nutné někde nějak získat soubor .s3cfg a dát si ho do home.

3 Spuštění na našich serverech

3.1 Zpracování WIkipedie

Kompletní sekvence pro spuštění (zatím neotestováno):

 (označení dumpu je RRRRMMDD)
 cd 1a
 ./download_wikipedia_and_extract_html.sh RRRRMMDD
 cd ..
 
 python ./1/distribute.py -i ./2/NLP-slave/target/NLP-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar -o /mnt/data/wikipedia/software/ -s servers.txt -a
 python ./2/verticalize.py -i /mnt/data/wikipedia/enwiki-RRRRMMDD/html_from_xml/AA/ -o /mnt/data/wikipedia/enwiki-RRRRMMDD/vert/ -s servers.txt -b /mnt/data/wikipedia/software/NLP-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar

 python ./1/distribute.py -i ./4/TT-slave/target/TT-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar -o /mnt/data/wikipedia/software/ -s servers.txt -a
 python ./4/tag.py -i /mnt/data/wikipedia/enwiki-RRRRMMDD/vert/ -o /mnt/data/wikipedia/enwiki-RRRRMMDD/tagged/ -s servers.txt -b /mnt/data/wikipedia/software/TT-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar

 python ./1/distribute.py -i ./5/MDP-package/MDP-1.0/build/jar/mdp.jar -o /mnt/data/wikipedia/software/ -s servers.txt -a
 python ./5/parse.py -i /mnt/data/wikipedia/enwiki-RRRRMMDD/tagged/ -o /mnt/data/wikipedia/enwiki-RRRRMMDD/parsed/ -s servers.txt -b /mnt/data/wikipedia/software/mdp.jar

 python ./6/ner.py -i /mnt/data/wikipedia/enwiki-RRRRMMDD/parsed/ -o /mnt/data/wikipedia/enwiki-RRRRMMDD/secresult/ -s servers.txt

 python ./1/distribute.py -i ./7/mg4j/ -o /mnt/data/wikipedia/software/mg4j/ -s servers.txt -a
 python ./7/index.py -i /mnt/data/wikipedia/enwiki-RRRRMMDD/secresult/ -o /mnt/data/indexes/enwiki-RRRRMMDD/ -s servers.txt start        
        

Spuštění démonů odpovídajících na dotazy:

 python ./daemon.py -i /mnt/data/indexes/enwiki-RRRRMMDD/final -s servers.txt -b /mnt/data/wikipedia/software/mg4j/ start
        

3.2 Zpracování CommonCraawl

Kompletní sekvence pro spuštění (zatím neotestováno):

 (označení CC je RRRR-MM)
 cd processing_steps/1b/download_commoncrawl
 ./dl_warc.sh RRRR-MM
 cd ../..

 python ./1/distribute.py -i ./2/NLP-slave/target/NLP-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar -o /mnt/data/commoncrawl/software/ -s servers.txt -a
 python ./2/verticalize.py -i /mnt/data/commoncrawl/CC-RRRR-MM/warc/ -o /mnt/data/commoncrawl/CC-RRRR-MM/vert/ -s servers.txt -b /mnt/data/commoncrawl/software/NLP-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar
 
 python ./1/distribute.py -i ./3/dedup/server -o /mnt/data/commoncrawl/software/dedup/ -s servers.txt -a
 python ./1/distribute.py -i ./3/dedup/dedup -o /mnt/data/commoncrawl/software/dedup/ -s servers.txt -a
 cd 3
 parallel-ssh -h servers_only.txt -t 0 -i "mkdir /mnt/data/commoncrawl/CC-RRRR-MM/hashes/"
 ( to load hashes from previous processing, use parameter -i /mnt/data/commoncrawl/CC-RRRR-MM/hashes/)
 python ./server.py start -s servers.txt -w workers.txt -o /mnt/data/commoncrawl/CC-RRRR-MM/hashes/ -b /mnt/data/commoncrawl/software/dedup/server
 python ./deduplicate.py -i /mnt/data/commoncrawl/CC-RRRR-MM/vert/ -o /mnt/data/commoncrawl/CC-RRRR-MM/dedup/ -w workers.txt -s servers.txt -b /mnt/data/commoncrawl/software/dedup/dedup
 python ./server.py stop -s servers.txt -w workers.txt -b /mnt/data/commoncrawl/software/dedup/server
 cd ..

 python ./1/distribute.py -i ./4/TT-slave/target/TT-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar -o /mnt/data/commoncrawl/software/ -s servers.txt -a
 python ./4/tag.py -i /mnt/data/commoncrawl/CC-RRRR-MM/dedup/ -o /mnt/data/commoncrawl/CC-RRRR-MM/dedup/tagged/ -s servers.txt -b /mnt/data/commoncrawl/software/TT-slave-0.0.1-SNAPSHOT-jar-with-dependencies.jar
 
 python ./1/distribute.py -i ./5/MDP-package/MDP-1.0/build/jar/mdp.jar -o /mnt/data/commoncrawl/software/ -s servers.txt -a
 python ./5/parse.py -i /mnt/data/commoncrawl/CC-2RRRR-MM/tagged/ -o /mnt/data/commoncrawl/CC-RRRR-MM/parsed/ -s servers.txt -b /mnt/data/commoncrawl/software/mdp.jar

 python ./6/ner.py -i /mnt/data/commoncrawl/CC-RRRR-MM/parsed/ -o /mnt/data/commoncrawl/CC-RRRR-MM/secresult/ -s servers.txt

 python ./1/distribute.py -i ./7/mg4j/ -o /mnt/data/commoncrawl/software/mg4j/ -s servers.txt -a
 python ./7/index.py -i /mnt/data/commoncrawl/CC-RRRR-MM/secresult/ -o /mnt/data/indexes/CC-RRRR-MM/ -s servers.txt start
        

Spuštění démonů odpovídajících na dotazy:

 python ./daemon.py -i /mnt/data/indexes/CC-RRRR-MM/final -s servers.txt -b /mnt/data/commoncrawl/software/mg4j/ start
        

3.3 Run_local

Skripty slúžiace pre jednotné spúšťanie spracovania na KNOT serveroch. Spracovanie sa spúšťa skriptom run.py, ktorý spúšťa požadovaný krok podľa nastavení konfiguračného súboru config.ini, ktorý je potrebné pred spracovaním upraviť. V časti [shared] tohto súboru je potrebné nastaviť do premennej root_data cestu k zložke, ktorá sa bude spracovávať napr. /mnt/data/commoncrawl/CC-2016-36. Ostatné premenné ukazujú na zložky obsahujúce skripty a pod., tieto premenné nie je potrebné upravovať. Ďalšie časti konfiguračného súboru sú bližšie popísané pri konkrétnych krokoch spracovania. Je vhodné si tento súbor niekde nakopírovať napr. do home, aby základny súbor ostal nemenený.

Po spustení sa na každom serveri, na ktorom sa má uskutočniť spracovanie vytvorí screen s názvom v tvare MENO_UZIVATELA-proc-NAZOV_KROKU, v ktorom beží konkrétny krok. Pomocou skriptu je možné všetky screeny ukončiť, zadaním parametru -a kill.

Cesta k skriptu:

 ./processing_steps/run_local/run.py
        

Spustenie:

 -c --config   povinný parameter, udáva cestu ku konfiguračnému súboru config.ini
 -p --proc     povinný parameter, špecifikuje krok spracovania, možnosti sú:
               vert, tag, pars, sec, index, index_deamon, shards nebo jejich číselné hodnoty resp. (2, 4, 5, 6, 7, 8, 9).
               Také se dá použit hodnotu 'test' pro testování kroků. Ekvivalentní číselná hodnota není.
               Při použití tohoto parametru je taky třeba nastavit krok v parametru -e.
 -a --action   nepovinný parameter, špecifikuje akciu, ktorá sa má uskutočniť, možnosti sú: start, kill, check,
               progress a eval. Základne nastavenie je start.
 -s --servers  nepovinný parameter, udáva cestu k súboru so zoznamom serverov, na ktorých sa má spustiť spracovanie.
               Bez tohto parametru sa spracovanie uskutoční len lokálne.
 -t --threads  nepovinný parameter, udáva počet vlákien pre spracovanie
 -e --examine  povinný parametr ve případě udání varianty test u parametru -p
               2 argument je v tom případě jeden z kroků (vert, tag, pars, sec, index) nebo jeho číselná hodnota. 
 -l --logging  nepovinný parametr, zapíná výpis výstupu testu do souborů ve složce s logy. Soubory mají příponu
               test_* nebo main_*
 -h --help     vypíše nápovedu
        

3.3.1 Vertikalizace

Nastavenie vertikalizácie je v časti [vert] konfiguračného súboru config.ini. Premenná exe_path udáva cestu k skriptu vertikalizátoru. Premenné input_dir, output_dir a log_path udávaju cestu k vstupnej, výstupnej a zložke s logmi. Proměnná no_log slouží pro vypínání a zapínání tvorby logů. Stoplist_path je cesta k súboru so zoznamom stop slov.

Príklad spustenia vertikalizácie:

 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p vert
        

3.3.2 Deduplikace

Servers are sequentially launched as well as workers on port specified in config file. Variables in section [dedup] need to be set. Také se ve složce s run.py musí nacházet script dedup_handler.py, zodpovědný za spouštění serverů a workerů.

Proměnné

 exe_path    - cesta ke složce se soubory server.py a deduplicate.py
 bin_path    - cesta ke složce se spustitelnými soubory
 input_path  - složka s vertikály
 output_path - výstupní složka
 map_file    - cesta ke souboru hashmap.conf, pro běžné spouštění není důležité.
 log_path    - složka pro logy 
 progress_tester  - cesta k souboru dedup_check.py
 hash_path   - cesta ke složce z hash
 port        - port na kterém budou běžet workery a servery.
 dropped     - True nebo False, odpovídá za argument -dr --dropped
 droppeddoc  - True nebo False, odpovídá za argument -dd --droppeddoc
 debug       - True nebo False, odpovída za argument -d  --debug
 near_dedup  - True nebo False, odpovídá za argument -n  --near
        

Příklad spouštění:

 python3 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p dedup
        

Kontrola postupu deduplikaci:

 python3 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p dedup -a progress
        

3.3.3 Tagging

Nastavenie v časti [tag] v súbore cofig.ini. Obsahuje premenné exe_path, input_path, output_path, log_path s rovnakým významom ako u vertikalizácie. Ďalšie parametre sú remove_uri , ktorý zapne/vypne odstraňovanie uri z odkazov a ttagger_path, udávajuci cestu k inštalačnému adresáru TreeTagger.

Príklad spustenia pre tagging:

 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p tag
        

3.3.4 Parsing

Nastavenie v časti [pars] v súbore cofig.ini. Obsahuje premenné exe_path, input_path, output_path, log_path s rovnakým významom ako u vertikalizácie + tagging. Premenná config_path udáva cestu ku konfiguračnému súboru pre parsing..

Príklad spustenia pre parsing:

 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p pars
        

3.3.5 SEC

Časť súboru [sec], obsahuje rovnaké základne premenné ako v predchadzajúcich krokoch. Navyše obsahuje premennú config_path, ktorá udáva cestu k súboru obsahujúcemu dotaz na SEC vo formáte json.

Príklad spustenia pre SEC:

 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p sec
        

3.3.6 Vytvoření a populace shardů

Funkcia skriptu pre prípravu indexácie. Vo výstupnej zložke sa každom serveri vytvorí požadovaný počet kolekcií, do ktorých sa rovnomerne rozdistribujú súbory zo vstupnej zložky vo formáte mg4j (výstup zo SEC). V časti konfiguračného súboru [shards] je možné upraviť vstupnú, výstupnú zložku a počet požadovaných kolekcií, který se určuje podle počtu jader procesoru. Výstupní složka může ale nemusí existovat.

Príklad spustenia pre vytvorenie a populáciu kolekcií:

 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p shards
        

3.3.7 Indexace

Funkcia skriptu, ktorá spustí indexáciu kolekcií. Vstupom je zložka obsahujúca všetky kolekcie, výstup sa ukladá do jednej zložky pre všetky kolekcie (final). Premenné je možné upraviť v časti konfiguračného súboru [index].

Príklad spustenia indexácie:

 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p index
        

3.3.8 Spuštění démonů pro indexy

Časť konfiguračného súboru [index_deamon]. Obsahuje premenné exe_path ktorá udáva cestu k indexátoru, input_path, ktorá udáva cestu k zložke final, nad ktorou pobeží démon a log_path je cesta k zložke do ktorej budú uložené logy. Pokiaľ je premenná log_path nastavená na "/" logy sa neukladajú. Ďalšie premenné sú port_number, ktorá udáva číslo portu, na ktorom pobeží démon a config_path je cesta ku konfiguračnému súboru pre indexátor.

Príklad spustenia démonov:

 ./processing_steps/run_local/run.py -c ~/config.ini -s ~/servers.txt -p index_deamon
        

3.3.9 Kontrova výstupů po každém kroku

Skripty poskytují možnost kontroly přítomnosti výstupních souborů a správností kompletností jejích obsahu po jednotlivých krocích zpracování.

Principem zpracování je načtení ze vstupních, výstupních a případně log souborů odkazů a porovnání jejích přítomností v ostatních souborech. Při nalezení neshody vypíše chyby na stdout nebo do souboru. Nejčerstvější verzi se dá najít ve větvi "test_scripts_xgrigo02" ve složce processing_steps/step_check/.

Použití

 python3 step_check.py -i IN_PATH -o OUT_PATH -l LOGS_PATH -t STEP -s [-c PATH_TO_CONFIG]
        

Parameters:

 -c PATH, --config PATH    Path to config file. 
                                    If config path was specified, then arguments -i, -o and -l 
                                    will be ignored, there values will be obtained from config.
 -t STEP, --target STEP    Step for script to test. 
                                    Possible STEP values:
                                     '2' or 'vert'
                                     '3' or 'dedup'
                                     '4' or 'tag'
                                     '5' or 'pars'
                                     '6' or 'sec'
                                     '7' or 'index'
                                    Implicit value is 'vert'
 -i IN_PATH, --input_path   Path with input files
 -o OUT_PATH, --output_path Path with output files
 -l LOG_PATH, --log_path    Path with log files to check. Also test output will
                                     be saved there, if -s option was specified
 -s, --save_out             Enable output writing to log file
 -h, --help                 Prints this message
 --inline                   Enables inline output
        

Jsou dvě možností spouštění, nastavit argumenty -i, -o a -l, nebo ukázat cestu do config souboru, všechny potřebné údaje se potom přečtou z něj. Argumenty -i, -o a -l tím pádem budou potlačeny.

Výstup skriptů při specifikaci parametru -s bude uložen do souborů s přípony .test_out nebo .main_out. Při dokončení testů nad dvojicí souborů bude taky vytvořen soubor .tested, což znamená bezchybové ukončení skriptů.

Pro spouštění skriptem run_local je třeba nastavit exe_path v sekci [test] souboru. Ten se dá najít ve složce corpora_processing_sw/processing_steps/run_local/config.ini.

Spuštění pomocí run.py:

 python3 run.py -a start -p test -e vert -l -c ~/config.ini -s ~/servers.txt
        

Příklad ručního spouštění:

 python3 step_check.py -i ./warc_path -o ./vert_path -l ./logfiles/verticalization -t vert -s
        

nebo:

 python3 step_check.py -c ./config.ini -t vert
        

4 Spuštění na Salomonu


5 Spuštění na Salomonu s novými skripty


6 Spuštění na Salomonu s novými skripty verze 5


7 Formáty dat

7.1 Manatee

Dobrý příklad manatee formátu lze stáhnout zde.

Konkrétně korpus SUSANNE.
Tento se liší od našeho v tom, že má jen 4 sloupce (my jich máme 27). Všechny tagy začínající na < v tomto formátu zůstávají, nic se nijak netransformuje jako v případě MG4J.

Tedy co se týče potřebných změn, tak to bude pouze nepřidávat GLUE jako variantu tokenu a negenerovat věci jako %%#DOC PAGE PAR SEN. V manatee se také místo prázdné anotace dává podtržítko (v mg4j 0). V manatee se pak navíc musí vytvořit konfigurační soubor, který definuje tagy a určuje cestu k vertikálnímu souboru, aby bylo možné to programem encodevert naindexovat.

7.2 Elasticsearch

Formát ElasticSearch pro sémantické anotace vypadá následovně:

 Slovo[anotace1;anotace2...] a[anotace1;anotace2...] další[...;anotace26;anotace27] slovo[...;anotace26;anotace27]
        

Tvary anotací mohou být libovolné, avšak mohou obsahovat pouze alfanumerické znaky a podtržítko. Aktuálně je použit formát zápisu anotací, kde jedna anotace je ve tvaru typAnotace_hodnota.

Typy anotací jsou:

position token tag lemma parpos function parword parlemma paroffset link length docuri lower nerid nertag param0 param1 param2 param3 param4 param5 param6 param7 param8 param9 nertype nerlength

Konkrétní anotovaný text pak tedy vypadá:

 Slovo[position_1;token_Slovo...]
        

Pro sémantické dotazování se pak používají klasické Lucenovské dotazy (viz testovací dotaz v adresáři projektu).

8 Příprava nového taggingu a parsing

Pro využití nového nástroje syntaxnet na analýzu textu a zároveň využití již stávajících a osvědčených nástrojů, vznikly 2 nové scripty - revert.py a reparse.py. Skript revert.py slouží k převodu Vertikálu na vstup pro syntaxnet takovým způsobem, že veškeré tagy a odkazy umístí na konec souboru a přidělý jim číselné identifikátory, které následně použije skript reparse.py, který z výstupu syntaxnetu obnoví veškeré tagy a odkazy.

Skript revert.py:

 ./processing_steps/5/syntaxnet/revert.py
        

Použití:

 ./processing_steps/5/syntaxnet/revert.py INPUT_FILE OUTPUT_FILE
        

Skript reparse.py:

 ./processing_steps/5/syntaxnet/reparse.py
        

Použití:

 ./processing_steps/5/syntaxnet/reparse.py INPUT_FILE OUTPUT_FILE
        

9 Popis souborů ve složce old

9.1 CC-2014-35

Skripty pro stažení CommonCrawl 2014-35:

9.2 ccrawl_dloader

9.3 wet2vert

9.4 tt

Odkaz na TreeTagger, pouští se příkazem:

 [cesta_k_corpproc/]tt/bin/tree-tagger -token -lemma -sgml -no-unknown [cesta_k_corpproc/]tt/lib/english.par
        

anebo pomoci skriptu tagger.py z adresáře vert2ner.

9.5 mdparser

9.6 vert2ner

10 Zpracování CommonCrawl 2014-35

10.1 Statistiky

Množství:

WARC: 43430,7952731 GB (46633461334359 bytů), WAT: 14702,6299882 GB (15786828741075 bytů), WET: komprimované 5300,3036399 GB (5691157698008 bytů), nekomprimované 12319,1 GB.

Statistiky po vertikalizaci (starý vertikalizátor):

Počet souborů: 52 849

Počet dokumentů: 2 744 133 462

Počet odstavců: 316 212 991 122

Počet vět: 358 101 267 144

Počet slov (tokenů): 2 534 513 098 452