Wie extrahiere ich Text mit OCR aus einem PDF unter Linux?
43
Wie extrahiere ich Text aus einer PDF-Datei, die nicht mit einem Index erstellt wurde? Es ist alles Text, aber ich kann nichts suchen oder auswählen. Ich verwende Kubuntu und Okular hat diese Funktion nicht.
Da anscheinend keine Binärpakete verfügbar sind, müssen Sie diese aus dem Quellcode erstellen. Stellen Sie sicher, dass die ImageMagick C ++ - Bibliotheken installiert sind, damit im Wesentlichen alle Eingabebildformate unterstützt werden (andernfalls wird nur BMP akzeptiert).
Abgesehen von einer kurzen README-Datei scheint es im Wesentlichen undokumentiert zu sein, aber ich fand die OCR-Ergebnisse ziemlich gut. Das Schöne daran ist, dass es Positionsinformationen für den OCR-Text im hOCR- Format ausgeben kann , so dass es möglich wird, den Text in einer verborgenen Ebene einer PDF-Datei wieder an der richtigen Position abzulegen. Auf diese Weise können Sie durchsuchbare PDF-Dateien erstellen, aus denen Sie Text kopieren können.
Ich habe hocr2pdf verwendet , um PDF-Dateien aus den Original-PDF-Dateien und OCR-Ergebnissen zu erstellen. Leider scheint das Programm das Erstellen mehrseitiger PDFs nicht zu unterstützen, so dass Sie möglicherweise ein Skript erstellen müssen, um damit umzugehen:
#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf
set -e
input="$1"
output="$2"
tmpdir="$(mktemp -d)"
# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"
# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
base="${page%.tiff}"
cuneiform -f hocr -o "$base.html" "$page"
hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done
# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf
rm -rf -- "$tmpdir"
Bitte beachten Sie, dass das obige Skript sehr rudimentär ist. Beispielsweise werden keine PDF-Metadaten beibehalten.
Irgendeine Idee, dieses Skript zu verbessern, um eine Rechtschreibprüfung hinzuzufügen, um Fehler im Erkennungsschritt zu korrigieren?
Gökhan Sever
@ Gökhan Sever, meinst du das Hinzufügen einer interaktiven Rechtschreibprüfung, bei der der Benutzer aufgefordert wird, falsch geschriebene / unbekannte Wörter zu ersetzen? Ich denke, Sie könnten das tun, indem Sie aspell check --mode=html "$base.html"direkt nach dem Ausführen von cuneiform so etwas wie im Skript hinzufügen .
Jukka Matilainen
Dies ist eine Lösung. Ohne den gesamten Kontext des Textes zu sehen, ist es jedoch schwierig, Korrekturen vorzunehmen. Es wäre schöner, ein Interface zu sehen, das im ocrfeeder erstellt wurde.
Gökhan Sever
1
Übrigens benutze ich Tesseract zur Zeichenerkennung: Ersetze die Keilschrift durch: Tesseract "$ page" "$ base" hocr
Gökhan Sever
1
Kleine Korrektur: Die Zeile für tesseract zumindest für andere Sprachen als Englisch, hier zB Deutsch (= deu) ist: `tesseract" $ page "" $ base "-l deu hocr` (natürlich müssen Sie das `` entfernen) .
Keks Dosis
14
Sehen Sie nach, ob pdftotext für Sie funktioniert. Wenn es nicht auf Ihrem Computer ist, müssen Sie das Paket poppler-utils installieren
Eine vollständige Liste der PDF-Software finden Sie hier auf Wikipedia.
Bearbeiten: Da Sie OCR-Funktionen benötigen , denke ich, müssen Sie einen anderen Ansatz versuchen. (dh ich konnte keinen Linux pdf2text Konverter finden, der OCR macht).
Konvertieren Sie das PDF in ein Bild
Scannen Sie das Bild mit den OCR-Werkzeugen in Text
PDF in Bild konvertieren
gs: Der folgende Befehl sollte mehrseitige PDF-Dateien in einzelne TIFF-Dateien konvertieren.
ImageMagik-Dienstprogramme : Auf der SuperUser-Website gibt es weitere Fragen zur Verwendung von ImageMagik, die Sie möglicherweise für die Konvertierung verwenden.
Funktioniert dieses Programm auch für handschriftliche Textdokumente?
Ivo Flipse
1
Nein, ich glaube nicht, dass es OCR-Funktionen hat. Es kann nur den im PDF eingebetteten Text extrahieren. Manpage: linux.die.net/man/1/pdftotext
nagul
Ja, dies funktioniert für PDF-Dokumente, in die der Text bereits eingebettet ist. Mein Fall ist genau einer, bei dem es nicht der Fall ist.
Helder S Ribeiro
1
@ obvio171 Die beste Option, die ich finden konnte, um OCR in Ihrem Fall zum Laufen zu bringen, wurde hinzugefügt.
Nagul
12
Google Text & Tabellen werden jetzt OCR verwenden , um Ihre hochgeladenen Bild / PDF - Dokumente in Text zu konvertieren. Ich habe gute Erfolge damit gehabt.
Sie verwenden das OCR-System, das für das gigantische Google Books- Projekt verwendet wird.
Es ist jedoch zu beachten, dass nur PDFs bis zu einer Größe von 2 MB zur Verarbeitung zugelassen werden.
Update
1. Laden Sie zum Ausprobieren ein <2 MB großes PDF-Dokument über einen Webbrowser in Google Docs hoch.
2. Klicken Sie mit der rechten Maustaste auf das hochgeladene Dokument und klicken Sie auf "Mit Google Text & Tabellen öffnen".
... Google Text & Tabellen wird in Text konvertiert und in eine neue Datei mit demselben Namen ausgegeben, aber Google Text & Tabellen gibt denselben Ordner ein.
Die Antwort ist nicht wirklich Ubuntu-spezifisch, aber ich möchte mich ganz herzlich bei Ihnen bedanken: BRILLIANT solution! :)
Pitto
Das war wirklich hilfreich :) Ich habe gestern eine 50-MB-Datei hochgeladen und es hat funktioniert. Sieht so aus, als hätten sie die Größenbeschränkung erhöht.
Gaurav
2
Geza Kovacs hat ein Ubuntu-Paket erstellt, das im Grunde genommen ein Skript ist, das hocr2pdfwie von Jukka vorgeschlagen verwendet wird, aber die Einrichtung etwas beschleunigt.
Aus Gezas Ubuntu- Forenbeitrag mit Details zum Paket ...
Hinzufügen des Repositorys und Installieren in Ubuntu
Der beste und einfachste Weg, es zu benutzen pypdfocr, ändert das PDF nicht
pypdfocr your_document.pdf
Am Ende haben Sie einen anderen, your_document_ocr.pdfwie Sie es mit durchsuchbarem Text wollen. Die App ändert die Bildqualität nicht. Erhöht die Größe der Datei ein wenig, indem der Overlay-Text hinzugefügt wird.
Update 3. November 2018:
pypdfocrwird seit 2016 nicht mehr unterstützt und ich habe einige Probleme festgestellt, weil ich nicht betreut wurde. ocrmypdf( Modul ) erledigt einen ähnlichen Job und kann wie folgt verwendet werden:
Erstellen Sie ein Bild für jede Seite der PDF-Datei. eines der obigen gs-Beispiele sollte funktionieren
Generieren Sie eine hOCR-Ausgabe für jede Seite. Ich habe Tesseract verwendet (aber beachte, dass Keilschrift besser zu funktionieren scheint).
Verschieben Sie die Bilder und die hOCR-Dateien in einen neuen Ordner. Die Dateinamen müssen übereinstimmen, daher benötigt file001.tif file001.html, file002.tif file002.html usw.
Führen Sie in dem neuen Ordner aus
pdfbeads * > ../Output.pdf
Dadurch wird die sortierte OCR-PDF im übergeordneten Verzeichnis abgelegt.
#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt
set -e
input="$1"
output="$2"
tmpdir="$(mktemp -d)"
# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"
# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
base="${page%.tiff}"
tesseract "$base.tiff" $base
done
# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output
rm -rf -- "$tmpdir"
In diesem Beitrag wird angegeben, dass das Produkt dies kann. Dies ist ein hilfreicher Hinweis, der als Kommentar veröffentlicht werden sollte. Es wird nicht erklärt, wie das Problem tatsächlich gelöst werden kann. Genau das sollten die Antworten tun. Können Sie Ihre Antwort erweitern, damit jemand sehen kann, wie die Lösung funktioniert?
Fixer1234
Danke @ fixer1234, ich habe es so bearbeitet, dass es den Befehl enthält.
Ich fand ABBYY OCR ziemlich erbärmlich, eines der am wenigsten fähigen Programme, die ich ausprobiert habe. Es könnte angemessen sein, ein wirklich sauberes Bild von Standardschrifttext mit einer typischen Körpertextgröße zu erstellen, ohne gemischte Schriftarten, gemischte Größen, komplexes Layout, Grafiken, Linien usw.
fixer1234
Ja, ich habe es auch versucht, es funktioniert gut. Ich habe Zweifel, kannst du mir helfen?
Praveen Kumar KR
Wenn andere Antworten auf Ihre Fragen hier nicht enthalten sind, stellen Sie am besten Ihre eigenen Fragen. Dadurch wird es vielen Augen ausgesetzt.
Antworten:
Ich hatte Erfolg mit dem BSD-lizenzierten Linux-Port des Cuneiform OCR-Systems.
Da anscheinend keine Binärpakete verfügbar sind, müssen Sie diese aus dem Quellcode erstellen. Stellen Sie sicher, dass die ImageMagick C ++ - Bibliotheken installiert sind, damit im Wesentlichen alle Eingabebildformate unterstützt werden (andernfalls wird nur BMP akzeptiert).
Abgesehen von einer kurzen README-Datei scheint es im Wesentlichen undokumentiert zu sein, aber ich fand die OCR-Ergebnisse ziemlich gut. Das Schöne daran ist, dass es Positionsinformationen für den OCR-Text im hOCR- Format ausgeben kann , so dass es möglich wird, den Text in einer verborgenen Ebene einer PDF-Datei wieder an der richtigen Position abzulegen. Auf diese Weise können Sie durchsuchbare PDF-Dateien erstellen, aus denen Sie Text kopieren können.
Ich habe hocr2pdf verwendet , um PDF-Dateien aus den Original-PDF-Dateien und OCR-Ergebnissen zu erstellen. Leider scheint das Programm das Erstellen mehrseitiger PDFs nicht zu unterstützen, so dass Sie möglicherweise ein Skript erstellen müssen, um damit umzugehen:
Bitte beachten Sie, dass das obige Skript sehr rudimentär ist. Beispielsweise werden keine PDF-Metadaten beibehalten.
quelle
aspell check --mode=html "$base.html"
direkt nach dem Ausführen von cuneiform so etwas wie im Skript hinzufügen .Sehen Sie nach, ob pdftotext für Sie funktioniert. Wenn es nicht auf Ihrem Computer ist, müssen Sie das Paket poppler-utils installieren
Möglicherweise finden Sie auch das PDF-Toolkit .
Eine vollständige Liste der PDF-Software finden Sie hier auf Wikipedia.
Bearbeiten: Da Sie OCR-Funktionen benötigen , denke ich, müssen Sie einen anderen Ansatz versuchen. (dh ich konnte keinen Linux pdf2text Konverter finden, der OCR macht).
PDF in Bild konvertieren
gs: Der folgende Befehl sollte mehrseitige PDF-Dateien in einzelne TIFF-Dateien konvertieren.
ImageMagik-Dienstprogramme : Auf der SuperUser-Website gibt es weitere Fragen zur Verwendung von ImageMagik, die Sie möglicherweise für die Konvertierung verwenden.
Konvertieren Sie das Bild mit OCR in Text
Entnommen aus der Wikipedia- Liste der OCR-Software
quelle
Google Text & Tabellen werden jetzt OCR verwenden , um Ihre hochgeladenen Bild / PDF - Dokumente in Text zu konvertieren. Ich habe gute Erfolge damit gehabt.
Sie verwenden das OCR-System, das für das gigantische Google Books- Projekt verwendet wird.
Es ist jedoch zu beachten, dass nur PDFs bis zu einer Größe von 2 MB zur Verarbeitung zugelassen werden.
Update
1. Laden Sie zum Ausprobieren ein <2 MB großes PDF-Dokument über einen Webbrowser in Google Docs hoch.
2. Klicken Sie mit der rechten Maustaste auf das hochgeladene Dokument und klicken Sie auf "Mit Google Text & Tabellen öffnen".
... Google Text & Tabellen wird in Text konvertiert und in eine neue Datei mit demselben Namen ausgegeben, aber Google Text & Tabellen gibt denselben Ordner ein.
quelle
Geza Kovacs hat ein Ubuntu-Paket erstellt, das im Grunde genommen ein Skript ist, das
hocr2pdf
wie von Jukka vorgeschlagen verwendet wird, aber die Einrichtung etwas beschleunigt.Aus Gezas Ubuntu- Forenbeitrag mit Details zum Paket ...
Hinzufügen des Repositorys und Installieren in Ubuntu
Ausführen von ocr für eine Datei
GitHub-Repository für den Code https://github.com/gkovacs/pdfocr/
quelle
Der beste und einfachste Weg, es zu benutzen
pypdfocr
, ändert das PDF nichtAm Ende haben Sie einen anderen,
your_document_ocr.pdf
wie Sie es mit durchsuchbarem Text wollen. Die App ändert die Bildqualität nicht. Erhöht die Größe der Datei ein wenig, indem der Overlay-Text hinzugefügt wird.Update 3. November 2018:
pypdfocr
wird seit 2016 nicht mehr unterstützt und ich habe einige Probleme festgestellt, weil ich nicht betreut wurde.ocrmypdf
( Modul ) erledigt einen ähnlichen Job und kann wie folgt verwendet werden:Installieren:
oder
quelle
PDFBeads funktioniert gut für mich. Dieser Thread „ Konvertieren gescannter Bilder in eine einzelne PDF-Datei “ hat mich zum Laufen gebracht. Für einen Schwarzweiß-Buchscan müssen Sie:
Führen Sie in dem neuen Ordner aus
Dadurch wird die sortierte OCR-PDF im übergeordneten Verzeichnis abgelegt.
quelle
ein anderes Skript mit tesseract:
quelle
Asprise OCR Library funktioniert unter den meisten Linux-Versionen. Es kann PDF-Eingabe und Ausgabe als PDF-Suche nehmen.
Es ist ein kommerzielles Paket. Laden Sie hier eine kostenlose Version des Asprise OCR SDK für Linux herunter und führen Sie es folgendermaßen aus:
Hinweis: Das eigenständige PDF gibt das Ausgabeformat an.
Haftungsausschluss: Ich bin ein Mitarbeiter der Firma, die das obige Produkt herstellt.
quelle
Probieren Sie Apache PDFBox aus , um Textinhalte aus einer PDF-Datei zu extrahieren. Verwenden Sie bei in PDF-Dateien eingebetteten Bildern ABBYY FineReader Engine CLI für Linux , um Text zu extrahieren.
quelle