Hur man extraherar data från tabeller i PDF-filer med Tabula och OpenRefine

Det finns massor av data där ute, låsta i tabeller inbäddade i PDF-uppsatser och rapporter. PDF-filer är allestädes närvarande, men det är svårare att använda data som höjdes inuti dem än det skulle vara i ett kalkylblad. Även om du kan extrahera data kan det vara svårt att få konsekventa resultat. Ett bord kan ha linjer för att peka på cellgränserna, medan andra bara kan ha vita utrymmen för att uppnå en tabellvy. De kan också variera när det gäller att innehålla spänningar och / eller kolumner, och ofta är den enda konstanten att de alla har data du vill extrahera.

Medan du manuellt kan extrahera data från ett bord i en PDF, är det långt ifrån enkelt. Det finns ingen anledning att ta så mycket tid när det finns verktyg för att göra vårt jobb enklare. I den här handledningen visar jag dig hur du enkelt kan extrahera tabellen från PDF-filen med Tabula, och rengör sedan de rotiga dataen till en mer användbar form med OpenRefine.

Varför Tabula?

Alla som arbetar med data känner till ett vanligt problem: du hittade några intressanta data för ditt journalistiska projekt eller statistik för att förbereda en bra karta, men dataen blir rörig och fångad i en PDF-fil, inte automatiskt läsbar av ditt program. Så, antingen måste du skriva ut eller utföra en lång process av kopiera och klistra rader av data från PDF-fil till Excel. Denna typ av manuellt arbete skapar friktion och förlorar du mycket tid.

Att vara forskare, jag har gått igenom denna smärta av att manuellt kopiera och klistra in bord för min avhandling. Jag har alltid drömt om en applikation som kan extrahera tabellen från PDF med ett enda klick - och det är precis vad Tabula är. Det är en gratis, java-driven app som körs i ett webbgränssnitt på din dator som kan extrahera data från nästan vilken tabell som helst i en PDF. På några sekunder kan det extrahera data som tar dig timmar att skriva ut manuellt.

Så här använder du Tabula?

Först av, ladda ner motsvarande zip-fil för din dator från Tabula-webbplatsen och plocka upp dem till en mapp efter eget val. Se till att du har Java v6 eller 7 installerad också; Om inte, kan du ladda ner det gratis från Oracle-webbplatsen. Den här länken är till annons / verktygsfria versionen, så du behöver inte oroa dig för något annat som installeras.

När du startar Tabula kommer du först att se ett kommandofönster och inom några sekunder öppnar din webbläsare automatiskt http://127.0.0.1:8080. Om inte, öppna din webbläsare och skriv denna URL i adressfältet. Lämna din PDF-fil och Tabula kommer att behandla din fil och visa dig en fin lista med sidminnebilder. Leta efter bordet du vill extrahera, eller om du har en liten PDF kan du kontrollera alternativet "Auto-Detect Tables".

Hemskärmen i Tabula visar sid miniatyrbilder och tabell du vill extrahera

Klicka och dra för att välja området i tabellen. När du släppt musen visar Tabula dig det extraherade bordet i ett vänligt format. Om data är fuzzy, försök ta bort rubrikerna eller fotnoter och mer. Slutligen kan du antingen ladda ner det extraherade tabellen som kommaseparerade värden (CSV) eller flikavskiljda värden (TSV) eller kopiera data till utklippstavlan. När uppgifterna finns i kalkylbladet kan du behöva göra lite redigering, till exempel korrigera rubriker eller fotnoter.

Extraktat bord från PDF med Tabula

När du behöver stänga Tabula i Windows, växla till det kommandofönstret och tryck på Kontroll-C. Vänta tills det finns ett meddelande som säger att avstängningen är klar. Det fönstret kan stängas automatiskt, eller stänga det själv. I Mac växlar du till appen (högerklicka på ikonen i dockningsstationen) och trycker på CMD-Q. Om du kör Mac OS X 10.8 eller senare, se till att justera Gatekeeper-inställningarna för att undvika felmeddelanden under installationen.

Tabula blir inte perfekt hela tiden, och det finns fortfarande några problem att sortera ut. Från och med nu fungerar det bara på textbaserad PDF, så du är fast med manuellt arbete om du har skannat PDF-filer. Men om du har en kopia av Acrobat kanske du kan konvertera bild PDF-filer till en redigerbar PDF som kommer jobba med Tabula. Om du har PDF-filer med flera rader, kommer Tabula också att rapportera frekventa fel i tabeller utan grafiska radavskiljare, så var noga med att se upp för det.

