R - 使用Magick批量阅读pdfs。循环问题

时间:2018-04-12 21:59:14

标签: r pdf imagemagick ocr

我正在尝试编写一个脚本来读取一系列pdf,使用tesseract包对它们进行OCR,然后使用我可以提取的文本进行操作。

到目前为止,我的情况如下:

ReportDensity <- list()
AllReports <- list.files(path = "path",pattern = "*.PDF",full.names=TRUE)

然后我需要调用每个pdf的页码,以便我可以读取图像数据

for (i in seq(AllReports))
    ReportDensity[[i]] <- pdf_info(AllReports[[i]])
ReportDensity <- lapply(ReportDensity, `[[`, 2)

现在,我想要做的是列出单独图像文件的pdf的每个页面,以便我可以对其进行OCR。

for (i in seq(AllReports))
    for (j in 1:ReportDensity[[i]])

(assign(paste0("Report_",i,"_Page_",j),image_read_pdf(AllReports[[i]],pages = ReportDensity[j])))

我收到的错误消息是:

“poppler_render_page中的错误(loadfile(pdf),page,dpi,opw,upw,antialiasing,:   页面无效。“

我认为是因为我错误地写了循环。我通过手动输入图像/页码来测试代码,并正确加载。

我希望最终的结果是一系列“Report_ReportNumber_PageNumber”形式的图像文件然后我可以处理。

1 个答案:

答案 0 :(得分:0)

pdf主要是文本(最常见); 我通常使用python的pdf2txt从pdfs中提取文本,通过调用

在shell上逐页运行
i=pagenumber

system(paste("pdf2txt -p", i, "-o text.txt pdffile.pdf")) 然后你可以从每个页面grep文本; flag -o可以输出一个html或xml,您可以使用library(rvest)

来删除它
[pdfimages][2] extracts the images contained in pdfs, you can OCR those:

system(paste("pdfimages -f", i, "-l", i, "-p -png pdffile.pdf imagefile"))

可能会从单个页面输出很多png,它们编号为:

system(paste0("tesseract  imagefile-",i,"-006.png out6"))

tesseract有几个参数,你必须在得到一个不错的结果之前调整