Gegevens uit tabellen in PDF's extraheren met Tabula en OpenRefine

Er zijn veel gegevens beschikbaar, opgesloten in tabellen die zijn ingesloten in PDF-essays en rapporten. PDF's zijn alomtegenwoordig, maar het is moeilijker om de gegevens binnenin te gebruiken dan in een spreadsheet. Zelfs als u de gegevens kunt extraheren, kan het moeilijk zijn om consistente resultaten te krijgen. De ene tabel kan lijnen bevatten om de celgrenzen aan te geven, terwijl andere alleen witte spaties kunnen hebben om een ​​tabelweergave te verkrijgen. Ze kunnen ook variëren in termen van omspannende rijen en / of kolommen, en vaak is de enige constante dat ze allemaal gegevens bevatten die je wilt extraheren.

Hoewel u handmatig gegevens uit een tabel in een PDF kunt extraheren, is dit allesbehalve eenvoudig. Er is geen reden om zoveel tijd te nemen als er hulpmiddelen zijn om ons werk eenvoudiger te maken. In deze zelfstudie laat ik u zien hoe u de tabel gemakkelijk uit de PDF kunt halen met Tabula en de rommelige gegevens kunt opruimen tot een meer bruikbare vorm met OpenRefine.

Waarom Tabula?

Iedereen die met gegevens werkt kent een veel voorkomend probleem: je hebt een aantal interessante gegevens voor je journalistieke project of statistieken gevonden voor het voorbereiden van een mooie kaart, maar de gegevens komen rommelig en gevangen in een PDF-bestand en kunnen niet automatisch door je programma worden gelezen. U moet dus ofwel uitschrijven of een lang proces van het kopiëren en plakken van rijen met gegevens uit een PDF-bestand naar Excel uitvoeren. Dit soort handmatig werk creëert wrijving en daardoor verlies je veel tijd.

Als afgestudeerd onderzoeker heb ik deze pijn van handmatig kopiëren en plakken van de tabel voor mijn proefschrift doorstaan. Ik heb altijd gedroomd van een toepassing die de tabel uit PDF kan extraheren met één klik - en dat is precies wat Tabula is. Het is een gratis, door Java gevoede app die wordt uitgevoerd in een webinterface op uw computer die gegevens uit vrijwel elke tabel in een PDF kan extraheren. Binnen enkele seconden kan het de gegevens extraheren die u uren zou kosten om handmatig opnieuw te typen.

Hoe Tabula te gebruiken?

Download eerst het bijbehorende zipbestand voor uw computer van de website van Tabula en pak ze uit in een map naar keuze. Zorg dat Java 7 of 7 ook is geïnstalleerd; Zo niet, dan kunt u deze gratis downloaden van de Oracle-website. Die link is naar de ad / toolbar-vrije versie, zodat u zich geen zorgen hoeft te maken over iets anders dat wordt geïnstalleerd.

Wanneer u Tabula start, ziet u in eerste instantie een opdrachtvenster en binnen enkele seconden moet uw browser automatisch openen http://127.0.0.1:8080. Als dat niet het geval is, opent u uw webbrowser en typt u deze URL in het adresveld. voorleggen je PDF-bestand en Tabula zullen je bestand verwerken en je een mooie lijst met paginaminiaturen laten zien. Zoek naar de tabel die u wilt extraheren, of als u een kleine PDF hebt, kunt u de optie "Tafels automatisch detecteren" selecteren.

Startscherm van Tabula met paginaminiaturen en tabel die u wilt extraheren

Klik en sleep om het gebied van de tabel te selecteren. Zodra je de muis loslaat, zal Tabula je de uitgepakte tabel in een vriendelijk formaat laten zien. Als de gegevens wazig zijn, verwijdert u de kopteksten of de voetnoten en meer. Ten slotte kunt u de geëxtraheerde tabel als door komma's gescheiden waarden (CSV) of door tabs gescheiden waarden (TSV) downloaden of de gegevens naar het klembord kopiëren. Zodra de gegevens zich in de spreadsheet bevinden, moet u misschien een beetje bewerken, zoals het corrigeren van de kopteksten of voetnoten.

