2015-08-13 2 views
9

J'ai essayé de faire OCR dans R (lire les données PDF quelles données comme image balayée). J'ai lu à ce sujet @http://electricarchaeology.ca/2014/07/15/doing-ocr-within-r/Faire OCR avec R

Ceci est un très bon article.

Efficacement 3 étapes:

  1. convertir pdf en ppm (format d'image)
  2. convertir ppm en TIF prêt pour Tesseract (en utilisant ImageMagick pour convertir)
  3. convertir TIF dans un fichier texte

Le code efficace pour les 3 étapes ci-dessus selon le message de liaison:

lapply(myfiles, function(i){ 
    # convert pdf to ppm (an image format), just pages 1-10 of the PDF 
    # but you can change that easily, just remove or edit the 
    # -f 1 -l 10 bit in the line below 
    shell(shQuote(paste0("F:/xpdf/bin64/pdftoppm.exe ", i, " -f 1 -l 10 -r 600 ocrbook"))) 
    # convert ppm to tif ready for tesseract 
    shell(shQuote(paste0("F:/ImageMagick-6.9.1-Q16/convert.exe *.ppm ", i, ".tif"))) 
    # convert tif to text file 
    shell(shQuote(paste0("F:/Tesseract-OCR/tesseract.exe ", i, ".tif ", i, " -l eng"))) 
    # delete tif file 
    file.remove(paste0(i, ".tif")) 
    }) 

Les deux premières étapes se passent bien. (bien que prenant beaucoup de temps, pour 4 pages d'un pdf, mais examinera plus tard la partie d'évolutivité, d'abord essayer si cela fonctionne ou pas)

Tout en courant cela, les deux premières étapes fonctionnent bien.

Alors que runinng la 3e étape, i.e.

shell(shQuote(paste0("F:/Tesseract-OCR/tesseract.exe ", i, ".tif ", i, " -l eng"))) 

I ayant cette erreur:

Error: evaluation nested too deeply: infinite recursion/options(expressions=)?

Ou Tesseract se bloque. Toute solution de contournement ou d'analyse des causes profondes serait appréciée.

+0

pouvez-vous donner le contenu de 'myfiles'? – bdecaf

+0

@bdecaf - Malheureusement, je ne peux pas, en raison de problème de sécurité des données. Essentiellement ses états financiers des entreprises (image numérisée) qui est à l'intérieur du pdf (4 pages). Ce seul pdf est dans mes fichiers. Ce n'est pas un problème (c'est ce que je pense, mais plus d'un problème de tesseract –

+1

@r_analytics Avez-vous trouvé une solution à votre problème? –

Répondre

4

Le package tesseract récemment publié peut être intéressant. Il vous permet d'effectuer l'ensemble du processus à l'intérieur de R sans les appels shell.

Prendre la procédure utilisée dans la help documentation of the tesseract package votre fonction ressemblerait à quelque chose comme ceci:

lapply(myfiles, function(i){ 
    # convert pdf to jpef/tiff and perform tesseract OCR on the image 

    # Read in the PDF 
    pdf <- pdf_text(i) 
    # convert pdf to tiff 
    bitmap <- pdf_render_page(news, dpi = 300) 
    tiff::writeTIFF(bitmap, paste0(i, ".tiff")) 
    # perform OCR on the .tiff file 
    out <- ocr(paste0, (".tiff")) 
    # delete tiff file 
    file.remove(paste0(i, ".tiff")) 
}) 
2

En utilisant « tesseract », je créé un exemple de script qui works.Even cela fonctionne pour les documents PDF scannés est trop.

library(tesseract) 
library(pdftools) 

# Render pdf to png image 

img_file <- pdftools::pdf_convert("F:/gowtham/A/B/invoice.pdf", format = 'tiff', dpi = 400) 

# Extract text from png image 
text <- ocr(img_file) 
write.table(text, "F:/gowtham/A/B/mydata.txt") 

Je suis nouveau dans R and Programming. Guide-moi si c'est faux. J'espère que cela vous aidera.