Wie extrahiere ich Text mit OCR aus einem PDF unter Linux?

56977
hsribei

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 lasse Kubuntu laufen und Okular hat diese Funktion nicht.

40
Siehe auch: https://softwarerecs.stackexchange.com/q/3412/26815 Keelan vor 6 Jahren 0

9 Antworten auf die Frage

25
Jukka Matilainen

Ich hatte Erfolg mit der von BSD lizenzierten Linux-Portierung des Cuneiform OCR-Systems.

Anscheinend sind keine Binärpakete verfügbar, daher müssen Sie sie aus dem Quellcode erstellen. Stellen Sie sicher, dass die ImageMagick C ++ - Bibliotheken installiert sind, um im Wesentlichen jedes Eingabebildformat zu unterstützen (andernfalls wird nur BMP akzeptiert).

Obwohl es abgesehen von einer kurzen README-Datei im Wesentlichen undokumentiert zu sein scheint, finde ich 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 an einer korrekten Position in einer verborgenen Ebene einer PDF-Datei wieder einzufügen. Auf diese Weise können Sie "durchsuchbare" PDFs erstellen, aus denen Sie Text kopieren können.

Ich habe hocr2pdf verwendet, um PDFs aus den Original-PDFs und OCR-Ergebnissen (nur Bilder) wiederherzustellen. Leider unterstützt das Programm die Erstellung mehrseitiger PDFs nicht. Daher müssen Sie möglicherweise ein Skript erstellen, um sie zu verarbeiten:

#!/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="$" 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 gespeichert.

Haben Sie eine Idee, dieses Skript zu verbessern, um die Stufe der Rechtschreibprüfung hinzuzufügen, um Fehler im Erkennungsschritt zu korrigieren? Gökhan Sever vor 12 Jahren 0
@ Gökhan Sever, meinen Sie 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 etwas wie `aspell check --mode = html" $ base.html "` `gleich nach dem Ausführen von cuneiform hinzufügen. Jukka Matilainen vor 12 Jahren 0
Dies ist eine Lösung. Ohne den gesamten Kontext des Textes zu sehen, ist es jedoch schwierig, Korrekturen vorzunehmen. Es wäre schöner, wenn Sie eine Schnittstelle im Outerfeeder sehen. Gökhan Sever vor 12 Jahren 0
Übrigens benutze ich Tesseract für die Zeichenerkennung: Ersetzen der Keilschriftlinie durch: Tesseract "$ page" "$ base" hocr Gökhan Sever vor 12 Jahren 1
Kleine Korrektur: Die Zeile für tesseract zumindest für andere Sprachen als Englisch, hier zB Deutsch (= deu): `tesseract" $ page "" $ base "-l deu hocr` (natürlich müssen Sie das `` entfernen) . Keks Dose vor 11 Jahren 1
Da ich Probleme mit nicht so genauen pdfs hatte, änderte ich die Engine in gs von "tiff4" in "tiffgray" - und das Ergebnis war sehr gut: `gs -SDEVICE = tiffgray -r300x300 -sOutputFile =" $ tmpdir / page-% 04d .tiff "-dNOPAUSE -dBATCH -" $ input "` vor 11 Jahren 0
@ GökhanSever Ich bekomme diese Fehlermeldung: `Tesseract Open Source OCR Engine v3.03 mit Leptonica OSD: Schwache Marge (0,00) für 571 Blob-Textblöcke, aber Verwendung der Ausrichtung trotzdem: 0 / usr / bin / pdf2text: Zeile 23: / tmp / tmp.XksXutALLp / page-0001.html: Keine solche Datei oder Verzeichnis, wenn ich Ihre Version verwende. Irgendeine Idee, was ich falsch mache? Wikunia vor 9 Jahren 0
@Wikunia ändert $ base.html in $ base.hocr David Milovich vor 5 Jahren 0
13
nagul

Prüfen Sie, ob pdftotext für Sie funktioniert. Wenn es nicht auf Ihrem Computer installiert ist, müssen Sie das Paket poppler-utils installieren

sudo apt-get install poppler-utils 

Möglicherweise finden Sie auch das pdf-Toolkit zur Verwendung.

Eine vollständige Liste der PDF-Software finden Sie hier auf Wikipedia.

Edit: Da Sie OCR-Funktionen benötigen, müssen Sie einen anderen Ansatz ausprobieren. (dh ich konnte keinen linux pdf2text converter finden, der OCR ausführt).

  • Konvertieren Sie das PDF in ein Bild
  • Scannen Sie das Bild mit OCR-Tools in Textform

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-Site gibt es weitere Fragen zur Verwendung von ImageMagik, die Sie möglicherweise verwenden, um Sie bei der Konvertierung zu unterstützen.

    konvertiere foo.pdf foo.png

Konvertieren Sie das Bild mit OCR in Text

Entnommen aus der Wikipedia- Liste der OCR-Software

Funktioniert dieses Programm auch für handschriftliche Textdokumente? Ivo Flipse vor 14 Jahren 2
Nein, ich glaube nicht, dass es OCR-Funktionen hat. Es kann nur den in das PDF eingebetteten Text extrahieren. Manpage: http://linux.die.net/man/1/pdftotext nagul vor 14 Jahren 1
Ja, dies funktioniert für PDF-Dokumente, die bereits mit eingebettetem Text geliefert werden. Mein Fall ist genau einer, in dem es nicht der Fall ist. hsribei vor 14 Jahren 0
@ obvio171 Es wurde die beste Option hinzugefügt, die ich finden konnte, damit OCR in Ihrem Fall funktioniert. nagul vor 14 Jahren 1
11
Russ

