Ich möchte ein Skript schreiben, das einen Befehl zu OCR
pdfs ausführt, die die resultierenden Bilder löscht, nachdem die Textdateien geschrieben wurden.Kombinieren Sie zwei Befehle mit GNU parallel für OCR-Projekt
Die zwei Befehle, die ich kombinieren möchte, sind die folgenden.
Dieser Befehl Ordner erstellen, extrahieren pgm
von jedem PDF
und fügt sie in jedem Ordner:
time find . -name \*.pdf | parallel -j 4 --progress 'mkdir -p {.} && gs -dQUIET -dINTERPOLATE -dSAFER -dBATCH -dNOPAUSE -dPDFSETTINGS=/screen -dNumRenderingThreads=4 -sDEVICE=pgmraw -r300 -dTextAlphaBits=4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o {.}/{.}-%03d.pgm {}'
Dieser Befehl funktioniert die OCR und löscht die resultierenden Bilder (pgm
):
time find . -name \*.pgm | parallel -j 4 --progress 'tesseract {} {.} -l deu_frak && rm {.}.pgm'
I möchte beide Befehle kombinieren, so dass das Skript die pgm
Bilder nach jeder OCR löscht. Wenn ich die obigen Befehle ausführe, extrahiert der erste Bilder und wird meinen Speicherplatz auffressen, dann würde der zweite Befehl die OCR machen und erst danach die Bilder als letzten Schritt löschen.
So
- Ordner erstellen
- Extract PGM von PDF
- OCR von PGM txt
- PGM Bilder löschen, die gerade verwendet wurden (fehlende)
Grundsätzlich möchte ich diese 4 Schritte in dieser Reihenfolge für jeden PDF
getrennt durchführen und nicht für alle PDF
an on ce. Wie kann ich das machen?
Edit:
Mein erster Versuch, meine Probleme zu lösen war, den folgenden Befehl aus:
time find . -name \*.pdf | parallel -j 4 -m --progress --eta 'mkdir -p {.} && gs -dQUIET -dINTERPOLATE -dSAFER -dBATCH -dNOPAUSE -dPDFSETTINGS=/screen -dNumRenderingThreads=4 -sDEVICE=pgmraw -r300 -dTextAlphaBits=4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o {.}/{.}-%03d.pgm {}' && time find . -name \*.pgm | parallel -j 4 --progress --eta 'tesseract {} {.} -l deu_frak && rm {.}.pgm'
jedoch Tesserakts das Sprachpaket nicht finden würde.
Bitte geben Sie $ 1 und $ 2 - sonst Ihre Benutzung -print0 nicht wirklich einen Unterschied machen: 'echo "$ 1" "$ 2"'. –
Zusätzlicher Bonus durch Verwendung einer Funktion: Es ist sehr einfach, eine einzelne Datei zu testen. –
Hallo Mark Setchell, danke für die Lösung. Es sieht gut aus! Leider kann ich es nicht funktionieren, indem ich einfach 'n' kopiere, um meine Befehle in das Skript einzufügen. Beachte, dass ich in solchen Dingen Anfänger bin. Wären Sie so freundlich, mit meinen Befehlen eine praktikable Lösung zu erstellen? Das wäre fantastisch! Stellen Sie sich vor, Sie hätten die "PDF" in einem Ordner namens "test". Wie würdest du mit dem Skript fortfahren? –