Hallo zusammen,
ich versuche aktuell ein Projekt umzusetzen aber scheitere an einem
Punkt.
Und zwar geht es darum das ich bestimmte Bereiche aus einer PDF Datei in
ein Excel oder anderes Dokument übertragen will.
Zu meiner Idee zur Umsetzung:
1. PDF in Form laden
2. per Button die Selektierung eines Bereiches in der PDF aktivieren.
Wie beim Snipping Tool Bereich markieren.
3. aus dem Bereich ein .png machen und per OCR auslesen (damit man jedes
PDF ob gescannt oder elektronisch erstellt umwandeln kann).
4. In Excel oder ähnliches übertragen.
Zu meiner Problematik:
Ich finde keine Möglichkeit einen Screenshot von einem Bereich, in dem
PDF Reader, in der Form zu machen.
Was ich bisher gefunden habe. Ein Screenshot vom gesamten Monitor zu
machen und aus diesem Bild einen Bereich auszuschneiden und in einer
zweiten PictureBox anzeigen zu lassen. Mit einer PDF funktioniert das
allerdings nicht. Vorher ein Bild aus der PDF zu machen ist auch nicht
möglich da die PDF auch mehrere Seiten haben kann.
Hier ein Auszug aus dem Programm womit ich den Screenshot und das
Ausschneiden mache:
Schau Dir doch mal die PDF Creator Library an, die mit dem Creator mit
kommt (oder ist das eine ActiveX?). Die kann das Extrahieren. Dann
machst Du eine Instanz der Excel ActiveX auf, und fügst das ganze ein.
PDF ist eine komplexe objektorientierte Struktur, da muss man entweder
sehr tief eindringen oder eine fertige Lib verwenden.
Ich empfehle das Projekt "PDFBox" von Apache, speziell die Command Line
Tools. Da gibt es auch den Befehl "text extraction" ... der legt den
Rohtext (parametrierbar) in einem File ab, dort kannst du ihn dann
einsammelnb und ein Excel daraus machen ...
PDFBox ist in Java geschrieben, man kann die Sourcen in ein eigenes
Projekt einbinden. Die CLI-Tools sind auch einzeln lauffähig (sofern ein
JRE installiert ist). Läuft auf Win, Mac und Linux.
https://pdfbox.apache.org/2.0/commandline.html
Robin F. schrieb:> aus dem Bereich ein .png machen und per OCR auslesen
Ganz so einfach wirds wohl nicht mit OCR, da eine Erkennungsrate von 99%
heißt, daß das 100. Zeichen falsch sein könnte! Nimm mal z.B. das
Programm pdf to txt und schau nach wie hoch die Fehlerrate bei Deinem
Blatt ist. Es kommt ganz darauf an was man erfassen muß.
Eine Stückliste mit immer wiederkehrenden Begriffen hat eine andere
Trefferrate als Grimms Märchen. Hintergrund sind automatische
Korrekturen und ob der ausgewählte Bereich schon als TEXT oder als Bild
im pdf ist.
Hallo,
danke für die vielen Nachrichten.
Das OCR nicht fehlerfrei ist bzw. nicht alles erkennt,habe ich bereits
festgestellt.
Um meine Vorstellung von dem Programm vielleicht nochmal deutlicher zu
zeugen.
Hier ein Video: https://www.youtube.com/watch?v=x61E67Y7GB4
Ich will genau wie in diesem Video Tabellen (Stücklisten) aus einer PDF
Datei extrahieren. Ich fand die Lösung aus dem Video mit dem Snipping
Tool + OCR ganz interessant. Das heißt aber ich muss eine manuelle
Prüfung der extrahierten Datei vornehmen, was für den Anfang noch nicht
so schlimm ist.
Da ich mit dem Snipping Tool noch nicht weiter gekommen bin, habe ich
mich erstmal mit OCR beschäftigt aber festgestellt das die librarys
nicht unbedingt kostenfrei sind sondern Testversionen für 30 Tage.
Aktuell überlege ich ob es nicht vlt. auch Sinn machen könnte das ganze
in Python zu realisieren. Dazu finde ich mehr Informationen was das
ausschneiden und dich OCR Funktion betrifft.
Gruß
Robin
OCR schau Dir Tesseract >=4.0 an z.B. mit gImageReader, dafür findest Du
auch C# Wrapper (kostenlos, LSTM), aber besser wäre etwas mit Online AI,
aber die Kosten alle Geld, falls es immer der gleiche Font ist, dann
kannst du in Tesseract nochmal versuchen zu optimieren.
Zu dem Video:
Er hat mit Absicht die Überschriftspalten nicht genommen, weil es zu
Fehlern kommen sollte.
gImageReader ist in Qt Widgets und C++ programmiert, falls Du von C# weg
willst, dann hast Du ein gutes Referenzprojekt, ansonsten wie gesagt
gibt es auch Tesseract Wrapper für C#
https://github.com/manisandro/gImageReader/releases
Robin F. schrieb:> Zu meiner Problematik:> Ich finde keine Möglichkeit einen Screenshot von einem Bereich, in dem> PDF Reader, in der Form zu machen.
Na ja, das (Windows von fremden Programmem photographiere) können sehr
viele Programme (obwohl ich das für ein Sicherheitsrisiko halte),
Screenshot-Programme gibt es auch in Source als Samples, sie arbeiten
i.A. nicht mit PrtSc.
Der Screenshot ist oftmals auch der einzig sinnvolle Weg, denn PDF
können sehr unterschiedlich aufgebaut sein, abhängig von der Quelle die
sie erzeugt hat. Als Bilder, als einzelne Buchstaben kreuz und quer, als
Text in Fliessrichtung, und wie Unicode umgesetzt wird ista uch
unterschiedlich, oftmals ergibt eine Kopie (markieren, kopieren im
Acrobat eader) eines Textabschnitts beim Einfügen (in einem Textenditor)
nur Unsinn, weil die Zeichen aus einem zusammengewürfelten Font stammen
(also 65 ist nicht mehr A).
Wenn man aus verschiedenen PDF eine PDF to TXT Wandlung mit diversen
(Online-)Tools macht sieht man sehr schön die unterschiedlichsten
Ergebnisse und damit Ansätze die das Programm macht.
Wenn deine PDF ber immer aus einer Quelle stammen, und es damit geht,
würde ich den direkten Weg mit PDF to TXT Tools/Library gehen.
Bei meinem letzten Beitrag hatte ich übersehen, dass es sich um
gescannte Daten handelt - also schlicht Pixeldaten in einem
PDF-Container. Da nützt "PDF to Text" erstmal wenig, das exportiert nur
die im PDF enthaltenen "echten" Textobjekte.
Hier steht also tatsächlich zuerst das Umwandeln der PDF-Seiten in ein
anderes, einfach zu handhabendes Dateiformat (am Besten PNG oder TIFF)
oder ein internes Grafikobjekt an.
Auch hier empfehle ich die (kostenfreie) Apache-PDFBox mit dem CLI-Tool
"PDF to Image" (Seite, Farbmodell und Auflösung einstellbar). Das
CLI-Tool läuft ohne jede Installation oder aufwändigem Script-Gefruzzel
out-of-the-box. Ein CLI-Programm mit Parametern aus C++ heraus zu
starten, sollte doch kein Problem sein, oder?
Screenshots halte ich in dem Zusammenhang für völlig unnötigen Pfusch
... sorry, wenn man die Datei so einfach direkt umwandeln kann.
Erst der zweite Schritt ist dann das "Zerschneiden" der geladenen
Pixelbilder bzw. der internen Grafikobjekte in einzelne interessierende
Bereiche, um darauf (als dritten Schritt) den OCR-Prozess anzuwenden.
Frank E. schrieb:> Bereiche, um darauf den OCR-Prozess anzuwenden.
Lange Geschichte und am Ende reicht wohl die Auflösung nicht, um eine
AUSREICHEND gute OCR-Erkennungsrate zu erreichen....
ERST mal prüfen OB seine Bilder überhaupt geeignet sind!
Hallo,
die Auflösung ist gut. Es sind digital erstelle Montageanweisungen aus
einem CAD Programm mit einer Stückliste (diese will ich auslesen und in
Excel übertragen). An die CAD Daten komme ich nicht ran und ich kann
auch keinen Export anfragen. Daher versuche ich die oben genannte
Lösung.
Für die Zukunft soll das mal ein universell einsetzbares Tool werden, da
wir oft ähnliche Dokumente oder Scanns bekommen und wir die umwandeln
können wollen.
Ich kann euch leider die PDF nicht zeigen, da diese geheime Dokumente
sind.
Sie sehen aber im entfernten Sinne aus wie diese hier:
http://technische-dokumentation-hoffmann.com/de/pdm-erstellung
nur viel komplexer.
Ich guck mir mal das CLI-Tool an. Ich würde aber gern nur einen
bestimmten Bereich der PDF auslesen lassen, da ich auf der linken Seite
des Dokuments immer ein Bild eines Montageschritts habe.
Danke erstmal.
Robin F. schrieb:> Hallo,>> danke für die vielen Nachrichten.> Das OCR nicht fehlerfrei ist bzw. nicht alles erkennt,habe ich bereits> festgestellt.> Um meine Vorstellung von dem Programm vielleicht nochmal deutlicher zu> zeugen.> Hier ein Video: https://www.youtube.com/watch?v=x61E67Y7GB4> Ich will genau wie in diesem Video Tabellen (Stücklisten) aus einer PDF> Datei extrahieren. Ich fand die Lösung aus dem Video mit dem Snipping> Tool + OCR ganz interessant. Das heißt aber ich muss eine manuelle> Prüfung der extrahierten Datei vornehmen, was für den Anfang noch nicht> so schlimm ist.
Muss es denn überhaupt OCR sein? Das benötigt man doch nur,
wenn die Tabellen als Grafik ins PDF eingebunden sind. Hast
du dich mal mit dem Format von PDF-Dateien beschäftigt?
merciless
Für die aktuellen PDF Dateien ist es nicht zwangsweise notwendig OCR zu
nutzen.
Für mich war das allerdings auf dem ersten Blick die beste Lösung um zum
einen universelle Scanns und digital erstellte Dokumente umwandeln zu
können und zum anderen hat dieser Weg für mich am meisten Sinn gemacht,
da ich ja mit der Screenshot-Methode das ganze realisieren will/wollte.
Ist aber vielleicht auch kein schlechter Ansatzpunkt sich lieber mal mit
dem PDF-Format zu beschäftigen.
Robin F. schrieb:> mal mit dem PDF-Format zu beschäftigen.
So ganz einfach ist es nur, wenn man gleich die Zeichen alle lesen kann
mit pdf to txt. Es gibt leider auch Zeichensätze, die werden erst
zusammengebastelt und sind somit nicht gleich erkennbar mit dem
Hexeditor. Schau Dir einfach Deine speziell gewünschten pdf als Beispiel
mit dem Hexeditor an! Die Variante FineReader bleibt dann noch.
https://www.heise.de/tests/Abbyy-FineReader-15-OCR-Software-mit-beeindruckender-Texterkennung-4594055.html
gimagereader wurde schon erwähnt, ist kostenlos, für Linux und Windows
erhältlich und kann direkt PDF importieren. Dann kann man die Absätze,
die erkannt werden sollen nacheinander markieren (ctrl-Taste drücken,
sonst werden die bisherigen Markierungen wieder gelöscht).
Wie ich geschrieben hatte kann man erstmal mit gImageReader einen
Eindruck bekommen, wie die Ergebnisse von Tesseract sind.
Sollten die Ergebnisse ausreichend sein, dann in eine eigene Anwendung
einbauen und den Bereich vorgeben, also PDF als Bild in den Speicher
holen und dann den Suchbereich auf das Inmemorybild loslassen.
Mach Dir Gedanken, wie Du 3 OCR's einbindest über eine Abstraktion und
such Dir noch zwei kostenpflichtige AI OCR's, dann kannst Du noch die
Fehler nachdem Ausschlussverfahren ausbügeln.