Software zum Extrahieren von PDF-Inhalten

Kann jemand eine Open-Source-Bibliothek/API zum Extrahieren der Texte und Bilder aus einem PDF empfehlen? Nachfolgend finden Sie die Anforderungen. Ich habe PDF Clown, C# .NET-Version verwendet, hatte aber Probleme beim Erstellen einer Excel-Tabelle damit.

  1. Es sollte in der Lage sein, PDF-Tabellen in Excel-Tabellen/CSV/XML/HTML zu konvertieren.
  2. Es sollte Open Source und nicht GPL sein.
  3. Es sollte in der Lage sein, Bilder aus PDF zu extrahieren.
  4. Wenn es keine PDF-Tabelle in ein bestimmtes Format konvertieren kann, sollte es mir zumindest die Koordinaten von Texten in einer Tabelle geben, damit ich daraus eine Tabelle erstellen kann.
  5. Es sollte mir nach der Extraktion die Quellinformationen von PDF-Inhalten mitteilen können (welche Seite, wo auf dieser Seite usw.).
Beginnen Sie mit dem Lesen von ISO-32000-2 und schätzen Sie dann den Zeitaufwand ein, der zum Schreiben einer solchen Bibliothek erforderlich wäre. Sie werden feststellen, dass (1) Sie nach etwas fragen, das in vielen Fällen unmöglich ist (es sei denn, Ihr PDF ist ein ordnungsgemäß getaggtes PDF), und (2) eine solche Bibliothek so wertvoll wäre, dass niemand sie unter einer freizügigen Lizenz anbieten würde.

Antworten (1)

Extrahieren von Tabellen aus PDF

Ihre Anforderung, Tabellen aus PDFs zu extrahieren, ist nicht einfach zu erfüllen.

Standard-PDFs geben keine Hinweise auf die Semantik dessen, was sie auf einer Seite zeichnen: Die einzige Unterscheidung, die die Syntax bietet, ist die Unterscheidung zwischen Vektorelementen (Linien, Füllungen, ...), Bildern und Text.

Ob irgendein Zeichen Teil einer Tabelle oder Teil einer Zeile oder nur ein einsames einzelnes Zeichen in einem ansonsten leeren Bereich ist, lässt sich programmgesteuert nicht einfach durch Analysieren des PDF-Quellcodes erkennen.

Einen Hintergrund dazu, warum das PDF-Dateiformat niemals als geeignet für das Hosten von extrahierbaren, strukturierten Daten angesehen werden sollte , finden Sie in diesem Artikel:

Warum das Aktualisieren von Dollars für Dokumente so schwierig war (ProPublica-Website)

Nachdem ich das oben Gesagte gesagt habe, lassen Sie mich Folgendes hinzufügen:

Tabula ist in Ruby geschrieben. Sein Quellcode ist auf GitHub offen . Seine Lizenz ist kostenlos und nicht GPL .

Extrahieren von Bildern aus einem PDF

Hier würde ich empfehlen, sich bei Poppler umzusehen . Poppler ist eine PDF-Rendering-Bibliothek, die von der xpdf-3.0- Codebasis abgezweigt wurde.

Es wird mit einem Befehlszeilenprogramm geliefert, pdfimagesdas in PDF-Dateien eingebettete Bilder auflisten und extrahieren kann. Hier ist ein Beispiellauf, der alle Bilder auflistet, die im Seitenbereich 3-5 enthalten sind:

$ pdfimages -list -f 3 -l 5 some.pdf

  page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi  size  ratio
  ----------------------------------------------------------------------------------------
   3     0 image   577   645  rgb     3   8  image  yes     593 0   152   152   106K  9.7%
   3     1 smask   577   645  gray    1   8  image  no      593 0   152   152   383B  0.1%
   3     2 image   382   419  rgb     3   8  image  yes     594 0   110   110  56.7K   12%
   3     3 smask   382   419  gray    1   8  image  no      594 0   110   110   178B  0.1%
   4     4 image  1569   344  rgb     3   8  image  yes     534 0   162   162  36.4K  2.3%
   5     5 image   719   930  index   1   8  image  yes     535 0   146   146  42.6K  6.5%

Wie Sie sehen können, ist die Ausgabe eine Tabelle, die alle möglichen nützlichen Informationen über die eingebetteten Bilder enthält:

  • die Seitenzahl, auf der sie erscheinen,
  • der Bildtyp,
  • ihre Breiten-/Höhenabmessungen,
  • ihr Farbraum,
  • die Anzahl der Grundfarben,
  • Farbtiefe,
  • ihre Kodierung,
  • ihre PDF-Objekt-ID,
  • ihre jeweiligen Auflösungen in X- oder Y-Richtung und
  • ihre Größe und ihr Kompressionsverhältnis.

