OpenRefine: Reconcile-csv

Zdeněk Nešpor OpenRefine 2 Comments

Spojování dvou datasetů s výrazy ve volné shodě nepatří mezi snadné a zábavné činnosti. Totéž platí o vytváření redirectovacích tabulek. Chcete zjistit, jak vám může OpenRefine ve spojení s nástrojem Reconcile-csv zjednodušit párování dat?

Reconcile-csv je open source nástroj dostupný zdarma pod BSD licencí, který využívá fuzzy párování. Párovat datasety, u kterých chybí unikátní identifikáty, může být velmi náročné. Zvlášť pokud nemáte k dispozici ty správné nástroje. V tomto tutoriálu vám ukážu, že párovat data může být celkem jednoduché. Jako hlavní příklad použiji dva datasety URL a ukážu jak vytvořit redirectovací tabulku.

Obsah článku

0. Prerekvizity

Rozběhnutí služby Reconcile-csv je snadné a není k tomu potřeba nic neobvyklého. Vše potřebné naleznete v seznamu níže.

1. Stažení a příprava nástrojů

Vytvořte si novou složku, třeba na ploše. Pojmenujte si ji nějakým rozumným názvem. Například reconcile.

Do složky si stáhněte si službu reconcile-csv-0.1.2 z odkazu http://okfnlabs.org/reconcile-csv/dist/reconcile-csv-0.1.2.jar.

2. Příprava datasetů

Nyní si potřebujete dva datasety, které chcete sloučit. Pro přehlednost je můžete pojmenovat jako alfa a beta. Oba datasety musí obsahovat sloupce s hodnotami, u kterých je možné určit, zda jsou shodné či podobné.

Cílem návodu je příprava tabulky pro přesměrování. Oba datasety tedy budou obsahovat URL. Alfa obsahuje staré URL, které jsou určeny k přesměrování. A beta obsahuje nové URL, které budou sloužit jako cíl pro přesměrování.

  1. Vyberte první z dataset – alfa. Ten by měl obsahovat důvěryhodnější, čistější a kompletnější data. Tento bude totiž využit jako primární zdroj dat pro reconcile-csv.
  2. Data doporučuji očistit o duplicity a nepotřebné sloupce. Stačí, když tento dataset bude mít jen dva sloupce.
  3. Přidejte jeden sloupec s unikátními ID hodnot určených k procesu párovaní. Jako unikátní ID postačí například číslování od 1 dále nebo libovolný jiný typ identifikátoru, který je možné vytvořit rychle a jednoduše například v Excelu. Pokud již data nějaký sloupec s unikátním identifikátorem obsahují, tak můžete tento krok přeskočit.
    • Tento sloupec se musí jmenovat ID.
  4. Data uložte jako soubor .csv. Hodnoty musí být oddělené pouze čárkou! Textové hodnoty musí být odděleny pouze uvozovkami! Viz ukázka níže.

Příklad datasetu alfa:

"URL","ID"
"kontakt",1
"nejaka-url",2
"kategorie/podkategorie/produkt",3
"clanek-na-blogu?id=666",4
"files/bootstrap.css",5

Ještě jednou pro jistotu. Jediný povolený delimiter je čárka [,]. A jediný povolený oddělovač textu (text qualifier) jsou dvojité uvozovka [„“].

  1. Pokračujte s druhým datasetem – beta.
  2. Data opět doporučuji očistit o duplicity a nadbytečné sloupce. Stačí, když zde bude jen jeden sloupec s novými URL.
  3. Data uložte ve formátu, který zvládne zpracovat OpenRefine.

Příklad datasetu beta:

"URL"
"novy-kontakt"
"vytunena-url"
"kategorie"
"pr-clanek"
"bootstrap_v4.css"

3. Spuštění rekonciliačního serveru

V tomto kroku spustíme rekonciliační službu. Ve které definujeme, kde se nachází nástroj reconcile-csv, definujeme cestu k souboru pro dataset alfa, a identifikujeme sloupce s daty a identifikátory.

Otevřete konzoli a zadejte příkaz v následujícím tvaru.

java -Xmx2g -jar reconcile-csv-0.1.2.jar <csv-soubor> <sloupec hodnot> <sloupec s ID>

  1. reconcile-csv-0.1.2.jar – cesta ke staženému souboru reconcile-csv.
  2. csv-soubor – cesta k připravenému datasetu alfa.
  3. sloupec hodnot – sloupec na základě které bude probíhat párování.
  4. sloupec s ID – sloupec obsahující existující nebo dodatečně vytvořené unikátní ID hodnot.

