Niet alle gegevens die gebruikt worden voor data-analyse of het genereren van managementinformatie zijn opgeslagen in een (min of meer) gestructureerde database. Een schat aan informatie ligt vaak verborgen in PDF bestanden.
In deze blog laat ik zien hoe PDF bestanden kunnen worden uitgelezen met behulp van Python, zodat de teksten vervolgens verder geanalyseerd kunnen worden.
Benodigdheden
In deze blog gebruik ik de volgende Python libraries:
- PyPDF2
Deze library kan tekst in PDF bestanden omzetten naar tekst die door Python begrepen kunnen worden - NLTK
Met behulp van NLTK kunnen teksten opgeschoond worden en kunnen de ‘keywords’ uit teksten gefilterd worden
Beide libraries kunnen met pip worden geïnstalleerd:
pip install PyPDF2
pip install nltk
Als voorbeeld van een PDF bestand gebruiken wij één van de Case Studies die op de website van Refine-IT te vinden zijn. Via de volgende link is dit PDF bestand te vinden: https://www.refine-it.nl/#branches
Stap 1 importeren van de libraries
Open in een tekst editor een nieuw .py bestand en start het script met de volgende code om de libraries te importeren:
import PyPDF2 from nltk.tokenize import word_tokenize from nltk.corpus import stopwords
Stap 2 Uitlezen PDF bestand
We maken eerst een variabele aan met een verwijzing naar het PDF bestand.
filename = ‘Casestudy.pdf’
Met functie ‘open’ kan vervolgens het bestand gelezen worden.
pdfFileObj = open(filename,’rb’)
Met behulp van PyPDF2 wordt het PDF bestand nu omgezet naar leesbare tekens die door Python kunnen worden gelezen
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
De volgende code haalt het aantal pagina’s op en loopt alle pagina’s langs om de tekst te extraheren:
num_pages = pdfReader.numPages
count = 0
text = ""
while count > num_pages:
pageObj = pdfReader.getPage(count)
count +=1
text += pageObj.extractText()
De variabele ‘text’ bevat nu alle tekst die Python uit het PDF bestand heeft kunnen ophalen. Deze tekst bevat echter ook nog allerlei vervuiling zoals spaties, punten, komma’s etc.
We gaan de tekst nu opschonen zodat alleen een lijst met ‘keywords’ overblijft.
Stap 3 Converteren van de tekst in ‘keywords’
De functie word_tokenize() breekt de tekst op in individuele woorden.
tokens = word_tokenize(text)
We maken nu een lijst aan met alle punctuaties die we uit de tekst willen filteren.
punctuations = [‘(‘,’)’,’;’,’:’,'[‘,’]’,’,’,’.’]
NLTK heeft een lijst met stopwoorden die geen informatie over de tekst zelf opleveren. Het gaat bijvoorbeeld om woorden als ‘de’, ’een’, ‘ik’, etc.
Deze stopwoorden filteren we er met de volgende functie uit.
stop_words = stopwords.words(‘dutch’)
Met de laatste stap maken we een lijst aan die alle woorden bevat die niet voorkomen in de stopwoorden en de punctuaties.
keywords = [word for word in tokens if not word in stop_words and not word in punctuations]
Met de volgende code kunnen we de lijst op het scherm tonen:
print(keywords)
Voer het totale Python script uit en je krijgt een vergelijkbaar resultaat als hieronder:
Afsluiting
We hebben nu alle ‘keywords’ uit het PDF bestand gefilterd en beschikbaar gesteld in een Python lijst. Hier kunnen we nu mee doen wat we willen. Als we de gegevens opslaan in een spreadsheet of een database kunnen we hier uitgebreide analyses op loslaten. Succes!