Problem
Ich versuche zu bestimmen, welcher Typ ein Dokument ist (z. B. Plädoyer, Korrespondenz, Vorladung usw.), indem ich seinen Text durchsuche, vorzugsweise mit Python. Alle PDFs sind durchsuchbar, aber ich habe keine Lösung gefunden, um sie mit Python zu analysieren und ein Skript anzuwenden, um sie zu durchsuchen (ohne zuerst in eine Textdatei zu konvertieren, aber das könnte für n Dokumente ressourcenintensiv sein).
Was ich bisher gemacht habe
Ich habe in pypdf, pdfminer, Adobe PDF-Dokumentation und alle Fragen, die ich hier finden konnte, geschaut (obwohl keiner schien, dieses Problem direkt zu lösen). PDFminer scheint das meiste Potenzial zu haben, aber nachdem ich die Dokumentation durchgelesen habe, bin ich mir nicht einmal sicher, wo ich anfangen soll.
Gibt es eine einfache, effektive Methode zum Lesen von PDF-Text, entweder nach Seite, Zeile oder dem gesamten Dokument? Oder andere Problemumgehungen?
Dies wird als PDF-Scraping bezeichnet und ist sehr schwierig, weil:
Werkzeuge wie PDFminer verwenden Heuristiken, um Buchstaben und Wörter basierend auf ihrer Position auf der Seite erneut zu gruppieren. Ich stimme zu, die Schnittstelle ist ziemlich niedrig, aber es macht mehr Sinn, wenn Sie wissen Welches Problem versuchen sie zu lösen (am Ende kommt es darauf an, wie nahe ein Buchstabe / Wort / Zeile von den Nachbarn sein muss, um als Teil eines Absatzes betrachtet zu werden).
Eine teure Alternative (in Bezug auf Zeit / Computerleistung) erzeugt Bilder für jede Seite und füttert sie zur OCR, ein Versuch wäre es wert, wenn Sie eine sehr gute OCR haben.
Meine Antwort lautet: Nein, es gibt keine einfache, effektive Methode zum Extrahieren von Text aus PDF-Dateien. Wenn Ihre Dokumente eine bekannte Struktur haben, können Sie die Regeln optimieren und gute Ergebnisse erzielen, aber das ist es immer ein Glücksspiel.
Ich möchte wirklich falsch bewiesen werden.
Ich habe umfangreiche Systeme für das Unternehmen geschrieben, für das ich PDFs in Daten für die Verarbeitung (Rechnungen, Abrechnungen, gescannte Tickets usw.) umwandeln möchte, und @Paulo Scardine ist korrekt - es gibt keinen absolut zuverlässigen und einfachen Weg um dies zu tun. Das heißt, der schnellste, verlässlichste und am wenigsten intensive Weg ist die Verwendung von pdftotext
, Teil des xpdf Werkzeugset. Mit diesem Tool werden durchsuchbare PDF-Dateien schnell in eine Textdatei konvertiert, die Sie mit Python lesen und analysieren können. Tipp: Verwenden Sie das Argument -layout
. Und übrigens, nicht alle PDFs sind suchbar, nur diejenigen, die Text enthalten. Einige PDFs enthalten nur Bilder ohne Text.
Ich stimme mit @Paulo überein PDF-Data-Mining ist ein großer Schmerz. Aber Sie könnten Erfolg mit pdftotext
haben, das Teil der Xpdf-Suite ist, die hier frei verfügbar ist:
Dies sollte für Ihren Zweck ausreichend sein, wenn Sie nur nach einzelnen Schlüsselwörtern suchen.
pdftotext
ist ein Befehlszeilendienstprogramm, aber sehr einfach zu verwenden. Es wird Ihnen Textdateien geben, mit denen Sie leichter arbeiten können.
Ich habe kürzlich begonnen, ScraperWiki zu benutzen, um das zu tun, was du beschrieben hast.
Hier ist ein Beispiel zur Verwendung von ScraperWiki PDF-Daten extrahieren.
Die Funktion scraperwiki.pdftoxml()
gibt eine XML-Struktur zurück.
Sie können BeautifulSoup dann verwenden, um das in einen navigierbaren Baum zu analysieren.
Hier ist mein Code für -
%Vor% Dieser Code wird einen ganzen, großen, hässlichen Stapel von <text>
-Tags drucken.
Jede Seite wird durch </page>
getrennt, wenn das ein Trost ist.
Wenn Sie möchten, dass der Inhalt in den <text>
-Tags, die beispielsweise in <b>
eingepackte Überschriften enthalten, verwendet wird, verwenden Sie line.contents
Wenn Sie nur jede Textzeile ohne Tags verwenden möchten, verwenden Sie line.getText()
Es ist unordentlich und schmerzhaft, aber dies funktioniert für durchsuchbare PDF-Dokumente. Bisher habe ich festgestellt, dass dies genau ist, aber schmerzhaft.
Hier ist die Lösung, die ich für dieses Problem gefunden habe. In der Textvariablen erhalten Sie den Text aus PDF, um darin zu suchen. Aber ich habe auch die Idee behalten, den Text in Stichworten zu spucken, wie ich auf dieser Website gefunden habe: Ссылка aus denen ich diese Lösung genommen habe, obwohl die Erstellung von nltk nicht sehr einfach war, könnte es für weitere Zwecke nützlich sein:
%Vor%