Geëxtraheerde tabel uit PDF met Tabula

Wanneer u Tabula moet afsluiten in Windows, schakelt u naar dat opdrachtvenster en drukt u op Besturing C. Wacht tot er een bericht is dat aangeeft dat het afsluiten is voltooid. Dat venster sluit mogelijk automatisch of sluit het zelf. In Mac, ga naar de app (klik met de rechtermuisknop op het pictogram in het dock) en druk op CMD-Q. Als u Mac OS X 10.8 of hoger gebruikt, moet u de Gatekeeper-instellingen aanpassen om foutmeldingen tijdens de installatie te voorkomen.

Tabula zal niet altijd perfect zijn en er zijn nog steeds een aantal problemen die moeten worden opgelost. Vanaf nu werkt het alleen op tekstgebaseerde PDF, dus je zit vast aan handarbeid als je PDF's hebt gescand. Als je echter een exemplaar van Acrobat hebt, kun je beeld-PDF's converteren naar een bewerkbare PDF die werk met Tabula. Als u PDF's met rijen met meerdere regels heeft, zal Tabula frequente fouten in tabellen rapporteren zonder grafische scheidingsvellen, dus let op voor dat.

Waarom OpenRefine?

Incidentele spelfouten, extra ruimte, willekeurige interpunctie, vreemd hoofdlettergebruik, dubbele records en meer zijn vergelijkbaar met de koers wanneer u gegevens uit PDF's extraheert. Het maakt niet uit hoe leuk het uittreksel er op het eerste gezicht uitziet, uw gegevens zullen een rommeltje zijn als dat zo is ieder fouten, waardoor problemen ontstaan ​​bij het ophalen van gegevens, interoperabiliteit en indexering.

Dat is waar OpenRefine (voorheen Google Verfijning) binnenkomt. Het is een andere gratis tool die u helpt deze fouten en gegevensonnauwkeurigheden gemakkelijk te identificeren. Met OpenRefine kunt u niet alleen snel de nauwkeurigheid van uw gegevens vaststellen, maar ook bepaalde fouten op een geautomatiseerde manier uitvoeren. Het kan gegevens in veel bestaande cellen in bulk transformeren, met het doel de gegevens op te ruimen, het uit te breiden met meer gegevens uit andere bronnen en het naar andere formaten om te zetten, zodat u het in de gewenste apps kunt gebruiken.

Hoe OpenRefine te gebruiken?

OpenRefine heeft wederom een ​​webinterface, draait op uw computer en vereist Java. Het enige verschil is deze keer, het wordt geopend in uw browser op http://127.0.0.1:3333.

Wanneer u OpenRefine opent, ziet u aan de linkerkant drie opties: Maak een project waarin u gegevens kunt importeren van een computer, een webadres, een klembord of een Google Spreadsheet; Open project wat je helpt terug te gaan naar een bestaand project dat tijdens een vorige sessie is gemaakt; en Project importeren waarmee we een bestaand OpenRefine-projectarchief direct kunnen importeren. OpenRefine begrijpt verschillende gegevensbestandsindelingen, waaronder TSV, CSV, Excel-documenten en zelfs XML en JSON-een favoriet voor web- en applicatieontwikkelaars.

Startscherm van OpenRefine

Blader naar uw geëxporteerde CSV-bestand en klik op volgende. Op het volgende scherm krijg je een overzicht van je dataset zoals deze in de OpenRefine zal verschijnen. Standaard wordt de eerste regel correct geparseerd als de naam van een kolom. Een andere optie is het selectievakje 'Aanhalingstekens worden gebruikt om cellen in te sluiten die kolomscheidingstekens bevatten'. Als u deze optie geselecteerd laat, moet u controleren of alle celwaarden inderdaad tussen aanhalingstekens in het oorspronkelijke bestand staan. Schakel anders dit selectievakje uit om ervoor te zorgen dat de aanhalingstekens niet verkeerd worden geïnterpreteerd door OpenRefine.

De andere opties kunnen in sommige gevallen van pas komen; probeer ze te selecteren en deselecteren om te zien hoe ze uw gegevens beïnvloeden. Let op hoe de preview-updates deze wijzigingen weerspiegelen. Zorg er ook voor dat u de juiste codering selecteert om te voorkomen dat speciale tekens worden verwisseld. Wanneer alles goed lijkt, geeft u uw project een naam en klikt u op Maak een project.