Příklad Linux:

java -Xmx2g -jar /home/chaoticum/Downloads/reconc/reconcile-csv-0.1.2.jar /home/chaoticum/Downloads/reconc/alfa.csv "URL" "ID"

Příklad Windows:

java -Xmx2g -jar "C:\Users\Chaoticum\Desktop\reconcile-data\reconcile-csv-0.1.2.jar" "C:\Users\Chaoticum\Desktop\reconcile-data\01-dataset-alfa.csv" "URL" "ID"

Tipy, chyby a debugging

Doporučuji cesty k souborům a sloupcům vložit mezi uvozovky. Pokud to neuděláte a bude se v názvu souboru vyskytovat třeba mezera, tak se rekonciliační server nespustí a konzole vrátí chybu Exception in thread „main“ java.io.FileNotFoundException: … (No such file or directory). Pokud tuto chybu vidíte, tak to v drtivé většině případů znamená, že jste některou položku definovali špatně – překlep v názvu souboru, chybná cesta k souboru, neuzavřená cesta k souboru do uvozovek, překlep v názvu sloupce a podobně.

Tip pro Windows. Když zmáčknete a podržíte klávesu shift a kliknete pravým tlačítkem myši na soubor, tak uvidíte možnost „Copy as Path“ / „Zkopírovat jako cestu“. Zkopírujte a vložte do konzole. Eliminujete tak chyby při přepisu cesty nebo názvu souboru.

Úspěšné spuštění serveru

Na obrázku níže vidíte, jak vypadá úspěšně zadaný příkaz pro vytvoření rekonciliačního serveru. Server byl spuštěn na adrese http://localhost:8000/reconcile. Tu budete potřebovat v další fázi. Okno terminálu nezavírejte. Je nutné, aby bylo otevřené po celou dobu, kdy budete pracovat. Ve chvíli, kdy konzoli zavřete, bude rekonciliační server uzavřen.

4. Nastavení OpenRefine

Spusťte OpenRefine. Ten by měl být po spuštění dostupný na lokální adrese http://127.0.0.1:3333/. Nahrajte předem připravený dataset beta a založte nový projekt. Nic nezvyklého.

Nyní máte vytvořený projekt. V záhlaví sloupe s URL klikněte na šipku. Vyberte z nabídky možnost Reconcile a následně Start Reconciling.

V otevřeném okně klikněte na tlačítko Add Standard Service a do textového pole vložte adresu rekonciliačního serveru, což je http://localhost:8000/reconcile. Klikněte na Add Service. A nyní klikněte na nově přidanou službu.

Uvidíte nastavení služby. Pokud nastavení nerozumíte, tak doporučuji ponechat ve výchozím stavu. A klikněte na tlačítko Start Reconciling.

V této chvíli již běží služba, která porovnává datasety alfa a beta. Celý proces trvá v závislosti na tom, kolik dat oba datasety obsahují. Pokud jste nahráli datasety o velikosti desítek až stovek tisíc řádků, tak se raději obrňte trpělivostí. Probíhá náročný proces fuzzy párování a všechny řádky musí být vzájemně porovnány.

5. Manuální a automatické párování a export dat

Párování dat úspěšně doběhlo do konce. V rozhraní byste měli vidět sloupec URL. Ten nyní obsahuje na první pozici hodnotu (URL) z datasetu beta – tedy nové cílové URL. A na dalších pěti pozicích vidíte URL z datasetu alfa, které k nim byly předběžně přiřazeny. Na prvním místě je hodnota (URL), která má nejlepší skóre (shodu) k cílové URL.

Kliknutí na jednoduchý checkbox hodnotu napevno přiřadí a spárujete. (Dvojitý checkbox pro naše data není možné využít). Manuálním klikáním, se ale daleko nedostanete. Přesuňte pozornost do levého panelu. Tam vidíte faset best candidate’s score s hodnotami od 0 do 1. Kdy 1 je nejlepší shoda a 0 žádná shoda.

Automatický výběr

Nastavte si filtr v rozpětí od 0.90 do 1. V tomto segmentu jsou data, která je většinou bez problému možné napárovat. Očima prolétněte, zda data sedí. Opravte ručně to co nesedí. Ve chvíli kdy jste si jistí že je vše OK, tak klikněte na šipku v záhlaví sloupce. Vyberte z nabídky možnost Reconcile, následně Actions a konečně Match each cell to its best candidate. Tím automaticky napárujete všechny vyfiltrované URL podle nejlepší shody.

Tímto způsobem můžete postupovat až do konce. Metodiku upravte tak, aby vyhovovala vám a byla adekvátní pro data, která máte.