Varför OpenRefine?

Oavsiktlig felstavning, extra utrymme, slumpmässigt skiljetecken, konstig kapitalisering, dubbletter och mer är parallella kursen när du extraherar data från PDF-filer. Oavsett hur trevligt utdraget ser vid första anblicken kommer dina data att bli en röra om det finns det några fel, skapa problem vid datainsamling, driftskompatibilitet och indexering.

Det är där OpenRefine (tidigare Google Refine) kommer in. Det är ett annat gratis verktyg som hjälper dig att enkelt identifiera dessa fel och data felaktigheter. OpenRefine gör det inte bara möjligt för dig att snabbt diagnostisera noggrannheten i dina data, utan också hantera vissa fel på ett automatiskt sätt. Det kan omvandla data över många befintliga celler i bulk. För att städa upp data kan den utvidgas med mer data från andra källor och konvertera den till andra format så att du kan använda den i de appar som du vill ha.

Så här använder du OpenRefine?

OpenRefine har återigen ett webbgränssnitt, körs på din dator och kräver Java. Den enda skillnaden är den här gången, den öppnas i din webbläsare på http://127.0.0.1:3333.

När du öppnar OpenRefine kan du märka tre alternativ på vänster sida: Skapa projekt där du kan importera data antingen från dator, webbadress, urklipp eller Google-kalkylblad Öppet projekt vilket hjälper dig att gå tillbaka till ett befintligt projekt som skapats under en tidigare session. och Importprojekt vilket gör att vi direkt kan importera ett befintligt OpenRefine-projektarkiv. OpenRefine förstår en mängd olika datafilformat, inklusive TSV, CSV, Excel-dokument och till och med XML och JSON-en favorit för webb- och applikationsutvecklare.

Hemskärm av OpenRefine

Bläddra till din exporterade CSV-fil och klicka på Nästa. På nästa skärm får du en översikt över ditt dataset som det kommer att visas i OpenRefine. Som standard analyseras första raden som namnet på en kolumn. Ett annat alternativ är kryssrutan "Citatmärken används för att bifoga celler som innehåller kolumnavskiljare". Om du lämnar den markerad, var noga med att verifiera att alla cellvärden verkligen är bifogade i citat i originalfilen. Annars avmarkerar du den här rutan för att se till att citattecken inte tolkas av OpenRefine.

De andra alternativen kan komma till nytta i vissa fall; försök att välja och avmarkera dem för att se hur de påverkar dina data. Lägg märke till hur förhandsgranskningen uppdateras för att återspegla dessa ändringar. Var noga med att välja rätt kodning för att undvika att specialtecken blandas upp. När allt verkar rätt, ge ditt projekt ett namn och klicka på Skapa projekt.

Dataset laddad i OpenRefine

För att visa de olika metoderna för datamanipulering kan du antingen använda din egen dataset eller ladda ner en demo-dataset från Github-arkivet för att försöka dig själv. När din dataset har laddats i OpenRefine bör du lära dig att utforska data genom att skanna de olika zonerna. Från topp till botten kan du observera fyra zoner.

I den första zonen kan du se det totala antalet rader för en viss fil. I den andra zonen kan du försöka växla mellan rader och poster genom att klicka på ettdera ordet. I den här zonen kan du välja om du vill visa 5, 10 eller 50 rader / poster på en sida och ger också rätt sätt att navigera från sida till sida. I den tredje zonen hittar du här den första raden som analyserades som kolumnrubrik när projektet skapades. I min dataset läser kolumnerna universitet, begåvning, numFaculty och så vidare. Vänster kolumn kallas alltid Allt och är uppdelad i tre underkolumner som innehåller stjärnor, flaggor och ID-skivor. Varje kolumn har en meny som kan nås genom att klicka på den lilla nedrullnings triangel. Slutligen visar den fjärde zonen det faktiska huvudområdet som visar cellernas verkliga värden. Om du sveper muspekaren över en cell kan du redigera den aktuella datatypen.

Olika zoner i OpenRefine

Kolumner är en viktig del av OpenRefine och som standard utökas alla kolumner vilket kan vara besvärligt om det finns många kolumner i projektet. Om du vill tillfälligt gömma en kolumner för att underlätta arbetet med de andra klickar du på den lilla nedrullnings triangel i vilken kolumn som helst för att visa menyn och välj Se. Du kan se fyra alternativ här: Dölj denna kolumn, Dölj alla andra kolumner, Dölj kolumner till vänster och Dölj kolumner till höger.

