it-swarm.com.de

Konvertieren Sie gescannte PDF-Dateien in Text-Python

Ich habe eine gescannte PDF-Datei und versuche, Text daraus zu extrahieren ... Ich habe versucht, Pypdfocr zu verwenden, um OCR darauf zu machen, aber ich habe eine Fehlermeldung: 

"Ghostscript konnte an gewohnter Stelle nicht gefunden werden"

Nach der Suche fand ich diese Lösung Ghostscript in Windows Platform mit pypdfocr verlinken und ich habe versucht, GhostScript herunterzuladen und in Umgebungsvariable zu setzen, aber es hat immer noch den gleichen Fehler.

Wie kann ich mit Python in meiner gescannten PDF-Datei Text suchen?

Vielen Dank.

Edit: hier ist mein Codebeispiel:

import os
import sys
import re
import json
import shutil
import glob
from pypdfocr import pypdfocr_gs
from pypdfocr import pypdfocr_tesseract 
from PIL import Image

path = PATH_TO_MY_SCANNED_PDF
mainL = []
kk = {}


def new_init(self, kk):
    self.lang = 'heb'   
    self.binary = "tesseract"
    self.msgs = {
            'TS_MISSING': """ 
                Could not execute %s
                Please make sure you have Tesseract installed correctly
                """ % self.binary,
            'TS_VERSION':'Tesseract version is too old',
            'TS_img_MISSING':'Cannot find specified tiff file',
            'TS_FAILED': 'Tesseract-OCR execution failed!',
        }

pypdfocr_tesseract.PyTesseract.__init__ = new_init  

wow = pypdfocr_gs.PyGs(kk)
tt = pypdfocr_tesseract.PyTesseract(kk)


def secFile(filename,oldfilename):
    wow.make_img_from_pdf(filename)


    files = glob.glob("X:/e206333106/ocr-114/balagan/" + '*.jpg')  
    for file in files:
        im = Image.open(file)
        im.save(file + ".tiff") 

    files = glob.glob("PATH" + '*.tiff')  
    for file in files:
        tt.make_hocr_from_pnm(file)
    pdftxt = ""    
    files = glob.glob("PATH" + '*.html') 
    for file in files:
        with open(file) as myfile:
            pdftxt = pdftxt + "#" + "".join(line.rstrip() for line in myfile)
    findNum(pdftxt,oldfilename)

    folder ="PATH"

    for the_file in os.listdir(folder):
        file_path = os.path.join(folder, the_file)
        try:
            if os.path.isfile(file_path):
                os.unlink(file_path)
        except Exception, e:
            print e

def pdf2ocr(filename):
    pdffile = filename
    os.system('pypdfocr -l heb ' + pdffile)

def ocr2txt(filename):  
    pdffile = filename


    output1 = pdffile.replace(".pdf","_ocr.txt")
    output1 = "PATH" + os.path.basename(output1)

    input1 = pdffile.replace(".pdf","_ocr.pdf")

    os.system("pdf2txt" -o  + output1 + " " + input1) 

    with open(output1) as myfile:
        pdftxt="".join(line.rstrip() for line in myfile)
    findNum(pdftxt,filename)


def findNum(pdftxt,pdffile):
    l = re.findall(r'\b\d+\b', pdftxt)


    output = open('PATH' + os.path.basename(pdffile) + '.txt', 'w')
    for i in l:
        output.write(",")
        output.write(i)
    output.close()    

def is_ascii(s):
    return all(ord(c) < 128 for c in s)

i = 0     
files = glob.glob(path + '\\*.pdf') 
print path  
print files 
for file in files:
    if file.endswith(".pdf"):
        if is_ascii(file):
            print file
            pdf2ocr(file)    
            ocr2txt(file)
        else:
            newname = "PATH" + str(i) + ".pdf"
            shutil.copyfile(file, newname)
            print newname
            secFile(newname,file)
        i = i + 1

files = glob.glob(path + '\\' + '*_ocr.pdf')         

for file in files:
    print file
    shutil.copyfile(file, "PATH" + os.path.basename(file))
    os.remove(file)
3
Michal

Schauen Sie sich diese Bibliothek an: https://pypi.python.org/pypi/pypdfocr Eine PDF -Datei kann jedoch auch Bilder enthalten. Möglicherweise können Sie die Seiteninhaltsströme analysieren. Einige Scanner teilen die einzelne gescannte Seite in Bilder auf, sodass der Text nicht mit Ghostscript angezeigt wird.

2
ghovat

Sie können OpenCV für Python verwenden. Es gibt viele Beispiele, in denen Text erkannt werden kann .. Hier ist der Link Linkbeschreibung hier eingeben

0
E. Alex