Dataset geladen in OpenRefine

Om de verschillende technieken voor gegevensmanipulatie aan te tonen, kunt u ofwel uw eigen gegevensset gebruiken of een demoverset downloaden van de Github-gegevensopslagruimte om uzelf uit te proberen. Zodra uw dataset in OpenRefine is geladen, moet u leren om gegevens te verkennen door de verschillende zones te scannen. Van boven naar beneden kun je vier zones observeren.

In de eerste zone kon je het totale aantal rijen voor een bepaald bestand zien. In de tweede zone kunt u proberen te wisselen tussen rijen en records door op een van beide woorden te klikken. Deze zone laat je ook kiezen of je 5, 10 of 50 rijen / records op een pagina wilt weergeven en biedt ook de juiste manier om van pagina naar pagina te navigeren. In de derde zone vindt u hier de eerste rij die werd geparst als kolomkop toen het project werd gemaakt. In mijn dataset leest de kolom Universiteit, schenking, numFaculty enzovoorts. De meest linkse kolom wordt altijd genoemd Allemaal en is verdeeld in drie subkolommen die sterren, vlaggen en ID's bevatten. Elke kolom heeft een menu dat toegankelijk is door op de kleine te klikken drop-down driehoek. Ten slotte toont de vierde zone het feitelijke hoofdgebied dat de werkelijke waarden van de cellen weergeeft. Als u met de muis over een cel beweegt, kunt u dat gegevenstype bewerken.

Verschillende zones van OpenRefine

Kolommen vormen een essentieel onderdeel van OpenRefine en standaard worden alle kolommen uitgebreid. Dit kan omslachtig zijn als er veel kolommen in het project zijn. Als u tijdelijk nog een kolom wilt verbergen om het werk voor de anderen te vergemakkelijken, klikt u op de kleine drop-down driehoek in een kolom om het menu te laten zien en selecteer Uitzicht. U kunt hier vier opties zien: deze kolom samenvouwen, alle andere kolommen samenvouwen, kolommen samenvouwen links en kolommen samenvouwen naar rechts.

Speel met de afzonderlijke kolomopties totdat u tevreden bent met het resultaat. Om een ​​kolom weer uit te vouwen, klikt u erop. In sommige gevallen kan het nuttig zijn om de volgorde van de kolommen te wijzigen, bijvoorbeeld om kolommen samen te brengen die moeten worden vergeleken. Om dit te bereiken, opent u het menu van elke kolom en klikt u op Kolom bewerken. Nogmaals, er zijn vier opties beschikbaar: Verplaats kolom naar begin, Verplaats kolom naar einde, Verplaats kolom naar links en Verplaats kolom naar rechts. Als u de kolommen volledig opnieuw wilt ordenen, gebruikt u de kolom met de naam Allemaal

De Uitzicht optie biedt hier een snelle manier om alle kolommen uit te vouwen of samen te vouwen Kolom bewerken biedt u een snelle manier om kolommen opnieuw in te delen door ze te slepen of te onderdrukken door ze rechts te laten vallen, zoals weergegeven in de volgende schermafbeelding.

Kolommen herschikken in OpenRefine

Wanneer uw project groot is, is het eerste wat u moet leren, hoe u gegevens kunt sorteren als een visueel hulpmiddel, aangezien sorteren uw gegevensset gemakkelijker kan maken om te verkennen en te manipuleren. Om uw gegevens te sorteren op hun Universiteit namen, kies Soort in het kolommenu voor toegang tot het volgende scherm. Als u naar de schermafbeelding kijkt, kunt u de celwaarden sorteren op type: tekst, cijfers, datums en booleans en voor elk type kunnen ze in verschillende volgorde worden gesorteerd.

Tekst kan bijvoorbeeld worden gesorteerd in alfabetische (a tot z) of omgekeerde alfabetische (z tot a), booleans false dan true of vice versa enzovoort. Bovendien kunnen we specificeren waar fouten en blanco's worden opgeslagen in relatie tot geldige waarden door ze in de gewenste volgorde te slepen. Fouten kunnen bijvoorbeeld eerst worden gesorteerd om ze gemakkelijker te herkennen, aan het einde gevolgd door geldige waarden in middelste en lege waarden.

