Suche text in PDF-Dateien mit Python?
Problem
Ich bin versucht zu bestimmen, welche Art eines Dokuments (z.B. Flehen, Korrespondenz, Vorladungen, etc), die Sie durch die Suche durch seinen text, vorzugsweise mit python. Alle PDF-Dateien sind durchsuchbar, aber ich habe nicht gefunden, eine Lösung für das Parsen mit python und die Anwendung, ein Skript zu suchen (kurz von dem umwandeln in eine text-Datei zuerst, aber das könnte sein, ressourcenintensive für n Dokumente).
, Was ich bisher getan habe
Ich habe mir in pypdf, pdfminer, adobe pdf-Dokumentation, und alle Fragen, die ich hier finden konnte (obwohl keiner schien direkt dieses Problem zu lösen). PDFminer scheint das größte Potenzial, aber nach dem Lesen durch die Dokumentation bin ich auch nicht sicher, wo zu beginnen.
Gibt es eine einfache, effektive Methode für das Lesen von PDF-text, entweder durch Seite, Zeile oder das gesamte Dokument? Oder andere workarounds?
Nur ein Gedanke, vielleicht nicht der Praxis... Wenn Sie sind verzweifelt auf der Suche nach einer Abhilfe, die Sie könnten versuchen, den Aufruf pdfgrep (pdfgrep.sourceforge.net) zu tun, die suchen.
InformationsquelleAutor Insarov | 2013-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies wird als PDF-Bergbau, und ist sehr schwer, weil:
text ist in keiner bestimmten Reihenfolge (es sei denn, die Reihenfolge ist wichtig für den Druck), die meisten der Zeit
der original-text Struktur ist verloren (Buchstaben können nicht gruppiert werden
als Worte und Worte können nicht gruppiert werden, die in Sätzen, und die Reihenfolge, wie Sie platziert sind
das Papier ist oft zufällige).
Tools wie PDFminer benutze Heuristiken, um die Gruppe von Buchstaben und Worten wieder, basierend auf Ihrer position in der Seite. Ich Stimme zu, das interface ist ziemlich low-level, aber es macht mehr Sinn, wenn du weißt,
welches problem Sie zu lösen versuchen (am Ende, was zählt, ist die Auswahl, wie in der Nähe von den Nachbarn ein Buchstabe/Wort/Zeile sein muss, um als Teil eines Absatzes).
Eine teure alternative (in Bezug auf Zeit/Rechenleistung) ist die Erzeugung von Bildern für jede Seite und füttern Sie auf OCR, möglicherweise einen Versuch Wert, wenn Sie haben eine sehr gute OCR-Software.
Also meine Antwort ist Nein, es gibt keine solche Sache wie eine einfache, effektive Methode für das extrahieren von text aus PDF-Dateien - wenn Sie Ihre Dokumente haben eine Struktur bekannt, können Sie die Feinabstimmung der Regeln und erhalten gute Ergebnisse, aber es ist immer ein Glücksspiel.
Ich würde wirklich gerne als falsch erwiesen.
[update]
Die Antwort hat sich nicht geändert, aber vor kurzem war ich beteiligt sich mit zwei Projekten: eines davon ist mit Hilfe von computer-vision, um die Extraktion von Daten aus gescannten Krankenhaus Formen. Die andere extrahiert Daten aus Gerichtsakten. Was ich gelernt habe, ist:
Computer vision ist in Reichweite der sterblichen im Jahr 2018. Wenn Sie eine gute Stichprobe von bereits klassifizierten Dokumente, die Sie verwenden können, OpenCV oder SciKit-Image extrahieren-Funktionen und die Ausbildung eines machine-learning classifier, um zu bestimmen, welche Art eines Dokuments.
Wenn Sie das PDF-Dokument analysieren "durchsuchbar" sind, können Sie sehr weit kommen, extrahieren alle den text mit einer software wie pdftotext und ein Bayes-filter (die gleiche Art von Algorithmus verwendet, um SPAM klassifizieren).
So gibt es keine sichere und effektive Methode für das extrahieren von text aus PDF-Dateien, aber Sie können nicht brauchen, um das problem zu lösen, bei der hand (Dokument-Typ-Klassifizierung).
Genau das, was ich Rede, jede OCR-Wert sein Gehalt wird haben Sie die option, um die Ausgabe einer reinen text-Datei zusammen mit der PDF-Datei.
InformationsquelleAutor Paulo Scardine
Ich geschrieben habe, umfangreiche Systeme für die Firma für die ich arbeite, um zu konvertieren PDF-Dateien in Daten für eine Auswertung (Rechnungen, Vergleiche, gescannte Eintrittskarten, etc.), und @Paulo Scardine ist richtig--es gibt keine vollkommen sichere und einfache Weg, dies zu tun. Das heißt, der Schnellste, zuverlässigste und am wenigsten energieintensiven Weg ist
pdftotext
Teil der xpdf Satz von Werkzeugen. Dieses tool wird schnell konvertieren Sie durchsuchbare PDF-Datei ist eine text-Datei, die Sie Einlesen und Parsen mit Python. Hinweis: Benutzen Sie die-layout
argument. Und übrigens, nicht alle PDF-Dateien sind durchsuchbar, nur diejenigen, die den text enthalten. Einige PDF-Dateien enthalten nur Bilder ohne text.Wenn es einen Weg gibt, um konvertieren von PDF zu text-Datei, gibt es eine Möglichkeit, dies zu tun, ohne zu schreiben eine wirkliche neue Datei? Etwas wie das Lesen eines Dokuments in den Speicher? (Zumindest in einer Weise, die so einfach wie konvertieren?).
Ich denke so nicht, nicht mit pdftotext. Aber ich kann mich irren über diese, müssen Sie überprüfen Sie die docs. Sie können tun, dass mit pyPdf und pdfminer, aber Sie sind viel langsamer als pdftotext, auch mit pdftotext schreiben in die Datei.
InformationsquelleAutor MikeHunter
Stimme ich mit @Paulo PDF-Daten-Bergbau ist ein großer Schmerz. Aber haben Sie vielleicht Erfolg mit
pdftotext
ist Teil des Xpdf-suite frei verfügbar hier:http://www.foolabs.com/xpdf/download.html
Sollte dies ausreichend sein, für Ihre Zwecke, wenn Sie nur auf der Suche nach single keywords.
pdftotext
ist ein Befehlszeilen-Dienstprogramm, aber sehr einfach zu verwenden. Es wird Ihnen, text-Dateien, die Sie finden können einfacher, mit zu arbeiten.InformationsquelleAutor qwwqwwq
Ich habe vor kurzem angefangen mit ScraperWiki zu tun, was Sie beschrieben.
Hier ist ein Beispiel mit ScraperWiki zum extrahieren von PDF-Daten.
Den
scraperwiki.pdftoxml()
Funktion gibt eine XML-Struktur.Dann können Sie BeautifulSoup Parsen, in eine navigierbare Struktur.
Hier ist mein code für -
Dieser code wird zum drucken eines ganzen, großen hässlichen Haufen
<text>
- tags.Jede Seite ist getrennt mit einer
</page>
, wenn das ein Trost ist.Wenn Sie möchten, dass der Inhalt innerhalb des
<text>
tags, die enthalten könnte überschriften verpackt in<b>
zum Beispiel, verwenden Sieline.contents
Wenn Sie nur wollen, jede Textzeile, nicht einschließlich tags, verwenden Sie
line.getText()
Es ist chaotisch und schmerzhaft, aber das funktioniert für durchsuchbare PDF-docs. So weit ich habe festgestellt, dass dies genau ist, aber schmerzhaft.
Bin immer Fehler :- BeautifulSoup([markup]): BeautifulSoup([markup], "lxml")
InformationsquelleAutor JasTonAChair
Ich bin Total eine grüne hand, aber irgendwie ist dieses Skript funktioniert für mich:
InformationsquelleAutor Emma Yu
Hier ist die Lösung, die ich fand es bequem für dieses Problem. In der text-variable, die Sie, um text aus PDF-Datei, um Sie zu suchen. Aber ich halte auch die Idee, spiting den text in Stichworten, wie ich auf dieser website gefunden: https://medium.com/@rqaiserr/how-to-convert-pdfs-into-searchable-key-words-with-python-85aab86c544f von waren nahm ich diese Lösung, obwohl er sich auf nltk war nicht sehr einfach ist, könnte es sinnvoll sein, für weitere Zwecke:
InformationsquelleAutor florin27