Spela med de enskilda kolumnalternativen tills du är nöjd med resultatet. Om du vill expandera en kolumn igen klickar du bara på den. I vissa fall kan det vara bra att ändra kolumnernas ordning, till exempel för att sammanföra kolumner som behöver jämföras. För att uppnå detta, skriv in menyn i någon kolumn och klicka på Redigera kolumn. Återigen finns fyra alternativ: Flytta kolumn till början, Flytta kolumn till slutet, Flytta kolumn till vänster och Flytta kolumn till höger. Om du vill ombeställa kolumnerna helt, använd kolumnen som heter Allt

De Se alternativet här erbjuder dig ett snabbt sätt att expandera eller kollapsa alla kolumner, medan Redigera kolumn erbjuder dig ett snabbt sätt att omorganisera kolumner genom att dra dem runt eller undertrycka dem genom att släppa dem till höger, som visas i följande skärmdump.

Kolumner omarrangörs i OpenRefine

När ditt projekt är stort är det första du bör lära dig att sortera data som visuellt hjälpmedel eftersom sortering kan göra datasetet enklare att utforska och manipulera. För att sortera dina uppgifter av deras universitet namn, välj Sortera i kolumnmenyn för att komma åt följande skärm. Titta på skärmdumpen kan du sortera cellvärden enligt deras typ: text, nummer, datum och booleaner och för varje typ kan de sorteras i olika ordning.

Text kan till exempel sorteras antingen i alfabetisk (a till z) eller omvänd alfabetisk (z till a), booleans falsk dålig eller vice versa och så vidare. Dessutom kan vi ange var fel och blankor ska lagras i förhållande till giltiga värden genom att dra dem i önskad ordning. Till exempel kan fel sorteras först för att fånga dem lättare, följt av giltiga värden i mitten och tomma värden i slutet.

Sortera data i OpenRefine

Ett av verktygen i OpenRefine som du brukar oftast är fasettering. Vanligtvis skapar du en fasett på en viss kolumn. Facet sammanfattar cellerna i den kolumnen för att ge dig en stor bild av dina data i sidofältet och samtidigt låter dig filtrera data till en del av raden som du vill ändra i bulk. Det finns olika sätt att fasadata och beroende på datasetvärden och dina behov är de: textfacetter för strängar, numeriska fasetter för nummer och datum och anpassade fasetter för att definiera din egen text och numeriska fasetter.

Textfacet är ett mycket användbart verktyg som liknar filtret i ett kalkylblad. Textfacetgrupper Unika textvärden i grupper. Detta kan hjälpa oss att sammanfoga information och vi kan se värderingar som kan stavas på många olika sätt. Nu ska vi skapa en textfasett på Land kolumn genom att klicka på den kolumnens rullgardinsmeny och välj Facet → Textfasett.

Resultatet av denna fasett visas i fliken Facet / Filter till vänster på skärmen. I följande skärmdump kan vi se kolumnen Land grupperade enligt namnen, men jag hittade några konstiga poster som "USA", "USA" och "USA", tillsammans med de udda "USA"). Är de inte alla samma?

Textfasett i OpenRefine

Du kan manuellt redigera dessa skillnader, men du behöver inte. Alternativet Klunga hjälper dig att hitta den här typen av smutsiga data enkelt och fixa dem. Klicka på Land kolumnrutan och navigera till Redigera celler → Kluster och Redigera, OpenRefine kommer då att presentera en dialogruta där du kan välja olika klustringsmetoder, som alla kan använda olika nyckelfunktioner.

I Värden i Cluster, Du kan se de olika stavningarna och hur många rader innehåller en viss stavning. De Sammanfoga? kolumnen innehåller en kryssruta och om du markerar det ändras alla värden i det klustret till värdet i Nytt cellvärde kolumn. Här kan jag manuellt mata in det nya cellvärdet som "Amerikas förenta stater" och sedan kan du klicka Slå samman och välj Merge knappen för att slå samman alla valda kluster.

Det kan hända att du hittar några fler skillnader i datasetet. Om så är fallet, välj annorlunda Metod från rullgardinsmenyn och välj annorlunda Nyckelfunktioner. Spela med olika alternativ tills du löser alla inkonsekvenser. Om du vill gräva i hur OpenRefine-gruppering fungerar, var noga med att kolla denna artikel i sin Github.