Gegevens sorteren in OpenRefine

Een van de hulpmiddelen in OpenRefine die u het meest zult gebruiken, is faceting. Meestal maakt u een facet op een bepaalde kolom. Het facet vat de cellen in die kolom samen om u een groot beeld van uw gegevens in de zijbalk te geven en tegelijkertijd kunt u gegevens filteren op een aantal subreeksen die u in bulk wilt wijzigen. Er zijn verschillende manieren om gegevens te facetteren en afhankelijk van de waarden van de gegevensset en uw behoeften zijn ze: tekst facetten voor snaren, numerieke facetten voor nummers en datums en aangepaste facetten voor het definiëren van uw eigen tekst en numerieke facetten.

Tekstfacet is een erg handig hulpmiddel, vergelijkbaar met filter in een spreadsheet. Tekstfacet groepeert unieke tekstwaarden in groepen. Dit kan ons helpen informatie samen te voegen en we kunnen waarden zien die op veel verschillende manieren kunnen worden gespeld. Nu zullen we een tekstfacet maken op de land kolom door op het vervolgkeuzemenu van die kolom te klikken en selecteer Facet → Tekstfacet.

Het resultaat van dit facet wordt weergegeven op het tabblad Facet / filter aan de linkerkant van het scherm. In de volgende screenshot kunnen we de kolom zien land gegroepeerd op basis van de namen, maar ik vond een aantal vreemde vermeldingen zoals "U.S", "Verenigde Staten" en "U.S.A", samen met de oneven "Verenigde Staten)". Zijn ze niet allemaal hetzelfde??

Tekstfacet in OpenRefine

U kunt deze verschillen handmatig bewerken, maar dat hoeft niet. De optie TROS zal u helpen om dit soort vieze gegevens gemakkelijk te vinden en op te lossen. Klik op de land kolom dropdown en navigeer naar Cellen bewerken → Cluster en bewerken, OpenRefine presenteert u vervolgens een dialoogvenster waarin u verschillende clusteringmethoden kunt kiezen, die elk verschillende Keying-functies kunnen gebruiken.

In Waarden in cluster, u kunt de verschillende spellingen zien en hoeveel rijen een bepaalde spelling bevatten. De samensmelten? kolom bevat een selectievakje en als u dit aanvinkt, worden alle waarden in dat cluster gewijzigd in de waarde in de Nieuwe celwaarde kolom. Hier kan ik de nieuwe celwaarde handmatig invoeren als "Verenigde Staten van Amerika" en dan kunt u klikken Geselecteerd en gesloten samenvoegen om alle geselecteerde clusters samen te voegen.

Mogelijk vindt u wat meer verschillen in de dataset; zo ja, kies anders Methode in het vervolgkeuzemenu en kies anders Keying-functies. Speel met verschillende opties totdat je alle inconsistenties hebt opgelost. Als u wilt onderzoeken hoe OpenRefine-clustering werkt, moet u dit artikel in de Github controleren.

Clustering in OpenRefine

Wanneer een tekstfacet unieke tekstwaarden in groepen groepeert, worden numerieke bereikbakken in een numeriek facet gegroepeerd. We moeten de gegevens opschonen voor het aantal studenten in de numStudents kolom. Niet alle waarden zijn numeriek en veel van deze waarden kunnen stukjes tekst bevatten naast het werkelijke aantal studenten. Om erachter te komen welke ingangen moeten worden gerepareerd, gebruik ik een numeriek facet.

In de numStudents kolommenu, navigeer naar Facet → Numeriek facet en kijk naar wat in de Facet / Filter tab aan de linkerkant. Dit toont ons een histogram van de waarden en vermeldt ook het aantal vermeldingen per type (numeriek, niet-numeriek, blanco, fout), houd de gegevens in de gaten niet-numerieke rijen en schakel de andere typen uit. We kunnen al enkele problemen zien, omdat sommige cellen "tekst behalve cijfers" en verschillende andere verschillen bevatten. Dus de numerieke kolom in het kort is niet puur numeriek en bevat wat vuile gegevens.

