Hlavním cílem projektu bylo vytvořit program, který pro datové sady ClueWeb a CommonCrawl vyextrahuje odkazy na Wikipedii podobné těm v datové sadě Wikilinks. Dalším úkolem bylo vyhodnotit rychlost vytvořeného nástroje. Veškerá funkcionalita je zaobalena do skriptu wikilinks.py, jehož detailní popis je uveden níže na stránce.
Vzhľadom na skutočnosť, že je potrebné pri každom s WARC záznamov určiť o aké dáta sa jedná, prípadne v akej znakovej sade sú napísané program vyraďuje z analýzy záznamy, ktoré nie sú typu application/http;msgtype=response
alebo application/https; msgtype=response
. Každý záznam, ktorý vyhovuje predošlej podmienke by mal obsahovať HTTP hlavičku a v nej určený typ obsahu. Nepredpokladá sa, že obsah typu text/html
alebo image/jpeg
bude obsahovať linky a teda sa analyzuje iba obsah typu text/html
.
Z HTTP hlavičky sa v niektorých prípadoch dá určiť znaková sada daného dokumentu. Ak je to možné, tak je zistená. Ďalej prebieha hľadanie špecifikácie znakovej sady v tele HTTP záznamu (konkrétne HTML metatagy). Znaková sada zistená z HTML má vyššiu prioritu ako tá zistená z HTTP hlavičky. V Prípade že sa špecifikáciu znakovej sady nepodarilo nikde nájsť, je na rozluštenie použitá východzia znaková sada pre HTTP a to ISO-8859-1. Ak nie je možné niektoré zo znakov preložiť do UTF-8 sú ignorované.
Následuje vyhľadávanie odkazov. Vyhľadávanie funguje vďaka regulárnym výrazom. Vyhľadávajú sa klasické html linky (<a>
). Ak je vyhľadaný odkaz odkazom na Wikipediu alebo Freebase, je zistený jeho offset, odkazovaný text, odkazovaný text bez HTML entit, text pred a za odkazom (bez HTML tagov a entit), normalizovaná adresa bez HTML entít, adresa zdroja a offset odkazovaného textu. Následne je to spolu s označením znakovej sady a menom zdrojového súboru uložené do výstupného súboru.
Za predpokladu, že niektoré informácie sa nedajú zistiť (napr. text pred odkazom), program uloží na ich miesto prázdný reťazec (možné zmeniť v constants.py
).
Program ukladá z Wikipedie len linky z menného priestoru 0. Táto filtrácia sa prevádza na základe prítomnosti znaku ":" v názve wikipediové stránky. Ak sa v názve stránky nachádza ":[^_]" je považovaná za stránku z iného menného priestoru Wikipedie ako 0. Daná funkcia je takto implementovaná z dôvodu jednoduchosti. Názvy menných priestorov na Wikipedii sa totiž menia s jazykovou lokalizáciu Wikipedie.
Program je tiež schopný vyhľadávať len linky na Freebase alebo Wikipediu (túto voľbu je možné spraviť pomocou prepínačov -f
a -w
).
Existuje aj možnosť odfiltrovať len linky na anglickú verziu Wikipedie -e
prípadne iné jazykové verzie Wikipedie -l
. Program pri tejto možnosti rozhodne o jazykovej príslušnosti danej Wiki stránky na základe jej domény 3. (resp 4.) rádu.
Za predpokladu, že existuje aj súbor obashujúci dáta o presmerovaniach na Wikipedii je možné aby program neukladal do druhého poľa priamo URL adresu nájdenú vo Warc dokumente ale adresu na ktorú sa táto URL presmerováva -r
.
Program ukladá správy o svojej činnosti do súboru s menom <vystupny>.log
.
Počet ukladaných slov pred a za odkazom je možné upraviť v constants.py
.
Skript wikilinks.py
nyní umožňuje zpracovávat jak WARC soubory, tak VERT soubory. Spouštění a použití skriptu zůstává stejné, skript sám podle vstupního souboru rozpozná o jaký formát se jedná a podle toho jej dále zpracovává.
VERT soubor obsahuje vertikalizovaná data, kde jsou tokeny (slova) vkládány pod sebe, čili jsou oddělovány odřadkováním \n
. . Záznam v takovém souboru pak začíná a končí tagy <doc zde se nachází id, url a title příslušného dokumentu>
a </doc>
. Jednotlivé odkazy v dokumentu jsou uvozeny tagem <link="url na wikipedii/freebase/ostatní"/>
, na stejném řádku se nachází i tag <length="číslo"/>
značící počet tokenů (slov) tvořících text odkazu, ty se nachází před tagem <link>
. Pro zpracování formátu je využito převážně regulárních výrazů.
Toto sa týka adries Wikipédie a procesu ich normalizovania. V adrese, ktorá pôvodne obsahovala CIUD článku napr. http://en.wikipedia.org/wiki/index.html?curid=75960 je časť cesty za .../wiki/ v tejto adrese nahradená titulkom tohto článku (https://en.wikipedia.org/wiki/KPMG pre predchádzajúci príklad). Pre aktivovanie tejto funkcionality je potrebné spustiť skript s prepínačom -p
nasledovaným .tsv
súborom, v ktorom sa na jednotlivých riadkoch nachádzajú dvojice CUID a title (napr. "75960\tKPMG"). Tento súbor sa pri spustení skriptu načíta do pamäte a pri normalizácii sa suffix s konkrétnym CUID v URL nahradí príslušným titulkom článku.
Cesta k súboru:
/mnt/minerva1/nlp/projects/decipher_wikipedia/redirectsFromWikipedia/enwiki-latest-page.sql
Spuštění:
wikilinks.py -i <input_file> -o <output_file> [-p <path>] [-v] [-w] [-f] [-e] [-l <language>[:<language>]] [-r <redirection_file>] [-s] [-d <disambiguation_file>] [-W] [-h] [-a <all_url_file>] [-k]
-i
- specifies file containing list of WARC/VERT files to be analysed; it should contain one record per line; the record should be in the format <[path]warc|vert_file_name>\t<number> or <[path]warc|vert_file_name>-p
- specifies path that shares all files from input file-o
- specifies name of output file; log file will be called <output_file_name>.log-v
- verbose mode-w
- searches for links to Wikipedia-f
- searches for links to Freebase-e
- only links to English Wikipedia will be recognized-l
- only links to a given language-specific Wikipedia will be recognized-r
- a tsv file containing redirections from English Wikipedia-d
- a tsv file containing disambiguation pages from English Wikipedia-a
- a tsv file containing all URL from English Wikipedia-W
- filtering out documents from Wikipedia-s
- filtering out all contexts that are not referenced from anchor text similar to the Wikipedia page name-I
- filtering out URLs with fragment identifier-P
- a tsv file containing Wikipedia page table (CUIDs and its titles)-h
- prints help-k
- filtering out documents from unwanted domains {wikipedia|wikidata|wiktionary|wikimedia|wikisource|edwardbetts|instantchess|viaf|werelate|wmflabs|paheal|fallingrain|isni-url.oclc|blekko}Parameter -p
možné použiť pri analýze Clueweb12 kde je dostupný súbor obsahujúci zoznam warc súborov s ich relativnými cestami.
Příklad spouštění pro jeden vybraný archív je uveden ve skriptu:
/mnt/minerva1/nlp/projects/wikilinks/test/test.sh
Zdrojové soubory projektu Wikilinks se nacházejí v adresáři:
/mnt/minerva1/nlp/projects/wikilinks/program/
Význam jednotlivých zdrojových souborů je následující:
wikilinks.py - Samotny program na extrakciu linkov na Wikipediu a Freebase warcm.py - modul pre prácu s warc súbormi vert.py - modul pro práci s vert soubory httpm.py - modul, ktorý zaobstaráva čítanie potrebných údajov z HTTP hlavičky constants.py - konštanty
Výstupní soubory jsou ve formátu TSV (Tab-Separated Values). Význam jednotlivých sloupců je následující:
------+------------------------------------------------- Číslo | HODNOTA ======+================================================= 1 | Originálna adresa ------+------------------------------------------------- 2 | Normalizovaná adresa ------+------------------------------------------------- 3 | Text odkazu (bez HTML entít) ------+------------------------------------------------- 4 | Originálny text odkazu ------+------------------------------------------------- 5 | Kontext pred odkazom (bez HTML entít) ------+------------------------------------------------- 6 | Kontext za odkazom (bez HTML entít) ------+------------------------------------------------- 7 | Kódovanie (originálnej stránky) ------+------------------------------------------------- 8 | Offset adresy v pôvodnom WARC/VERT súbore ------+------------------------------------------------- 9 | Offset textu odkazu v pôvodnom WARC/VERT súbore ------+------------------------------------------------- 10 | Názov pôvodného WARC/VERT súboru ------+------------------------------------------------- 11 | URL příslušného dokumentu ve WARC/VERT souboru ------+-------------------------------------------------
Skript pro automatické spouštění nástroje Wikilinks se nachází v:
/mnt/data/nlp/projects/wikilinks/runWikilinks.sh
Je nutné spouštět jej s povinnými parametremy:
-l
LOGIN - jméno uživatele pro připojení k serverům-s
SOURCE_FOLDER - adresář, ve kterém jsou uložena data ke zpracování-d
DESTINATION_FOLDER - adresář, kde se zpracovaná data po skončení nakopírují (je třeba aby byl již vytvořen)-w | -v
- přepínač, který říká, zda se budou zpracovávat WARC | VERT souboryPro úspěšné spuštění je třeba nastavit si přihlašování pomocí ssh klíčů na stroje, na kterých se budou data zpracovávat a zapsat jejich jména do souboru:
/mnt/data/nlp/projects/wikilinks/servers.txt
Po spuštění spouští skript runWikilinks.sh tyto skripty v daném pořadí:
list.sh, list_dirs.sh - vytváří seznam souborů pro zpracování jednotlivými stroji split.sh - rozdělí vytvořený seznam pro více procesů prepare.sh - připraví adresáře pro výsledky Wikilinks run.sh - spouští nástroj Wikilinks na všech strojích v servers.txt (po spuštění probíhá kontrola zda Wikilinks dokončil činnost dále) copy.sh - zkopíruje výsledky ze všech strojů na minerva1.fit.vutbr.cz
Průběh skriptu je zaznamenáván do:
/mnt/data/nlp/projects/wikilinks/autorunOutput.log /mnt/data/nlp/projects/wikilinks/autorunError.log
./runWikilinks.sh -l iotrusina -s /mnt/data/commoncrawl/CC-2015-06/ -d /mnt/data/nlp/projects/wikilinks/results.CC-2015-06/ -w
Poznámka:
Skript běží dlouhou dobu, a proto je dobré spouštět jej přes screen.
Uvedené časy predstavujú odhad doby po ktorú bude prebiehať analýza danej časti CommonCrawl 2014 uloženej na jednotlivých strojoch.
Stroj | Počet souborů | 1 proces | 2 procesy | 3 procesy | 4 procesy | 5 procesů | 6 procesů |
---|---|---|---|---|---|---|---|
knot01 | 2500 | 192:21:07 | 98:59:31 | 70:23:59 | 53:55:42 | 40:49:35 | 37:28:19 |
knot03 | 2500 | 112:46:48 | 61:00:58 | 39:32:38 | 31:49:12 | 26:10:57 | 25:22:56 |
knot04 | 2500 | 116:28:20 | 63:05:04 | 41:55:47 | 33:26:21 | 24:45:13 | 24:34:53 |
knot05 | 2600 | 128:58:11 | 65:43:50 | 44:50:05 | 35:59:16 | 28:19:13 | 27:28:51 |
knot06 | 2500 | 115:49:10 | 58:59:10 | 42:36:59 | 30:47:32 | 24:38:07 | 21:32:13 |
knot07 | 2500 | 114:32:38 | 58:57:01 | 42:39:27 | 30:55:40 | 26:51:25 | 22:19:48 |
knot08 | 2700 | 122:51:36 | 62:10:48 | 42:11:48 | 34:15:05 | 31:29:38 | 26:20:27 |
knot10 | 2600 | 115:47:47 | 52:34:57 | 36:45:08 | 27:36:03 | 23:27:30 | 19:33:34 |
knot11 | 2200 | 87:14:54 | 46:49:46 | 10:38:42 | 24:32:21 | 19:27:05 | 16:42:27 |
athena3 | 2700 | 104:35:51 | 56:23:20 | 37:19:09 | 27:11:53 | 23:42:00 | 20:12:17 |
athena2 | 2100 | 65:13:28 | 33:27:54 | 24:09:19 | 17:06:51 | 14:07:46 | 12:39:36 |
knot14 | 2100 | 83:13:48 | 37:41:42 | 37:08:53 | 26:42:57 | 22:29:44 | 17:42:52 |
knot15 | 2100 | 52:24:24 | 29:11:31 | 20:07:23 | 14:50:38 | 12:16:03 | 09:29:28 |
knot16 | 2100 | 56:42:56 | 29:29:54 | 24:36:32 | 20:29:35 | 17:52:11 | 17:07:22 |
knot17 | 2100 | 69:30:29 | 31:06:02 | 24:48:12 | 21:45:46 | 19:29:25 | 16:10:47 |
knot18 | 2100 | 92:17:35 | 49:52:09 | 34:15:19 | 26:23:49 | 20:55:41 | 17:59:25 |
knot19 | 2100 | 75:19:05 | 44:09:02 | 34:44:27 | 28:17:23 | 22:39:17 | 18:55:44 |
knot20 | 2100 | 67:19:14 | 38:36:01 | 31:22:48 | 26:02:59 | 21:03:23 | 16:37:21 |
knot21 | 2100 | 64:03:42 | 32:14:10 | 23:18:45 | 20:10:55 | 18:43:55 | 17:07:27 |
knot22 | 2100 | 86:28:38 | 49:30:10 | 33:37:08 | 25:25:29 | 20:17:49 | 16:01:15 |
knot23 | 2100 | 63:20:18 | 50:32:17 | 33:36:58 | 25:24:19 | 21:35:29 | 16:58:37 |
knot24 | 2100 | 50:41:02 | 27:54:03 | 19:10:53 | 14:48:27 | 10:59:45 | 09:59:11 |
knot25 | 2700 | 147:13:30 | 76:50:11 | 50:02:03 | 39:45:54 | 32:17:29 | 27:46:18 |
athena1 | 2700 | 75:02:42 | 39:11:11 | 27:23:12 | 20:47:35 | 17:07:30 | 14:20:14 |
Pri tomto porovnaní bol spracovaný raw súbor [2] zo sady Wikilinks a porovnaný s dátami vyextrahovanými v rámci projektu Wikilinks [1].
Je nutné poznamenať, že neboli spracované celé súbory ale len ich časť a to z dôvodu výpočtovej náročnosti.
Póvodný full-context súbor [2] musel byť rozdelený na časti a tieto následne spojené do warc súboru, ktorý bol následne analyzovaný pomocou Wikilinks. Program totiž (pri rozumnej pamäťovej náročnosti) nedokáže spracovávať tak dlhé záznamy (13 GB). Spracováva totiž jeden warc záznam za druhým a každý zvyčajne obashuje jedinú stránku (a teda pár KB).
Jediné 2 položky, ktoré bolo možné vo výstupoch porovnávať sú adresy jednotlivých wikipediových stránok a text použitý v ich odkazoch.
Podstatný rozdiel medzi originálními Wikilinks a našimi Wikilinks je ten, že medzi vyextrahovanými odkazmi z originálních Wikilinks sa nachádzajú aj odkazy do iného menného priestoru Wikipedie ako 0. Nachádzajú sa tam teda odkazy na obrázky, súbory a podobne. Isté rozdiely mohli vzniknúť aj normalizovaním presmerovania. Ďaľšie rozdiely vznikli odlišným záznamom bielych znakov a podobne.
[1] http://iesl.cs.umass.edu/downloads/wiki-link/context-only/001.gz [2] http://iesl.cs.umass.edu/downloads/wiki-link/full-content/part1/001.gz
Počet odkazov nájdených v rámci Wikilinks (originální): 123810 Počet odkazov nájdených pomocou Wikilinks: 187985 Počet prekrývajúcich sa odkazov: 102185 Počet odlišných odkazov: 110547
"Počet odlišných odkazov" je počet odlišných riadkov vo výstupe originálních Wikilinks a našich Wikilinks a "Počet prekrývajúcich sa odkazov" je počet rovnakých odkazov v týchto výstupoch.
Čísla boli získané následovným spôsobom:
diff clueweb12.out wikilinks.out | wc -l comm -1 -2 out1.out.sorted 001.out.sorted | wc -l
Výsledky je možné nájsť v:
/mnt/minerva1/nlp/projects/wikilinks/porovnani/
Zadáním bylo vytvořit skript pro analýzu stejných kontextů odkazů a vytvoření jejich histogramu z výsledku nástroje Wikilinks na datech CommonCrawl.
Skript duplicateContexts.py
načítá data ze zadaného adresáře a hledá duplicitní kontexty odkazů mezi všemi soubory. Duplicitní kontexty odkazů sloučí a spočítá jejich počet. Nad těmito záznamy provede setřízení podle odkazů a vypíše je do souboru do adresáře RESULTS
spolu s výpisem dalších doplňujících dat.
Skript je umístěn v:
/mnt/minerva1/nlp/projects/wikilinks/duplicateContexts.py
Spouštění:
./duplicateContexts.py [-f FOLDER] [-n NUMBER] [-W]
-f
FOLDER - umístění adresáře, který se má zpracovávat; pokud není zadán, zpracují se soubory v adresáři, kde je uložen skript-n
NUMBER - počet nejvíce se opakujících duplicitních kontextů odkazů, které se mají zapsat do souborů-W
- bude zpracovávat pouze záznamy, které nepochází z cizojazyčné Wikipedie a navíc jejich histogram rozdělí podle zdroje na 3 soubory: anglické, ostatní a takové, ve kterých se vyskytuje aspoň jeden z obou předchozích; v případě, že je zadán parametr -n, vypíše nejvíce se opakujících duplicitních kontextů odkazů do souborů "duplicate.wdocs.N.result", kde se nenachází zdroje z cizojazyčné Wikipedie a do souborů "duplicate.wdocs.BOTH.N.result", které obsahují aspoň jeden záznam z anglické Wikipedie a jiné stránkyPro výstup skriptu se vytvoří ve zpracovávaném adresáři složka RESULT
, která obsahuje soubory:
script.result
Obsahuje histogram kontextů odkazů po řádku ve formátu:
01 Normalizovaná adresa 02 Kontext pred odkazom (bez entit) 03 Kontext za odkazom 04 Počet duplicitních kontextů odkazů
Jednotlivé sloupce v souboru jsou odděleny tabulátory.
script.result.log
Obsahuje doplňující informace, jako jsou celkový počet řádku všech souborů, počet jedinečných kontextů odkazů, počet duplicitních kontextů odkazů a doba trvání dílčích částí zpracovávání skriptu.
duplicate.N.result
V těchto souborech jsou uloženy nejvíce se opakující duplicitní kontexty odkazů.
Skript byl testován nad daty:
/mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-49
Výstup je uložen v:
/mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-49/RESULTS
Skript domains.py
načítá data ze zadaného adresáře, který obsahuje výsledky skriptu duplicateContexts.py
a vypisuje ze souborů duplicateN.result
domény.
Skript je umístěn v:
/mnt/minerva1/nlp/projects/wikilinks/domains.py
Spouštění:
./domains.py [-f FOLDER] [-H]
-f
- umístění adresáře, který se má zpracovávat; pokud není zadán, zpracují se soubory v adresáři, kde je uložen skript-H
- vypíše histogram domén ze všech souborůdomains.result
Obsahuje názvy souborů a pod každým z nich jsou vypsány domény + jejich počet.
domains.histogram.result
Obsahuje histogram domén + jejich počet ze všech zpracovávaných souborů.
moreDomainFiles.result
Obsahuje soubory, které obsahují více než 1 doménu a jejich počet.
Zadaním bolo porovnať ako dlho trvalo spracovávanie dátových sád CC-2014-49 a CC-2014-52 na jednotlivých strojoch na základe súborov *.result.log
v následujících adresároch. Dále získať celkový čas trvania každého procesu, rozdielom času začiatku a konca procesu z príslušného súboru .log a následne vytvoriť graf pomocou nástroja gnuplot.
/mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-49 /mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-52
Skript processingTime.py je umiestnený v:
/mnt/minerva1/nlp/projects/wikilinks/charts/processingTime.py
Spustenie:
./processingTime.py DIR OUTPUTFILENAME
DIR
- priečinek obsahujúci všetky *.result.log souborOUTPUTFILENAME
- meno súboruFormát vytvořeného souboru je:
[por. číslo] [stroj.vlákno] [čas v tvare hh:mm:ss] [čas v sekundách]
Časy spracovávania sad CC-2014-49 a CC-2014-52 sú umiestnené v:
/mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-49/timeComparision-2014-49.dat /mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-52/timeComparision-2014-52.dat
gnuplot skript timeChart.gpl
slúži na vytvorenie grafov na základe týchto dvoch súborov:
/mnt/minerva1/nlp/projects/wikilinks/charts/timeChart.gpl
Výsledné obrázk timeComparision.CC-2014-49.png
a timeComparision.CC-2014-52.png
porovnávajú celkový čas trvania procesov na vláknach jednotlivých strojov v sekundách.
/mnt/minerva1/nlp/projects/wikilinks/charts/timeComparision.CC-2014-49.png /mnt/minerva1/nlp/projects/wikilinks/charts/timeComparision.CC-2014-52.png
Úlohou bolo vytvoriť graf ktorý bude zobrazovať veľkosť spracovávaných dát jednotlivými procesmi na základe súborov z adresárov:
/mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-49/list /mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-52/list
Skript dataSize.py
nájde v adresári zadanom prvým argumentom všetky súbory ktoré vyhovujú regulárnemu výrazu zadanému druhým argumentom, vypočíta sumu všetkých dostupných súborov, ktoré súbor obsahuje, uloží ju do súboru, ktorého meno je dané tretím argumentom.
Umistenie:
/mnt/minerva1/nlp/projects/wikilinks/charts/dataSize.py
Spustenie:
./dataSize.py DIR REGEX OUTPUTFILE
DIR
- slozka s vstupními souboryREGEX
- regulární výraz pro nalezení souborůOUTPUTFILE
- výstupní souborSkript associateFilesData.py
slúži na spojenie dát z čiastkových súborov vytvorených pomocou prvého skriptu do jedného výstupného súboru, čiastkové súbory následne odstráni.
Umistenie:
/mnt/minerva1/nlp/projects/wikilinks/charts/associateFilesData.py
Spustenie:
./associateFilesData.py DIR OUTPUTFILE
DIR
- složka se soubory obsahujícími částečná dataOUTPUTFILE
- výstupní soubor s mergnutými datyFormát vytvořeného souboru je:
[por. číslo] [meno_stroja.vlákno] [veľkosť dát v GB]
Výsledné súbory sú uložené v:
/mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-49/list/dataSizeComparision.CC-2014-49 /mnt/minerva1/nlp/projects/wikilinks/results.CC-2014-52/list/dataSizeComparision.CC-2014-52
Prislúchajúce grafy sú uložené v:
/mnt/minerva1/nlp/projects/wikilinks/charts/dataSizeComparision.CC-2014-49.png /mnt/minerva1/nlp/projects/wikilinks/charts/dataSizeComparision.CC-2014-52.png
K deduplikaci formátu Wikilinks je možné použít programy a skripty podrobněji popsané zde.
Deduplikaci zajišťují dva programy. Jedná se o program dedup a server.
Zdrojové kódy k nim jsou v git repozitáří (větev wikilinks):
/mnt/minerva1/nlp/repositories/corpora_processing_sw/
a to ve složce:
/mnt/minerva1/nlp/repositories/corpora_processing_sw/processing_steps/3/dedup/
K překladu použijte Makefile.
Program dedup je tzv. "worker" a provádí samotnou deduplikaci. Ke svému běhu potřebuje běžící program server, což je tzv. "hash holder". Pro deduplikaci je tedy nutné, aby bězel alespoň jeden server a jeden worker. Princip deduplikace je ve zkratce: workery počítají hashe ze záznamů (jen určitých sloupců) a dotazují se serverů, jestli tento hash již znají. Pokud neznají, tak jde o unikátní záznam. Workerů i serverů může běžet 1 až N resp. 1 až M s tím, že N může být různé od M. Zpravidla se spouští na každém stroji jeden worker a na několika vybraných strojích běží i server.
Protože spouštět N workerů a M serverů na různých strojích by bylo náročné a nepraktické, exitují skripty deduplicate.py
a server.py
, které toto obstarají.
Umístěny jsou v:
/mnt/minerva1/nlp/repositories/corpora_processing_sw/processing_steps/3/
Skripty vyžadují programy dedup and server dostupné na všech strojích ve stejnému umístění (parametr -b
). Dále se jim předávají soubory se seznamem workerů (parametr -w
) a se seznamem serverů (parametr -s
). Oba soubory mají stejný formát: na každý řádek jeden HOSTNAME. Oba skripty mají dále parametr -p
zadání komunikačního portu.
U skriptu server.py
jsou nepoviné parametry -i
a -o
specifikující vstupní/výstupní soubor pro načtení/uložení hashů. Servery běží na pozadí, takže pro jejich spuštění je nutné přidat parametr start, pro ukončení stop a pro restart restart (někdy nefunguje správně tedy lepší nepoužívat). Pokud není zadán ani jeden z volitelných parametrů start, stop nebo restart, skript pouze kontroluje stav severů a screenů ve kterých servery běží.
U skriptu deduplicate.py
jsou také parametry -i
a -o
ovšem ve významu vstupní/výstupní složky pro deduplikaci. Pro zpravování Wikilinks je nutné použít parametr -wl
. Dalším (nepovinným) parametrem je -n
pro zapnutí tzv. near deduplikace.
Pro deduplikaci je nutné, aby byly sloupce "Kontext pred odkazom" a "Kontext za odkazom" u všech deduplikovaných dat stejné.
K tomu je určen skript:
/mnt/minerva1/nlp/projects/wikilinks/wikilinksConvertContext.py
Zkracuje kontexty na 10 slov.
Příkladem použití je:
wikilinksConvertContext.py < vstupni_soubor > vystupni_soubor
python server.py -s servers.txt -w workers.txt -p 11111 start # spustím servery na strojích v souboru servers.txt na portu 11111 python server.py -s servers.txt -w workers.txt -p 11111 # zkontroluji, zda jsou spuštěny python deduplicate.py -s servers.txt -w workers.txt -p 11111 -wl -i /mnt/data/wikilinks -o /mnt/data/wikilinks_dedup # spustím deduplikaci souborů ze složky /mnt/data/wikilinks a výstup ukládám do /mnt/data/wikilinks_dedup # paralelně na strojích ze souboru workers.txt (neardeduplikace se spustí pouze přidáním parametru -n)
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í) a dále se počítá hash 2. sloupce. Aby byl řádek duplicitní, musí oba předchozí přístupy odhalit shodu.
Tabulka s přehledem počtu záznamů wikilinks zpracovaných sad:
CC-2014-42 | CC-2014-49 | CC-2014-52 | CC-2015-06 | CC-2015-11 | CC-2015-14 | CC-2015-18 | CC-2015-22 | CC-2015-27 | CC-2015-32 | CC-2015-35 | CC-2015-40 | CC-2015-48 | CC-2016-07 | CC-2016-18 | CC-2016-22 | CC-2016-26 | CC-2016-30 | Součet | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
před deduplikací | 92,814,880 | 45,171,854 | 40,843,668 | 36,321,605 | 38,847,017 | 35,095,339 | 42,807,744 | 41,439,440 | 34,624,096 | 38,110,741 | 40,552,152 | 28,382,908 | 40,465,043 | 38,538,458 | 31,179,951 | 30,295,311 | 25,488,631 | 42,734,222 | 723,713,060 |
po deduplikaci | 15,454,213 | 13,160,368 | 15,007,065 | 13,497,642 | 14,595,606 | 13,713,196 | 15,482,543 | 15,294,670 | 13,497,513 | 14,283,612 | 14,417,289 | 11,401,264 | 14,225,466 | 14,258,449 | 12,869,089 | 13,065,771 | 10,712,890 | 13,986,207 | 248,922,853 |
po neardeduplikaci | 11,675,540 | 10,235,720 | 11,497,064 | 10,364,118 | 11,368,100 | 10,739,974 | 11,928,285 | 11,856,781 | 10,605,308 | 11,125,573 | 11,296,278 | 9,061,115 | 11,252,212 | 11,159,926 | 10,046,860 | 10,266,312 | 8,333,024 | 10,897,033 | 193,709,223 |
po inkrementální deduplikaci | 15,453,792 | 1,382,063 | 1,726,778 | 1,227,687 | 1,453,991 | 1,062,187 | 1,260,128 | 1,244,134 | 955,326 | 924,314 | 836,878 | 714,636 | 945,781 | 1,130,096 | 1,087,456 | 936,315 | 722,957 | 985,277 | 34,049,796 |
po inkrementální neardeduplikaci | 10,429,073 | 463,743 | 542,288 | 262,169 | 475,620 | 209,076 | 256,643 | 260,088 | 157,469 | 137,950 | 154,390 | 132,593 | 217,288 | 246,024 | 215,418 | 310,357 | 102,328 | 197,985 | 14,770,502 |
Inkrementální deduplikace znamená, že byly CC zpracovány postupně (zleva doprava) se zachováním hashů. Inkrementální deduplikace byla provedena v pořadí Wikipedie -> všechny CC -> Clueweby.
Tabulka s přehledem velikostí jednotlivých zpracovaných sad:
CC-2014-42 | CC-2014-49 | CC-2014-52 | CC-2015-06 | CC-2015-11 | CC-2015-14 | CC-2015-18 | CC-2015-22 | CC-2015-27 | CC-2015-32 | CC-2015-35 | CC-2015-40 | CC-2015-48 | CC-2016-07 | CC-2016-18 | CC-2016-22 | CC-2016-26 | CC-2016-30 | Součet | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
před deduplikací | 70 GB | 36 GB | 35 GB | 31 GB | 33 GB | 30 GB | 37 GB | 36 GB | 30 GB | 33 GB | 34 GB | 25 GB | 34 GB | 33 GB | 26 GB | 27 GB | 21 GB | 34 GB | 605 GB |
po deduplikaci | 6.2 GB | 5.3 GB | 6 GB | 5.4 GB | 5.9 GB | 5.5 GB | 6.2 GB | 6.1 GB | 5.4 GB | 5.7 GB | 5.8 GB | 4.6 GB | 5.7 GB | 5.7 GB | 5.1 GB | 5.2 GB | 4.3 GB | 5.6 GB | 99.7 GB |
po neardeduplikaci | 4.7 GB | 4.1 GB | 4.6 GB | 4.2 GB | 4.6 GB | 4.3 GB | 4.8 GB | 4.8 GB | 4.2 GB | 4.4 GB | 4.5 GB | 3.6 GB | 4.5 GB | 4.5 GB | 4 GB | 4.1 GB | 3.3 GB | 4.4 GB | 77.6 GB |
po inkrementální deduplikaci | 6.2 GB | 590 MB | 735 MB | 524 MB | 622 MB | 453 MB | 544 MB | 533 MB | 409 MB | 397 MB | 357 MB | 305 MB | 408 MB | 483 MB | 462 MB | 399 MB | 304 MB | 421 MB | 14 GB |
po inkrementální neardeduplikaci | 4.2 GB | 196 MB | 232 MB | 110 MB | 204 MB | 89 MB | 110 MB | 106 MB | 65 MB | 57 MB | 66 MB | 58 MB | 94 MB | 106 MB | 94 MB | 137 MB | 43 MB | 87 MB | 6 GB |
Výsledky každé CC sady jsou uloženy na těchto strojích:
athena1 knot01 knot14 knot26 athena2 knot02 knot15 knot27 athena3 knot03 knot16 knot28 athena4 knot04 knot17 knot29 athena5 knot05 knot18 knot30 athena6 knot06 knot19 knot31 athena7 knot07 knot20 knot32 athena8 knot08 knot21 knot33 athena9 knot10 knot22 knot34 athena10 knot11 knot23 knot35 athena11 knot12 knot24 minerva2 athena12 knot13 knot25 minerva3
Výsledky jsou na výše zmíněných strojích umístěny v:
/mnt/data/commoncrawl/${CC}/wikilinks.dedup/ /mnt/data/commoncrawl/${CC}/wikilinks.near_dedup/ /mnt/data/commoncrawl/${CC}/wikilinks.dedup_inc/ /mnt/data/commoncrawl/${CC}/wikilinks.near_dedup_inc/
Skript pro deduplikaci wikilinks z CommonCrawlu:
/mnt/minerva1/nlp/repositories/corpora_processing_sw/processing_steps/3/wikilinksDedup.sh
Vhodný pro spuštění inkrementální deduplikace. Například:
wikilinksDedup.sh CC-2015-14 CC-2015-32 # zpracuje nejprve CC-2015-14 a poté CC-2015-32 se zachováním hashů wikilinksDedup.sh CC-2015-14 # zpracuje CC-2015-14
Konkrétnější cesty se musejí upravit uvnitř skriptu, stejně tak cesty k souborů specifikujícím stroje na kterých má deduplikace probíhat. (Pro neardedup nutno do skriptu přidat argument -n
).
Tabulka s přehledem počtu záznamů wikilinks zpracovaných sad:
ClueWeb09 | ClueWeb12 | Součet | |
---|---|---|---|
před deduplikací | 11,744,461 | 19,803,070 | 31,547,531 |
po deduplikaci | 6,907,001 | 7,186,902 | 14,093,903 |
po neardeduplikaci | 5,135,733 | 5,631,135 | 10,766,868 |
po inkrementální deduplikaci | 6,268,126 | 5,173,682 | 11,441,808 |
po inkrementální neardeduplikaci | 3,820,834 | 3,036,299 | 6,857,133 |
Inkrementální deduplikace byla provedena v pořadí Wikipedie -> všechny CC -> Clueweby.
Tabulka s přehledem velikostí jednotlivých zpracovaných sad:
ClueWeb09 | ClueWeb12 | Součet | |
---|---|---|---|
před deduplikací | 5.3 GB | 8.0 GB | 13.3 GB |
po deduplikaci | 2.4 GB | 2.5 GB | 4.9 GB |
po neardeduplikaci | 1.8 GB | 2 GB | 3.8 GB |
po inkrementální deduplikaci | 2.2 GB | 1.8 GB | 4 G |
po inkrementální neardeduplikaci | 1.3 GB | 1.1 GB | 2.4 GB |
Výsledky obou Cluewebů jsou uloženy na těchto strojích:
athena1 knot01 knot14 knot26 athena2 knot02 knot15 knot27 athena3 knot03 knot16 knot28 athena4 knot04 knot17 knot29 athena5 knot05 knot18 knot30 athena6 knot06 knot19 knot31 athena7 knot07 knot20 knot32 athena8 knot08 knot21 knot33 athena9 knot10 knot22 knot34 athena10 knot11 knot23 athena11 knot12 knot24 athena12 knot13 knot25
Výsledky jsou na výše zmíněných strojích umístěny v:
/mnt/data/clueweb/${09|12}/wikilinks.dedup/ /mnt/data/clueweb/${09|12}/wikilinks.near_dedup/ /mnt/data/clueweb/${09|12}/wikilinks.dedup_inc/ /mnt/data/clueweb/${09|12}/wikilinks.near_dedup_inc/
Wikipedie | Velikosti jednotlivých verzí | |
---|---|---|
před deduplikací | 125,192,634 | 36 GB |
po deduplikaci | 119,021,063 | 34,4 GB |
po neardeduplikaci | 76,920,163 | 22,2 GB |
po inkrementální deduplikaci | 119,021,063 | 34.4 GB |
po inkrementální neardeduplikaci | 76,919,387 | 22.2 GB |
Výsledky jsou uloženy na stejných strojích jako Commoncrawl v adresáři:
/mnt/data/wikipedia/wikipedia.wikilinks/
Wikipedie slouží jako vstup pro inkrementální deduplikace CC a Cluewebů.
thrift(hashe z CC) | thrift(hashe z Wikipedia) | thrift(hashe z Clueweb) | thrift(hashe z CC+Wikipedia) | thrift(hashe z CC+Clueweb) | thrift(hashe z CC+Wikipedia+Clueweb) | |
---|---|---|---|---|---|---|
před deduplikací | 35,359,606 | 35,359,606 | 35,359,606 | 35,359,606 | 35,359,606 | 35,359,606 |
po deduplikaci | 20,927,543 | 20,927,543 | 20,927,543 | 20,927,543 | 20,927,543 | 20,927,543 |
po neardeduplikaci | 18,622,532 | 18,622,532 | 18,622,532 | 18,622,532 | 18,622,532 | 18,622,532 |
po inkrementální deduplikaci | 20,927,499 | 20,926,875 | 20,927,493 | 20,926,831 | 20,927,450 | 20,926,782 |
po inkrementální neardeduplikaci | 15,750,839 | 16,815,066 | 18,618,274 | 14,432,668 | 14,560,364 | 13,348,602 |
Byly zpracovány CC sady a Clueweb. Všechny datové sady byly zpracovávány skriptem pro automatické spuštění nástroje Wikilinks runWikilinks.sh
. Skript pak spouští nástroj Wikilinks s následujícími parametry:
wikilinks.py -i <input_file> -o <output_file> -v -w -e -r <redirection_file> -d <disambiguation_file> -a <all_url_file> -W -I -P <pageTable_file> -k
-i
- specifies file containing list of WARC files to be analysed; it should contain one record per line; the record should be in the format <[path]warc_file_name>\t<number> or <[path]warc_file_name>-o
- specifies name of output file; log file will be called <output_file_name>.log-v
- verbose mode-w
- searches for links to Wikipedia-e
- only links to English Wikipedia will be recognized-r
- a tsv file containing redirections from English Wikipedia (in this case: /mnt/minerva1/nlp/projects/wikilinks/program/wikipedia-redirects.tsv)-d
- a tsv file containing disambiguation pages from English Wikipedia (in this case: /mnt/minerva1/nlp/projects/wikilinks/program/wikipedia-disambiguations.tsv)-a
- a tsv file containing all URL from English Wikipedia (in this case: /mnt/minerva1/nlp/projects/wikilinks/program/wikipedia-all.tsv)-W
- filtering out documents from Wikipedia-I
- filtering out URLs with fragment identifier-P
- a tsv file containing Wikipedia page table (CUIDs and its titles) (in this case: /mnt/minerva1/nlp/projects/wikilinks/xbolje00/wikipedia-pageTable.tsv)-k
- filtering out documents from unwanted domains {wikipedia|wikidata|wiktionary|wikimedia|wikisource|edwardbetts|instantchess|viaf|werelate|wmflabs|paheal|fallingrain|isni-url.oclc|blekko}Zpracované datové sady:
CC-2014-42 CC-2015-32 ClueWeb09 CC-2014-49 CC-2015-35 ClueWeb12 CC-2014-52 CC-2015-40 CC-2015-06 CC-2015-48 CC-2015-11 CC-2016-07 CC-2015-14 CC-2016-18 CC-2015-18 CC-2016-22 CC-2015-22 CC-2016-26 CC-2015-27 CC-2016-30
Výsledky naleznete v:
/mnt/minerva1/nlp/projects/wikilinks/results.{CC|clueweb}
Nebo na každém stroji v:
/mnt/data/commoncrawl/{CC}/wikilinks /mnt/data/clueweb/{09|12}/wikilinks
Verze wikilinks určená k distribuci obsahuje inkrementálně zpracované sady CommonCrawlu, Cluewebu a Wikipedie (dohromady představují Total Dataset. Z takto zpracované sady byla vytvořena podčást obsahující pouze mnohoznačná jména osob a lokací wikipedie (Disambiguation Subset).
Celková sada obsahuje inkrementální verzi deduplikace, provedenou v pořadí Wikipedie -> CommonCrawl -> Clueweb (podrobnosti viz. Deduplikace Wikipedie, Deduplikace CommonCrawl, Deduplikace ClueWeb). Je reprezentována více soubory (podle toho o jakou sadu se jedná - CC-2014-42, CC-2014-49, atd.) s koncovkou *.result. Celkem jich je 22. Z celkové sady byl vytvořen soubor obsahující pouze unikátní odkazy - Total_dataset.referred_entities
.
Kapitola se zabývá extrakcí podčásti mnohoznačných jmen osob a lokací ze zpracované sady Commoncrawlu, Cluewebů a Wikipedie.
Soubor obsahující mnohoznačná jména osob byl vytvořen na základě souborů z adresáře:
/mnt/minerva1/nlp/projects/decipher_wikipedia/wikipedia_statistics/person_statistics
Soubor obsahující mnohoznačná jména lokací byl vytvořen na základě souborů z adresáře:
/mnt/minerva1/nlp/projects/decipher_wikipedia/wikipedia_statistics/location_statistics/data/
Oba soubory byly sloučeny do jednoho výsledného, kterým se extrakce řídí:
/mnt/minerva1/nlp/projects/wikilinks/disambiguation_subset_extraction/all_ambiguous_names
Extrakci provádějí skripty, které byly převzaty a patřičně upraveny z projektu Opal Disambiguation. Skript all_servers_extract_context.sh
spouští skript extract_contexts.sh
, provádějící samotnou extrakci, na všech strojích. Pro skript all_servers_extract_context.sh
je nutné manuálně zadat cesty proměnných project_dir
(adresář s těmito skripty), output_file_destination
(adresář, kam budou výsledky extrakce uloženy) a ambiguous_names_file
(soubor s mnohoznačnými jmény).
Upravené verze skriptů použité pro tuto extrakci najdete v:
/mnt/minerva1/nlp/projects/wikilinks/disambiguation_subset_extraction/all_servers_extract_contexts.sh /mnt/minerva1/nlp/projects/wikilinks/disambiguation_subset_extraction/extract_contexts.sh
Disambiguation subset je rozdělena do 3 souborů:
CommonCrawl.result Clueweb.result Wikipedia.result
Ze sady byl opět vytvořen soubor obsahující pouze unikátní odkazy:
Disambiguation_subset.referred_entities
Total Dataset | Disambiguation Subset | |
---|---|---|
Počet zmínění | 164,512,667 | 10,557,592 |
Referencované entity | 4,417,107 | 286,273 |
Velikost v GB | 52 | 3.1 |
Kde Total Dataset představuje celkovou datovou sadu wikilinks (CommonCrawl + ClueWeb + Wikipedie). Disambiguation Subset je pak extrahovaná podčást obsahující mnohoznačná jména osob a lokací z Total Dataset. Number of mentions značí celkový počet wiki odkazů (tedy řádků) v jednotlivých datasetech. Referred entities značí počet unikátních odkazů v rámci datasetu.
Total Dataset [1] a Disambiguation subset [2] naleznete v těchto adresářích:
[1] /mnt/minerva1/nlp/projects/wikilinks/wikilinks_for_distribution/Total_dataset/*.result [2] /mnt/minerva1/nlp/projects/wikilinks/wikilinks_for_distribution/Disambiguation_subset/*.result
Total Dataset a Disambiguation subset byly zabaleny:
[1] /mnt/minerva1/nlp/projects/wikilinks/wikilinks_for_distribution/Total_dataset.tar.gz [2] /mnt/minerva1/nlp/projects/wikilinks/wikilinks_for_distribution/Disambiguation_subset.tar.gz
Oba archivy obsahují README.txt
soubor s popisem daného archivu a jeho ostatních souborů.
TSV soubory nutné pro zpracování datových sad nástrojem wikilinks jsou umístěné v :
/mnt/minerva1/nlp/projects/wikilinks/program
O jejich aktualizaci se stará skript tsv_update.py
umístěný v:
/mnt/minerva1/nlp/projects/wikilinks
Pro urychlení zpracování nástroje wikilinks byly z tsv souborů kompletně vypuštěny plné URL adresy a ponechány pouze jejich názvy, tzn. odstraněn prefix http://en.wikipedia.org/wiki/ a podtržítka "_" nahrazena mezerami " ". wikilinks.py
si pak zpětně pro další zpracování vyrábí z názvů URL adresy.
Obsahuje všechny názvy URL adres anglické wikipedie, každý na jeden řádek. Jsou v ní tedy zahrnuty jak přímé názvy, tak názvy přesměrování. K aktualizaci jsou využity dva soubory z projektu Decipher wikipedia.
/mnt/minerva1/nlp/projects/decipher_wikipedia/redirectsFromWikipedia/wikipedia-regular-pages.tsv /mnt/minerva1/nlp/projects/decipher_wikipedia/redirectsFromWikipedia/wikipedia-redirects.tsv
které po sloučení dají výsledný:
wikipedia-all.tsv
Ukázka formátu:
Napoleon Napoleon's Barber Napoleon's Campaigns in Miniature
Obsahuje pouze názvy disambiguačních stránek, každou na jeden řádek. Pro aktualizaci je použit soubor z projektu Wikipedia disambiguation pages:
/mnt/minerva1/nlp/projects/wikipedia_disambiguation_pages/output/wp_disambiguation_titles.sorted
který přímo dává výsledný:
wikipedia-disambiguations.tsv
Ukázka formátu:
Napoleon at St. Helena Napoleon (disambiguation) Napoleone Orsini (disambiguation)
Obsahuje všechny názvy URL adres přesměrování. Vždy na jednom řádku název cílové adresy přesměrování a k ní skupinku všech názvů, které se na cílovou adresu přesměrovávají, oddělených znakem "|".
Formát:
název_cílové_adresy\tnázev_adresy_přesměrování1|název_adresy_přesměrování2|...
Pro aktualizaci je použit soubor z projektu Decipher wikipedia:
/mnt/minerva1/nlp/projects/decipher_wikipedia/redirectsFromWikipedia/wikipedia-redir-table.tsv
který přímo dává výsledný:
wikipedia-redirects.tsv
Ukázka formátu:
Napoleon Napolean Bonapart|Napolean Bonaparte Napoleon Dynamite Napolean Dynamite
Porovnání bylo provedeno na datových sadách CC-2015-32 a CC-2015-40. Obě sady byly zpracovány nejdříve ze vstupních souborů WARC formátu, poté ze vstupních souborů VERT formátu. V obou případech byl nástroj wikilinks spuštěn se stejnými parametry. V případě VERT se formátu se překvapivě nalezlo více wiki linků, viz. tabulka:
Datová sada | CC-2015-32 | CC-2015-32 | CC-2015-40 | CC-2015-40 |
---|---|---|---|---|
File type | WARC | VERT | WARC | VERT |
Celkový počet nalezených wiki odkazů | 60,488,837 | 87,742,422 | 34,500,684 | 66,292,376 |
Celková doba zpracování | 10 hr, 32 min | 4 hr | 14 hr, 49 min | 1 hr, 50 min |
Ide o skript:
/mnt/minerva1/nlp/projects/wikilinks/xbolje00/pageTable.py
Skript filtrujúci údaje z SQL skriptu obsahujúceho príkazy pre vytvorenie a naplnenie tabuľky. Ide o tabuľku page table.
Má nasledovnú schému:
+--------------------+---------------------+------+-----+----------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+---------------------+------+-----+----------------+----------------+ | page_id | int(10) unsigned | NO | PRI | NULL | auto_increment | | page_namespace | int(11) | NO | MUL | NULL | | | page_title | varbinary(255) | NO | | NULL | | | page_restrictions | tinyblob | NO | | NULL | | | page_counter | bigint(20) unsigned | NO | | 0 | | | page_is_redirect | tinyint(3) unsigned | NO | MUL | 0 | | | page_is_new | tinyint(3) unsigned | NO | | 0 | | | page_random | double unsigned | NO | MUL | NULL | | | page_touched | binary(14) | NO | | | | | page_latest | int(10) unsigned | NO | | NULL | | | page_len | int(10) unsigned | NO | MUL | NULL | | | page_content_model | varbinary(32) | YES | | NULL | | | page_links_updated | varbinary(14) | YES | | NULL | | +--------------------+---------------------+------+-----+----------------+----------------+
Pre ďalšie spracovanie sú podstatné stĺpce page_id a page_title. Práve hodnoty týchto stĺpcov z príkazov INSERT sa pri spracovaní ukladajú a následne sú uložené do výstupného súboru.
Formát spustenia:
./pageTable.py -i {input_file} -o {output_file}
Vstupný SQL skript:
/mnt/minerva1/nlp/projects/decipher_wikipedia/redirectsFromWikipedia/enwiki-latest-page.sql
Cesta k výstupnému súboru:
/mnt/minerva1/nlp/projects/wikilinks/xbolje00/wikipedia-pageTable.tsv
Formát výstupného súboru:
page_id\tpage_title page_id\tpage_title ...
Program pre dekódovanie datovej sady wikilinks z formátu apache thrift do požadovaného formátu. Jedná sa o nástroj gsoc-wikilinks, ktorý je upravený pre naše účely. Program sa spúšťa s dvoma parametrami, ktoré určujú vstupnú a výstupnú zložku. Vo vstupnej zložke sa prechádzajú všetky súbory, dekóduju sa a ukladajú do výstupnej zložkzy. Ak by sa jednalo o chybný súbor: nedá sa čítať, nie je vo formáte apache thrift atď, výhodí sa výnimka a pokračuje sa na další súbor. Vo výstupe musí byť udaný offset adresy a textu. Offset textu je vždy daný ale offset adresy bolo potrebné dopočítať. To je ale možné len v prípade že je dostupný samotný html dokument.
Samotný program sa nachádza v zložke:
/mnt/minerva1/nlp/projects/wikilinks/gsoc-wikilinks
V adresári programu spustiť príkaz:
mvn package
Po úspšnom preložení sa v zložke target vytvoria 2 jar archívy:
gsoc-wikilinks-1.0-SNAPSHOT.jar gsoc-wikilinks-1.0-SNAPSHOT-jar-with-dependencies.jar
Pomocou príkazu:
java -Xmx1g -jar gsoc-wikilinks-1.0-SNAPSHOT-jar-with-dependencies.jar -i "input_directory" -o "output_directory"
input_directory
- zložka v ktorej sa nachádzaju súbory pre spracovanieoutput_directory
- zložka do ktorej sa budú ukladať výstupné súboryBolo uskutočnené dekódovanie datovej sady, ktorá obsahovala takmer všetky dostupné dokumenty a teda bolo možné v nej dosť často dopočítať offset adresy.
Použitá datova sada sa nachadza v zložke:
/mnt/data-2/nlp/wiki-links/Dataset (with complete webpages)
Výstup sa nachádza v zložke:
/mnt/data/nlp/projects/wikilinks/result_from_thrift
Počet súborov | 109 |
Celkový čas | 14:33:31 |
Počet dokumentov | 10,629,486 |
Počet linkov | 36,166,829 |
Dopočítane offsety | 32,638,607 |
Chýbajúce offsety | 3,528,222 |
Dopočítane offsety v % | 89% |