Verwenden Sie diesen Befehl, um alle Bilder von Seite 9 als PNG-Dateien zu extrahieren und sie mit einem Präfix zu benennen :images-from-page9---

$ pdfimages -png -f 9 -l 9 some.pdf images-from-page9---

Um weitere Optionen anzuzeigen, führen Sie pdfimages -h.

Wer das Kommandozeilentool nicht möchte, sondern stattdessen die Poppler API/Library mit eigenem Code nutzt, kann die gleichen Funktionen erreichen...

Extrahieren von Text aus PDF

Dieselbe Poppler-Bibliothek wird auch mit einem Befehlszeilenprogramm zum Extrahieren von Text geliefert: pdftotext.

Hier ist die kurze Hilfeausgabe :

$ pdftotext -h

 pdftotext version 0.32.0
 Copyright 2005-2015 The Poppler Developers - http://poppler.freedesktop.org
 Copyright 1996-2011 Glyph & Cog, LLC
 Usage: pdftotext [options] <PDF-file> [<text-file>]
   -f <int>          : first page to convert
   -l <int>          : last page to convert
   -r <fp>           : resolution, in DPI (default is 72)
   -x <int>          : x-coordinate of the crop area top left corner
   -y <int>          : y-coordinate of the crop area top left corner
   -W <int>          : width of crop area in pixels (default is 0)
   -H <int>          : height of crop area in pixels (default is 0)
   -layout           : maintain original physical layout
   -fixed <fp>       : assume fixed-pitch (or tabular) text
   -raw              : keep strings in content stream order
   -htmlmeta         : generate a simple HTML file, including the meta information
   -enc <string>     : output text encoding name
   -listenc          : list available encodings
   -eol <string>     : output end-of-line convention (unix, dos, or mac)
   -nopgbrk          : don't insert page breaks between pages
   -bbox             : output bounding box for each word and page size to html.  Sets -htmlmeta
   -opw <string>     : owner password (for encrypted files)
   -upw <string>     : user password (for encrypted files)
   [....]

Wie Sie sehen können, gibt es verschiedene Befehlszeilenschalter, um Koordinaten für Textstellen zu adressieren oder abzurufen.

Vorbehalte

Es ist nicht immer möglich, Text über aus PDFs zu extrahieren pdftotext. Die PDF-Dateien sehen zwar ganz gut aus, aber ihre interne Struktur kann fehlerhaft sein, wenn es um die Textextraktion geht.

Siehe zum Beispiel diese aktuellen StackOverflow-Antworten:


Popplers Lizenz ist jedoch GPL....

Hallo, ich habe JRuby installiert und versucht, Tabula mit dem Befehl jruby -S gem install tabula-extractor zu installieren, aber aus irgendeinem Grund erhalte ich einen Syntaxfehler, irgendwelche Gedanken?
@SharkiChacko: "...irgendwelche Gedanken?" -- Ja, zwei: (1) Erster: 'Was genau könnte dieser Syntaxfehler sein, wie zum Teufel könnte ich ihn erraten, wie könnte ich darauf antworten?!?' (2) Zweitens: 'Warum beschreibst du deine Probleme nicht im offiziellen Tabula-Extractor Issue Tracker ?'
Wow. Sehr gute Zusammenfassung (+1), Glückwunsch! Also zwischen den Zeilen lesen: Es gibt kein "Schweizer Armee" -Tool, das alle 3 Komponenten abdeckt und dann eine gut formatierte Markdown-Seite ausgibt, die zu einem SE-Beitrag passt (Scherz; HTML mit verknüpften Bildern und gut formatiertem Text wäre auch in Ordnung )?
@Izzy: Nein, kein Tool der "Schweizer Armee", das die Bedingungen des OP erfüllt: Open Source, aber nicht GPL . (Es gibt zwar kommerzielle Tools ... aber sie sind nicht so gut wie tabulabei der Tabellenextraktion.)
Danke Kurt! Diese Lizenzkonstellation habe ich ganz vergessen. Poppler ist das, was ich jetzt meistens benutze, übrigens. Und ich bin mit GPL einverstanden: Meine gesamte eigene Software ist ebenfalls GPL. Worauf ich im Grunde abzielte, war ein Tool, das alles abdeckt: Was ist, wenn es ein PDF mit Tabellen, Bildern und viel Text gibt? Open Source natürlich bevorzugt – aber GPL ist für mich in Ordnung (ich glaube nicht, dass das eine separate Frage rechtfertigen würde ;)
@Izzy: Es gibt auch kein solches "Open Source, sogar GPL" -Tool der Schweizer Armee , sorry.
Ok, vielen Dank! Nicht deine Schuld :) Wäre aber zu schön gewesen...