Manuální výběr

Pokud neexistuje žádná dobrá shoda, tak můžete vytvořit novou. Nebo pomocí volby Search for match najít úplně novou možnost, například pokud chcete starý článek přesměrovat na nejakou jinou URL než je URL nového článku.

Tipy a doporučené fasety

URL u kterých si nejste jistí používejte označení hvězdičkami nebo vlajkami. Udělejte si fasetu, která zajistí, že takto označené položky nebudou zobrazovány ve výběru a vraťte se k nim později.

Připravte si fasety na základě koncovek souborů: .jpg | .png| .css | .js a tak dále. A pracujte s nimi samostatně.

Vytvořte si fasetu na již spárované hodnoty a vyřaďte ji ze zobrazení.

Export

Jakmile máte kompletně napárovaná data, tak můžete přejít k poslednímu kroku. Nejdříve vypněte nebo smažte všechny aktivní fasety. Vytvořte nový sloupec na základě existujícího. Tedy Edit column a Add column based on this column. Jako Expression vložte cell.recon.match.id. Do sloupce se přidají ID, pomocí kterých už je velice snadné obsa datasety spojit do finální redirectovací tabulky.

Sørensen–Dice koeficient

Párování funguje na bázi Sørensen–Dice koeficientu podobnosti. Jedná se o celkem jednoduchý princip. Vězměte si tři slova.

  • satan
  • santa
  • lucifer

Rozdělte je po bigramech. Tedy po dvou po sobě jdoucích znacích.

  • sa at ta an
  • sa an nt ta
  • lu uc ci if fe er

Spočítejte počet bigramů.

  • satan – 4
  • santa – 4
  • lucifer – 6

Pro všechny kombinace slov spočítejte kolik bigramů mají shodných.

  • sa at ta an || sa an nt ta – 3
  • sa an nt ta || lu uc ci if fe er – 0
  • lu uc ci if fe er || sa at ta an – 0

Spočítejte koeficient podobnosti na základě vzorečku k=2x/a+b. k je koeficient. 2 jsou dva porovnané výrazy. x je počet shodných bigramů. a je počet bigramů v prvním slově. b je počet bigramů ve druhém slově.

  • sa at ta an || sa an nt ta || 2*3/4+4 = 0.75
  • sa an nt ta || lu uc ci if fe er || 2*0/4+6 = 0
  • lu uc ci if fe er || sa at ta an || 2*0/6+4 = 0
  • Výsledkem je, že slova satan a santa mají koeficient podobnosti 0.75, což je poměrně vysoké. A satan a lucifer 0, přestože se jedná o výrazy s podobným významem. Sørensen–Dice koeficient je opravdu jednoduchý princip. Ale na párování URL datasetů se mi docela dobře osvědčil.

    Známé bugy a jak na ně

    Bugů by se mělo vyskytovat minimum nebo spíše žádné. Nástroj funguje spolehlivě. Všechny chyby, na které narazíte jsou většinou spojené s chybně zadanými daty nebo cestami k souborům. Pokud narazíte na něco, s čím si neumíte poradit, tak napište do komentářů. Pokusím se vám pomoci.

    Open Knowledge Labs: Reconcile-csv – informace o službě Reconcile-csv
    GitHub: Reconcile-csv – repozitář na GitHubu
    OpenRefine.org
    Sørensen–Dice coefficient na Wikipedii
    OpenRefine – Vlastní reconcile server z CSV souboru – návod na reconcile-csv od Marka Leciána s dalšími tipy na fasety a využití nástroje

    Závěrem

    Tento postup je spíše jen takový začátek, jak přemýšlet nad daty a jejich párováním jinak než jen v Excelu. Naučit se používat nový nástroj. Poznat nové metody. Dalšími kroky může být komplexnější automatizace a machine learning. Protože u menšího projektu je tento postup docela adekvátní. Ale u velkého webu nebo u velkých silně fuzzy datasetů si dost pravděpodobně vylámete zuby.

    Článek bude ještě aktualizován o drobné vychytávky. A budu rád, když mi napíšete, jak se vám postup líbí, jestli vám nějak pomohl a nebo zda případně používáte už něco vychytanějšího.

    READ. SHARE. REPEAT.
    • 6
    •  
    •  
    •  
    •  
    •  
      6
      Shares

    Comments 2

    1. Prvně v životě řeším přesměrování na webu s více než 100tisíc URL.

      Článek je super, nikde jsem nenarazil na žádný problém.

      Díky

      1. Post
        Author

    Napsat komentář

    Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.