2015-08-13 15 views
9

Tôi đã cố gắng thực hiện OCR trong R (đọc dữ liệu PDF có dữ liệu dưới dạng hình ảnh được quét). Đã đọc về điều này @http://electricarchaeology.ca/2014/07/15/doing-ocr-within-r/Làm OCR với R

Đây là bài đăng rất hay.

có hiệu quả 3 bước:

  1. convert pdf để ppm (một định dạng hình ảnh)
  2. chuyển đổi ppm để TIF sẵn sàng cho Tesseract (sử dụng ImageMagick cho chuyển đổi)
  3. chuyển đổi tif dưới dạng file text

Mã hiệu quả cho 3 bước trên theo bài đăng liên kết:

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")) 
    }) 

Hai bước đầu tiên đang diễn ra tốt. (mặc dù dành thời gian tốt, cho 4 trang pdf, nhưng sẽ xem xét phần khả năng mở rộng sau này, trước tiên hãy thử nếu điều này có hiệu quả hay không)

Khi thực hiện thao tác này, hãy thực hiện hai bước.

Trong khi runinng bước thứ 3, tức là

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

Tôi có lỗi này:

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

Hoặc Tesseract là đâm.

Bất kỳ phân tích nguyên nhân gốc hoặc cách giải quyết nào đều sẽ được đánh giá cao.

+0

bạn có thể cung cấp nội dung của 'myfiles' không? – bdecaf

+0

@bdecaf - Thật không may tôi không thể, do vấn đề bảo mật dữ liệu. Về cơ bản các báo cáo tài chính của công ty (hình ảnh được quét) nằm trong pdf (4 trang). Đó là pdf duy nhất là trong các tập tin của tôi. Đây không phải là vấn đề ar (đó là những gì tôi đang suy nghĩ, nhưng nhiều hơn một vấn đề tesseract –

+1

@ r_analytics Bạn đã tìm thấy một giải pháp cho vấn đề của bạn? –

Trả lời

4

Gói mới phát hành tesseract có thể đáng để trả tiền. Nó cho phép bạn thực hiện toàn bộ quá trình bên trong R mà không cần cuộc gọi shell.

Lấy thủ tục được sử dụng trong các help documentation of the tesseract package chức năng của bạn sẽ giống như thế này:

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

Bằng cách sử dụng "Tesseract", tôi tạo ra một kịch bản mẫu mà works.Even nó hoạt động cho quét PDF quá.

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") 

Tôi mới sử dụng R và Lập trình. Hướng dẫn tôi nếu nó sai. Hy vọng điều này sẽ giúp bạn.