Dies funktioniert im Mai 2020 mit PDFminer 6 in Python3.
Paket installieren
$ pip install pdfminer.six
Paket importieren
from pdfminer.high_level import extract_text
Verwenden einer auf der Festplatte gespeicherten PDF-Datei
text = extract_text('report.pdf')
Oder alternativ:
with open('report.pdf','rb') as f:
text = extract_text(open('report.pdf','rb'))
Verwenden von PDF bereits im Speicher
Befindet sich die PDF-Datei bereits im Speicher, z. B. wenn sie mit der Anforderungsbibliothek aus dem Web abgerufen wurde, kann sie mithilfe der io
Bibliothek in einen Stream konvertiert werden :
import io
response = requests.get(url)
text = extract_text(io.BytesIO(response.content))
Leistung und Zuverlässigkeit im Vergleich zu PyPDF2
PDFminer.six funktioniert zuverlässiger als PyPDF2 (was bei bestimmten PDF-Typen fehlschlägt), insbesondere PDF-Version 1.7
Die Textextraktion mit PDFminer.six ist jedoch um den Faktor 6 erheblich langsamer als PyPDF2.
Ich habe die Textextraktion mit timeit
einem 15 "MBP (2018) zeitlich festgelegt, nur die Extraktionsfunktion (kein Öffnen von Dateien usw.) mit einem 10-seitigen PDF zeitlich festgelegt und die folgenden Ergebnisse erhalten:
PDFminer.six: 2.88 sec
PyPDF2: 0.45 sec
pdfminer.six hat auch eine enorme Stellfläche und erfordert pycryptodome, für das GCC und andere Dinge installiert werden müssen, um ein minimales Docker-Image für die Installation unter Alpine Linux von 80 MB auf 350 MB zu verschieben. PyPDF2 hat keine merklichen Auswirkungen auf die Speicherung.