Wie kann ich mit OCR effizient Text aus einem Verzeichnis von PDF-Dateien extrahieren?Python

Python-Programme
Anonymous
 Wie kann ich mit OCR effizient Text aus einem Verzeichnis von PDF-Dateien extrahieren?

Post by Anonymous »

Ich habe ein großes Verzeichnis mit PDF-Dateien (Bilder). Wie kann ich den Text effizient aus allen Dateien im Verzeichnis extrahieren? Bisher habe ich Folgendes versucht:

Code: Select all

import multiprocessing
import textract

def extract_txt(file_path):
text = textract.process(file_path, method='tesseract')

p = multiprocessing.Pool(2)
file_path = ['/Users/user/Desktop/sample.pdf']
list(p.map(extract_txt, file_path))
Allerdings funktioniert es nicht ... es nimmt viel Zeit in Anspruch (ich habe einige Dokumente mit 600 Seiten). Außerdem: a) Ich weiß nicht, wie ich den Teil der Verzeichnistransformation effizient handhaben soll. b) Ich möchte ein Seitentrennzeichen hinzufügen, sagen wir: ... Seiteninhalt ... , aber ich habe keine Ahnung, wie das geht.

Wie kann ich also die Funktion extract_txt auf alle Elemente eines Verzeichnisses anwenden, die mit .pdf enden, und dieselben Dateien in einem anderen Verzeichnis zurückgeben, aber im .txt-Format, und Einen Seitentrenner mit OCR-Textextraktion hinzufügen?.

Außerdem war ich neugierig auf die Verwendung von Google Docs für diese Aufgabe. Ist es möglich, Google Docs programmgesteuert zu verwenden, um das oben genannte Textextraktionsproblem zu lösen?.

UPDATE

Bezüglich des Problems „Hinzufügen eines Seitentrenners“ (

Code: Select all

 ... page content ... 
) Nachdem ich Roland Smiths Antwort gelesen hatte, versuchte ich:

Code: Select all

from PyPDF2 import PdfFileWriter, PdfFileReader
import textract

def extract_text(pdf_file):
inputpdf = PdfFileReader(open(pdf_file, "rb"))
for i in range(inputpdf.numPages):
w = PdfFileWriter()
w.addPage(inputpdf.getPage(i))
outfname = 'page{:03d}.pdf'.format(i)
with open(outfname, 'wb') as outfile:  # I presume you need `wb`.
w.write(outfile)
print('\n\n')
text = textract.process(str(outfname), method='tesseract')
os.remove(outfname)  # clean up.
print(str(text, 'utf8'))
print('\n\n')

extract_text('/Users/user/Downloads/ImageOnly.pdf')
Allerdings habe ich immer noch Probleme mit dem print()-Teil, da es sinnvoller wäre, die gesamte Ausgabe in einer Datei zu speichern, anstatt sie auszudrucken. Daher habe ich versucht, die Ausgabe in eine Datei umzuleiten:

Code: Select all

sys.stdout=open("test.txt","w")
print('\n\n')
sys.stdout.close()
text = textract.process(str(outfname), method='tesseract')
os.remove(outfname)  # clean up.
sys.stdout=open("test.txt","w")
print(str(text, 'utf8'))
sys.stdout.close()
sys.stdout=open("test.txt","w")
print('\n\n')
sys.stdout.close()
Irgendeine Idee, wie man den Trick zum Extrahieren/Trennen von Seiten umsetzt und alles in einer Datei speichert?...

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post