We kunnen hier twee dingen doen: gebruik het tekstfacet om alle "tekst naast cijfers" in de linkerzijbalk weer te geven, beweeg uw muis over eventuele rommelige gegevens en u ziet een optie genaamd Bewerk, een dialoogvenster wordt geopend en verwijder de tekst met Backspace en klik op Van toepassing zijn. In mijn dataset verwijderde ik "Great Valley" -tekst uit 560 rijen met een enkele klik.

Numeric Facet in OpenRefine

Facetten zijn absoluut krachtige hulpmiddelen, maar soms ziet u inconsistenties in de celkolom en de enige manier om cellen in een kolom te bewerken is door de Common Transform commando op die kolom; uit de keuzelijst van de kolom Cellen bewerken → Common Transform commando. U zult zien dat er een aantal nuttige functies zijn om uw gegevens op te ruimen en ervoor te zorgen dat deze consistent zijn. Dit is de reden waarom: soms plaatsen mensen gegevens in of geven ze een spatie voor of achter een naam. U zult het niet kunnen zien, maar als het gaat om het combineren van twee sets gegevens, zal de spreadsheet-software dit interpreteren als twee sets gegevens. Bijvoorbeeld, "Rahul" is anders dan "Rahul".

Ga naar de kolom waar u witte spaties wilt verwijderen en navigeer vervolgens naar Cellen bewerken → Gemeenschappelijke transformatie → Voor- en achtertraject versmallen. Een ander veel voorkomend probleem met gegevens is inconsistente opmaak: af en toe laat iemand de caps op slot of vergeet een naam te kapitaliseren. Deze drie opties: naar hoofdletters, naar hoofdletters, naar kleine letters converteert alle cellen in die kolom om consistent te worden opgemaakt, op welke manier dan ook.

Common Transform in OpenRefine

Een zeer nuttige functie van OpenRefine is de verwerking van de geschiedenis van alle wijzigingen die van invloed zijn geweest op de gegevens sinds de oprichting van het project. In de praktijk betekent dit dat u nooit bang hoeft te zijn om dingen uit te proberen met de dataset. Voel je altijd vrij om met je gegevens te vervelen en een onbeperkt aantal facetten of transformatie toe te passen, want je kunt het altijd ongedaan maken als je je realiseert dat het een vergissing was

 Om toegang te krijgen tot de projectgeschiedenis, klikt u op de Undo / Redo tab in de linkerbovenhoek van het scherm, net naast de Filter / Facet, zoals getoond in de screenshot. Om de klok terug te draaien, klikt u op de laatste stap die u wilt behouden en wordt de rust grijs. Als u alle wijzigingen wilt annuleren en de gegevens wilt herstellen zoals ze waren voordat een transformatie was doorgevoerd, klikt u op 0. Maak een project. Om opnieuw te doen, klikt u op de stap omhoog waarnaar u de geschiedenis wilt herstellen.

Projectgeschiedenis in OpenRefine

Nadat u uw project hebt voltooid, kunt u de gegevens exporteren vanuit een bestaand OpenRefine-project. De Exporteren menu in de rechterbovenhoek van het scherm kunt u precies dat doen. De ondersteunde indelingen zijn: TSV, CSV, Excel-indeling, ODF-spreadsheet, JSON- en HTML-tabel. De laatste optie is handig als u uw schoongemaakte gegevens online wilt publiceren.

Conclusie

Met deze zelfstudie beschikt u over de basisprincipes van het gebruik van Tabula en OpenRefine. Op een gegeven moment wordt u misschien overweldigd door de complexiteit achter OpenRefine, maar maakt u zich geen zorgen. Neem de tijd en onthoud dat het werken met gegevens niet alleen code of klikken is, je moet je intuïtie volgen om gegevens in topvorm te krijgen - en je kunt altijd alles ongedaan maken als je een fout maakt.

Als je problemen hebt om aan de slag te gaan met Tabula of OpenRefine, of unieke methoden hebt die je wilt delen, laat het ons dan weten in de reacties hieronder.