Methoden der Parsing großen PDF-Dateien
-
02-10-2019 - |
Frage
Ich habe eine sehr große PDF-Datei (200.000 KB oder mehr), die eine Reihe von Seiten mit dem Inhalt nichts enthält, aber Tabellen. Ich möchte irgendwie mit diesen Daten analysieren mit Ruby, und importieren Sie die resultierenden Daten in einer MySQL-Datenbank.
Kennt jemand irgendwelche Verfahren für diese Daten Ziehens des PDF aus? Die Daten werden in der folgenden Weise formatiert:
Name | Adresse | Cash Berichtet | Jahr Berichtet | Inhaber Name
Manchmal überläuft das Feld Name in das Adressfeld, in welchem ??Fall die verbleibenden Spalten auf der folgenden Zeile angezeigt werden.
Aufgrund der unregelmäßigen Format, ich habe auf Bezifferung dieses heraus stecken. Am allerwenigsten, könnte jemand Punkt mich in einer Ruby-PDF-Bibliothek für diese Aufgabe?
UPDATE: Ich habe versehentlich eine falsche Daten zur Verfügung gestellt! Die tatsächliche Größe der Datei ist 300 MB oder 300.000 KB. Ich habe die Änderung darüber zu reflektieren.
Lösung
Ich nehme an, Sie Textausschnitte ohne Probleme Copy'n'Paste können, wenn Ihr PDF in Acrobat Reader oder einem anderen PDF-Viewer geöffnet wird?
Bevor Sie versuchen, programmatisch zu analysieren und zu extrahieren Text aus einem solchen Monster-Dateien (auch wenn es 200 MByte nur - für einfachen Text in Tabellen, die huuuuge ist, es sei denn, Sie 200000 Seiten haben ...), ich würde wie folgt vorgehen:
- Versuchen Sie, die Datei zuerst durch erneute Destillation es zu sanieren.
- Versuchen mit verschiedenen CLI-Tool, den Text in eine TXT-Datei zu extrahieren.
Dies ist eine Sache von Minuten. Schreiben eines Ruby-Programm, dies zu tun, ist sicherlich eine Frage von Stunden, Tagen oder Wochen (abhängig von Ihrem Wissen über die PDF-Dateiformat Interna ... Ich vermute, Sie haben nicht viel Erfahrung, dass noch) nicht.
Wenn "2." Arbeiten, können Sie auf halber Strecke bereits geschehen. Wenn es funktioniert, wissen Sie auch, dass es programmatisch Ruby tut, ist ein Job, der kann im Prinzip gelöst werden. Wenn „2“ nicht funktioniert, wissen Sie, es kann extrem schwierig sein, programmatisch zu erreichen.
Sanitize die 'Monster.pdf':
Ich schlage vor, Ghost . Sie können auch Adobe Acrobat Distiller verwenden, wenn Sie Zugriff darauf haben.
gswin32c.exe ^
-o Monster-PDF-sanitized ^
-sDEVICE=pdfwrite ^
-f Monster.pdf
(Ich bin gespannt, wie viel die einzelne Befehlsausgabe PDF schrumpfen wird, wenn mit dem Eingang verglichen.)
Extrahieren von Text aus PDF:
Ich schlage ersten Versuch pdftotext.exe
( aus den XPDF Leute ). Es gibt noch andere, etwas unbequem Methoden zu Verfügung, aber dies könnte den Job schon:
pdftotext.exe ^
-f 1 ^
-l 10 ^
-layout ^
-eol dos ^
-enc Latin1 ^
-nopgbrk ^
Monster-PDF-sanitized.pdf ^
first-10-pages-from-Monster-PDF-sanitized.txt
Dies wird nicht alle Seiten extrahieren, sondern nur 1-10 (für Proof of Concept, um zu sehen, ob es überhaupt funktioniert). Um von jeder Seite zu extrahieren, lassen Sie die -f 1 -l 10
Parameter ab. Möglicherweise müssen Sie die Codierung optimieren, indem die Parameter auf -enc ASCII7
Ändern (oder UTF-8
, UCS-2
).
Wenn das nicht funktioniert, die quick'n'easy Art und Weise (weil, wie es manchmal geschieht, einige Schriftarten in den Original-PDF-Anwendungen „custom Vektor kodiert“) können Sie eine neue Frage stellen sollen, beschreiben die Details Ihrer Erkenntnisse so weit. Dann brauchen Sie größere Kalibern greifen, um das Problem abzuschießen.
Andere Tipps
Am allerwenigsten konnte jeder Punkt mich zu einer Ruby-PDF-Bibliothek für diesen Aufgabe?
Wenn Sie dies noch nicht getan haben, sollten Sie die beiden vorherigen Fragen finden Sie unter: „ Rubin: Lese PDF-Dateien “und " rubin pdf Parsing gem / library ." PDF :: Reader , PDF :: Toolkit und Docsplit sind nur einige der relativ beliebt vorgeschlagen Bibliotheken. Es gibt href="https://stackoverflow.com/questions/773193/ruby-reading-pdf-files/774665#774665">.
Ich bin mir nicht sicher, ob eine dieser Lösungen für Ihr Problem tatsächlich geeignet ist, vor allem, dass Sie mit einem solchen großen PDF-Dateien handelt. Also, wenn jemand bietet eine informative Antwort, vielleicht sollten Sie eine Bibliothek auswählen oder zwei und nimm sie für eine Probefahrt.
Das wird eine schwierige Aufgabe sein, als gerenderte PDFs kein Konzept der tabellarischen Layout haben, gerade Linien und Text an vorbestimmten Stellen. Es kann nicht möglich sein, um zu bestimmen, welche Zeilen und Spalten, was sind, aber es kann auf dem PDF selbst abhängen.
Die Java-Bibliotheken sind die robusteste und können mehr tun, als nur Extrakt Text. Also habe ich in JRuby und iText oder PDFBox aussehen würde.
Überprüfen Sie, ob es eine strukturierte Inhalte im PDF-Format. Ich schrieb einen Blog-Artikel erklären dies unter http://www.jpedal.org/PDFblog/? p = 410
Falls nicht, müssen Sie es bauen.
Vielleicht Bibliothek der Garnele Rubin? Link-Text