Suchen von Text in einem PDF mit Python?

9

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?

    
Insarov 13.06.2013, 23:07
quelle

5 Antworten

17

Dies wird als PDF-Scraping bezeichnet und ist sehr schwierig, weil:

  • PDF ist ein Dokumentformat, das entworfen wurde, um gedruckt zu werden und nicht geparst zu werden. In einem PDF-Dokument Der Text befindet sich meistens in einer bestimmten Reihenfolge (es sei denn, die Reihenfolge ist wichtig für den Druck) Die ursprüngliche Textstruktur ist verloren (Buchstaben dürfen nicht gruppiert werden) Wörter und Wörter dürfen nicht in Sätzen und in der Reihenfolge gruppiert werden, in der sie stehen das Papier ist oft zufällig).
  • Es gibt jede Menge Software, die PDFs erzeugt, viele sind defekt.

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.

    
Paulo Scardine 14.06.2013 00:52
quelle
6

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.

    
MikeHunter 14.06.2013 01:07
quelle
3

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.

    
qwwqwwq 14.06.2013 01:02
quelle
2

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.

    
JasTonAChair 14.11.2015 07:38
quelle
0

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%     
florin27 01.12.2017 12:12
quelle

Tags und Links