Google Text & Tabellen werden jetzt OCR verwenden, um Ihre hochgeladene Bild / PDF - Dokumente in Text zu konvertieren. Ich hatte guten Erfolg damit.

Sie verwenden das OCR-System, das für das gigantische Google Books- Projekt verwendet wird.

Es ist jedoch zu beachten, dass nur PDFs mit einer Größe von 2 MB zur Verarbeitung akzeptiert werden.

Update
1. Um es auszuprobieren, laden Sie ein <2 MB großes PDF-Dokument hoch, um Dokumente in einem Webbrowser zu googeln.
2. Klicken Sie mit der rechten Maustaste auf das hochgeladene Dokument und klicken Sie auf "Mit Google Docs öffnen".
... Google Text & Tabellen wird in Text konvertiert und in eine neue Datei mit demselben Namen, aber Google Text & Tabellen in demselben Ordner ausgegeben.

Die Antwort ist nicht wirklich Ubuntu-spezifisch, aber ich möchte mich wirklich bei Ihnen bedanken: BRILLIANT-Lösung! :) Pitto vor 12 Jahren 0
wow, danke für den hack. sehr hilfreich Jossef Harush vor 6 Jahren 0
Das war wirklich hilfreich :) Ich habe gestern eine 50 MB-Datei hochgeladen und es hat funktioniert. Sieht aus, als hätten sie das Größenlimit erhöht. Gaurav vor 6 Jahren 0
2
ryanjdillon

Geza Kovacs hat ein Ubuntu-Paket erstellt, das im Grunde ein Skript ist, hocr2pdfdas Jukka vorschlägt, das Setup jedoch etwas schneller macht.

Aus Gezas Ubuntu- Forum mit Details zum Paket ...

Repository hinzufügen und in Ubuntu installieren

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

Ocr für eine Datei ausführen

pdfocr -i input.pdf -o output.pdf 

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

1
scruss

PDFBeads works well for me. This thread “Convert Scanned Images to a Single PDF File” got me up and running. For a b&w book scan, you need to:

  1. Create an image for every page of the PDF; either of the gs examples above should work
  2. Generate hOCR output for each page; I used tesseract (but note that Cuneiform seems to work better).
  3. Move the images and the hOCR files to a new folder; the filenames must correspond, so file001.tif needs file001.html, file002.tif file002.html, etc.
  4. In the new folder, run

    pdfbeads * > ../Output.pdf 

This will put the collated, OCR'd PDF in the parent directory.

1
tolima

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="$" tesseract "$base.tiff" $base done  # combine the pages into one txt cat "$tmpdir"/page-*.txt > $output  rm -rf -- "$tmpdir" 
1
Asprise Support

Asprise OCR Library funktioniert mit den meisten Linux-Versionen. Es kann PDF-Eingabe und Ausgabe als Such-PDF übernehmen.

Es ist ein kommerzielles Paket. Laden Sie hier ein kostenloses Asprise OCR SDK für Linux herunter und führen Sie es folgendermaßen aus:

aocr.sh input.pdf pdf 

Hinweis: Das Standalone-Format 'pdf' gibt das Ausgabeformat an.

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

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 soll. Können Sie Ihre Antwort so erweitern, dass jemand sehen kann, wie die Lösung funktioniert? fixer1234 vor 9 Jahren 0
Danke, @ fixer1234, ich habe es so bearbeitet, dass es den Befehl enthält. Asprise Support vor 9 Jahren 0
1
Eduard Florinescu

Der beste und einfachste Weg ist, pypdfocrdas PDF zu ändern

pypdfocr your_document.pdf 

Am Ende haben Sie eine andere your_document_ocr.pdfAuswahl mit durchsuchbarem Text. Die App ändert die Bildqualität nicht. Erhöht die Größe der Datei durch Hinzufügen des Überlagerungstexts.

Update 3. November 2018:

pypdfocrwird seit 2016 nicht mehr unterstützt und ich habe einige Probleme festgestellt, weil sie nicht erwähnt wurden. ocrmypdf( Modul ) macht einen ähnlichen Job und kann wie folgt verwendet werden:

ocrmypdf in.pdf out.pdf 

Installieren:

pip install ocrmypdf 

oder

apt install ocrmypdf 
0
Praveen Kumar K R

Versuchen Sie Apache PDFBox, um Textinhalt aus der PDF-Datei zu extrahieren. Bei in PDF-Dateien eingebetteten Bildern verwenden Sie ABBYY FineReader Engine CLI für Linux, um Text zu extrahieren.

Ich fand ABBYY OCR ziemlich erbärmlich, eines der am wenigsten fähigen Programme, die ich ausprobiert habe. Bei einem wirklich sauberen Bild des Standardtextes mit normaler Textgröße, gemischten Schriftarten, gemischten Größen, komplexem Layout, Grafiken, Linien usw. ist dies möglicherweise ausreichend. fixer1234 vor 9 Jahren 0
Ja, ich habe es auch versucht, es funktioniert gut. Ich habe Zweifel, können Sie mir helfen? Praveen Kumar K R vor 9 Jahren 0
Wenn das, was Sie brauchen, hier nicht in anderen Antworten enthalten ist, stellen Sie am besten Ihre eigene Frage. Dadurch wird es vielen Augen ausgesetzt. fixer1234 vor 9 Jahren 0