Estrarre dati da file pdf
medio
Obiettivi
In più di un'occasione può essere utile ricavare dei dati contenuti in un pdf per catalogarli o per indicizzarne il contenuto. In questa piccola ricetta proporrò una breve soluzione in due differenti "sapori".
Come prima cosa sarà necessario estrarre il testo dal pdf. I file pdf sono composti da una serie di oggetti binari. Abbiamo bisogno di una libreria che riconosca e scompatti per noi gli oggetti di testo.
Come seconda cosa è necessario riconoscere i dati che ci interessano. Per questo obiettivo utilizzeremo la libreria re (regular expression).
Estrazione del testo in Python
In python possiamo utilizzare la libreria pypdf in questo modo (riporto la ricetta presa da qui):
import pyPdf
def getPDFContent(path):
content = ""
# Load PDF into pyPDF
pdf = pyPdf.PdfFileReader(file(path, "rb"))
# Iterate pages
for i in range(0, pdf.getNumPages()):
# Extract text from page and add to content
content += pdf.getPage(i).extractText() + "\n"
# Collapse whitespace
content = " ".join(content.replace(u"\xa0", " ").strip().split())
return content
content = getPDFContent("test.pdf").encode("ascii", "ignore")
Estrazione del testo in jython
Se abbiamo bisogno di lavorare in ambiente java possiamo utilizzare invece jython. La libreria java pdfbox fa al caso nostro:
from org.pdfbox.util import PDFMergerUtility from org.pdfbox.util import PDFTextStripper from org.pdfbox.pdmodel import PDDocument defgetPDFContent(path):doc=PDDocument.load(pdfpath) stripper = PDFTextStripper() content = stripper.getText(doc) doc.close() return contentcontent = getPDFContent("test.pdf").encode("ascii", "ignore")
Per utilizzare questa libreria sarà necessario caricare alcuni jar (PDFBox-0.7.3.jar e FontBox-0.1.0-dev.jar)
Estrarre i dati con le espressioni regolari
Nella libreria standard di python (e jython) abbiamo a disposizione una potentissima libreria per l'utilizzo delle espressioni regolari. Per la documentazione completa si può andare a vedere su http://www.amk.ca/python/howto/regex/, su http://it.diveintopython.org/html_processing/regular_expressions.html o su http://docs.python.it/html/lib/module-re.html
Se ad esempio dobbiamo estrarre dai nostri pdf tutti i codici fiscali possiamo fare:
import re
regexp = r'^[A-Za-z]{6}[0-9]{2}[A-Za-z]{1}[0-9]{2}[A-Za-z]{1}[0-9]{3}[A-Za-z]{1}$'
codici=re.findall(regexp,content)
for codice in codici:
print codiceLascio a voi altri esperimenti.
Buon lavoro
