Ich versuche, den in dieser PDF-Datei enthaltenen Text mit zu extrahieren Python
.
Ich verwende das PyPDF2- Modul und habe das folgende Skript:
import PyPDF2
pdf_file = open('sample.pdf')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(0)
page_content = page.extractText()
print page_content
Wenn ich den Code ausführe, erhalte ich die folgende Ausgabe, die sich von der im PDF-Dokument enthaltenen unterscheidet:
!"#$%#$%&%$&'()*%+,-%./01'*23%4
5'%1$#26%3/%7/))/8%&)/26%8#3"%3"*%313/9#&)
%
Wie kann ich den Text wie im PDF-Dokument extrahieren?
pdf_file = open('sample.pdf', 'rb')
?Antworten:
Ich suchte nach einer einfachen Lösung für Python 3.x und Windows. Es scheint keine Unterstützung durch Text zu geben , was unglücklich ist, aber wenn Sie nach einer einfachen Lösung für Windows / Python 3 suchen, schauen Sie sich das Tika- Paket an, um PDFs einfach zu lesen.
Beachten Sie, dass Tika in Java geschrieben ist, sodass eine Java-Laufzeit installiert sein muss
quelle
brew
Verwenden Sie Textract.
Es unterstützt viele Arten von Dateien, einschließlich PDFs
quelle
textract
ist ein Wrapper fürPoppler:pdftotext
(unter anderem).Schauen Sie sich diesen Code an:
Die Ausgabe ist:
Verwenden des gleichen Codes zum Lesen eines PDFs aus 201308FCR.pdf. Die Ausgabe ist normal.
Die Dokumentation erklärt, warum:
quelle
Nachdem ich Textract (das zu viele Abhängigkeiten zu haben schien) und pypdf2 (das keinen Text aus den von mir getesteten PDFs extrahieren konnte) und Tika (das zu langsam war)
pdftotext
ausprobiert hatte, verwendete ich schließlich xpdf (wie bereits in einer anderen Antwort vorgeschlagen) und Ich habe gerade die Binärdatei von Python direkt aufgerufen (möglicherweise müssen Sie den Pfad an pdftotext anpassen):Es gibt pdftotext, der im Grunde das Gleiche tut, aber dies setzt pdftotext in / usr / local / bin voraus, während ich dies in AWS lambda verwende und es aus dem aktuellen Verzeichnis verwenden wollte.
Übrigens: Um dies für Lambda zu verwenden, müssen Sie die Binärdatei und die Abhängigkeit von
libstdc++.so
in Ihre Lambda-Funktion einfügen. Ich persönlich musste xpdf kompilieren. Da Anweisungen dazu diese Antwort in die Luft jagen würden, habe ich sie in meinen persönlichen Blog gestellt .quelle
Möglicherweise möchten Sie stattdessen bewährtes xPDF und abgeleitete Tools verwenden, um Text zu extrahieren, da pyPDF2 immer noch verschiedene Probleme mit der Textextraktion zu haben scheint .
Die lange Antwort lautet, dass es viele Variationen gibt, wie ein Text in PDF codiert wird, und dass möglicherweise eine PDF-Zeichenfolge selbst dekodiert werden muss, dann eine Zuordnung mit CMAP erforderlich sein muss und dann möglicherweise die Entfernung zwischen Wörtern und Buchstaben usw. analysiert werden muss.
Wenn das PDF beschädigt ist (dh der richtige Text angezeigt wird, aber beim Kopieren Müll entsteht) und Sie wirklich Text extrahieren müssen, sollten Sie in Betracht ziehen, PDF in ein Bild zu konvertieren (mit ImageMagik ) und dann Tesseract verwenden , um Text aus dem Bild abzurufen mit OCR.
quelle
Ich habe viele Python PDF-Konverter ausprobiert und möchte diese Bewertung aktualisieren. Tika ist eine der besten. Aber PyMuPDF ist eine gute Nachricht von @ehsaneha Benutzer.
Ich habe einen Code erstellt, um sie zu vergleichen: https://github.com/erfelipe/PDFtextExtraction Ich hoffe, Ihnen helfen zu können.
quelle
.encode('utf-8', errors='ignore')
Der folgende Code ist eine Lösung für die Frage in Python 3 . Stellen Sie vor dem Ausführen des Codes sicher, dass Sie die
PyPDF2
Bibliothek in Ihrer Umgebung installiert haben . Wenn nicht installiert, öffnen Sie die Eingabeaufforderung und führen Sie den folgenden Befehl aus:Lösungscode:
quelle
PyPDF2 ignoriert in einigen Fällen die Leerzeichen und macht den Ergebnistext zu einem Chaos, aber ich verwende PyMuPDF und bin sehr zufrieden, dass Sie diesen Link für weitere Informationen verwenden können
quelle
pip install pymupdf==1.16.16
. Verwendung dieser speziellen Version, da heute die neueste Version (17) nicht funktioniert. Ich habe mich für pymupdf entschieden, weil es Textumbruchfelder in neuen Zeilenzeichen extrahiert\n
. Also extrahiere ich den Text aus pdf in eine Zeichenfolge mit pymupdf und verwende ihn dannmy_extracted_text.splitlines()
, um den Text in Zeilen in eine Liste aufzuteilen .Mehrseitiges PDF kann als Text auf einer Strecke extrahiert werden, anstatt die individuelle Seitenzahl als Argument unter Verwendung des folgenden Codes anzugeben
quelle
pdftotext ist der beste und einfachste! pdftotext behält sich auch die Struktur vor.
Ich habe PyPDF2, PDFMiner und einige andere ausprobiert, aber keiner von ihnen ergab ein zufriedenstellendes Ergebnis.
quelle
Collecting PDFMiner (from pdf2text)
daher verstehe ich diese Antwort jetzt nicht.Sie können PDFtoText https://github.com/jalan/pdftotext verwenden
PDF to Text behält den Einzug im Textformat bei, unabhängig davon, ob Sie Tabellen haben.
quelle
Hier ist der einfachste Code zum Extrahieren von Text
Code:
quelle
Ich habe hier eine Lösung gefunden PDFLayoutTextStripper
Es ist gut, weil es das Layout der Original-PDF beibehalten kann .
Es ist in Java geschrieben, aber ich habe ein Gateway hinzugefügt, um Python zu unterstützen.
Beispielcode:
Beispielausgabe von PDFLayoutTextStripper :
Weitere Details finden Sie hier Stripper mit Python
quelle
Verwenden Sie zum Extrahieren von Text aus PDF den folgenden Code
quelle
Ich habe eine bessere Lösung als OCR und die Seitenausrichtung beizubehalten, während der Text aus einer PDF-Datei extrahiert wird. Sollte hilfreich sein:
quelle
Ich füge Code hinzu, um dies zu erreichen: Es funktioniert gut für mich:
quelle
Sie können tika-app-xxx.jar (aktuell) von hier herunterladen .
Legen Sie diese JAR-Datei dann im selben Ordner wie Ihre Python-Skriptdatei ab.
Fügen Sie dann den folgenden Code in das Skript ein:
Der Vorteil dieser Methode:
weniger Abhängigkeit. Eine einzelne JAR-Datei ist einfacher zu verwalten als ein Python-Paket.
Unterstützung für mehrere Formate. Die Position
source_pdf
kann das Verzeichnis jeder Art von Dokument sein. (.doc, .html, .odt usw.)auf dem neuesten Stand. tika-app.jar wird immer früher als die entsprechende Version des tika python-Pakets veröffentlicht.
stabil. Es ist weitaus stabiler und gepflegter (Powered by Apache) als PyPDF.
Nachteil:
Ein Jre-Headless ist notwendig.
quelle
Wenn Sie es in Anaconda unter Windows versuchen, verarbeitet PyPDF2 möglicherweise einige der PDF-Dateien mit nicht standardmäßigen Strukturen oder Unicode-Zeichen nicht. Ich empfehle die Verwendung des folgenden Codes, wenn Sie viele PDF-Dateien öffnen und lesen müssen - der Text aller PDF-Dateien in Ordnern mit relativem Pfad
.//pdfs//
wird in der Liste gespeichertpdf_text_list
.quelle
PyPDF2 funktioniert, aber die Ergebnisse können variieren. Ich sehe ziemlich inkonsistente Ergebnisse aus der Ergebnisextraktion.
quelle