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.

Helder S. Ribeiro
quelle

Antworten:

25

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:

#!/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.

Jukka Matilainen
quelle
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

sudo apt-get install poppler-utils 

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).

  • 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.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = Buchstabe -sOutputFile = Dateiname_% 04d.tif -dNOPAUSE -dBATCH - Dateiname

  • ImageMagik-Dienstprogramme : Auf der SuperUser-Website gibt es weitere Fragen zur Verwendung von ImageMagik, die Sie möglicherweise für die Konvertierung verwenden.

    konvertiere foo.pdf foo.png

Konvertieren Sie das Bild mit OCR in Text

Entnommen aus der Wikipedia- Liste der OCR-Software

Nagul
quelle
2
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.

Russ
quelle
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

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

Ausführen von ocr für eine Datei

pdfocr -i input.pdf -o output.pdf

GitHub-Repository für den Code https://github.com/gkovacs/pdfocr/

Ryanjdillon
quelle
2

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:

ocrmypdf in.pdf out.pdf

Installieren:

pip install ocrmypdf

oder

apt install ocrmypdf
Eduard Florinescu
quelle
1

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:

  1. Erstellen Sie ein Bild für jede Seite der PDF-Datei. eines der obigen gs-Beispiele sollte funktionieren
  2. Generieren Sie eine hOCR-Ausgabe für jede Seite. Ich habe Tesseract verwendet (aber beachte, dass Keilschrift besser zu funktionieren scheint).
  3. 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.
  4. Führen Sie in dem neuen Ordner aus

    pdfbeads * > ../Output.pdf
    

Dadurch wird die sortierte OCR-PDF im übergeordneten Verzeichnis abgelegt.

scruss
quelle
1

ein anderes Skript mit tesseract:

#!/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"
Tolima
quelle
1

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:

aocr.sh input.pdf pdf

Hinweis: Das eigenständige PDF gibt das Ausgabeformat an.

Haftungsausschluss: Ich bin ein Mitarbeiter der Firma, die das obige Produkt herstellt.

Asprise-Unterstützung
quelle
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.
Asprise Support
0

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.

Praveen Kumar KR
quelle
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.
Fixer1234