Clustering i OpenRefine

Om en textfasett grupperar unika textvärden i grupper, sätts ett numeriskt fasettgruppsnummer i numeriskt intervall. Vi behöver städa data för antalet studenter i numStudents kolumn. Inte alla värden är numeriska, och många av dem kan innehålla bitar av text utöver det faktiska numret på eleverna. För att räkna ut vilka poster som behöver åtgärdas, använder jag en numerisk fasett.

I numStudents kolumnmeny, navigera till Facet → Numerisk fasett och titta på vad som visas i Fasett / Filter fliken till vänster. Detta visar oss ett histogram av värdena och listar också antalet poster per typ (numeriskt, icke-numeriskt, tomt, fel), håll koll på icke-numeriskt rader och avmarkera de andra typerna. Vi kan se några problem redan, som vissa celler har "text förutom siffror" och olika andra skillnader. Så den numeriska kolumnen i korthet är inte rent numerisk och innehåller några smutsiga data.

Vi kan göra två saker här: använd textfacetten för att lista alla "text förutom siffror" i den vänstra sidofältet, sväng musen över några röriga data och du får se ett alternativ som heter redigera, en dialogruta öppnas och sedan ta bort texten med Backspace och klicka på Tillämpa. I min dataset tog jag bort "Great Valley" -texten från 560 rader med ett enda klick.

Numerisk fasett i OpenRefine

Fasetter är definitivt kraftfulla verktyg, men ibland kan du se inkonsekvenser i cellkolonnen och det enda sättet att redigera celler i en kolumn är genom att åberopa Gemensam transformation kommandot på den kolumnen; från kolumnens rullgardinsmenyval Redigera celler → Vanlig transformation kommando. Du ser att det finns en rad användbara funktioner här för att städa upp dina data och se till att det är konsekvent. Det här är varför: Ibland håller på att skriva in data, så lägger man ett mellanslag före eller efter ett namn. Du kommer inte att kunna se det, men när det gäller att kombinera två uppsättningar data tolkar kalkylprogrammet det som två uppsättningar data. Till exempel "Rahul" skiljer sig från "Rahul".

Gå till kolumnen där du vill ta bort whitespace och sedan navigera till Redigera celler → Vanlig transformation → Trim ledande och bakre blankutrymme. Ett annat vanligt problem med data är inkonsekvent formatering - ibland kommer någon att lämna locket på eller glömma att aktivera ett namn. Dessa tre alternativ: att titlera till stora bokstäver till små bokstäver omvandlar alla celler i den kolumnen till att formateras konsekvent på ett eller annat sätt.

Common Transform i OpenRefine

En mycket användbar egenskap hos OpenRefine är dess hantering av historien om alla modifieringar som påverkat data sedan projektet skapades. I praktiken betyder det att du aldrig borde vara rädd för att prova saker med datasetet. Du är alltid fri att fiska med dina data och tillämpa ett antal fasetter eller omvandlingar eftersom du alltid kan ångra om du inser att det var ett misstag

 För att komma åt projekthistoriken klickar du på Ångra göra om fliken längst upp till vänster på skärmen, precis bredvid Filter / Facet, som visas i skärmdumpen. För att vända klockan, klicka på det sista steget som du vill behålla och vila blir gråtonad. För att avbryta alla ändringar och återställa data som de var innan någon transformation gjordes klickar du på 0. Skapa projekt. För att göra om det, klicka på det steg till vilket du vill återställa historiken.

Projekthistoria i OpenRefine

När du har avslutat ditt projekt kan du exportera data från ett befintligt OpenRefine-projekt. De Exportera Menyn längst upp till höger på skärmen gör att du kan göra just det. De stödda formaten är: TSV, CSV, Excel-format, ODF-kalkylblad, JSON och HTML-tabell. Det sista alternativet är till nytta om du vill publicera dina rengjorda data online.

Slutsats

Med denna handledning har du grunderna om hur du använder Tabula och OpenRefine. Vid någon tidpunkt kan du bli överväldigad med komplexiteten bakom OpenRefine men oroa dig inte. Ta din tid och kom ihåg att arbeta med data inte bara är kod eller klick, du måste följa din intuition för att få data i bra form - och du kan alltid ångra allt om du gör ett misstag.

Om du har några problem att komma igång med Tabula eller OpenRefine, eller om du har några unika metoder du vill dela med dig, var god att meddela oss i kommentarerna nedan.