我用的是"将PDF文件转换为文本文件,如这里所示:https://cran.r-project.org/web/packages/tesseract/vignettes/intro.html
library(pdftools)
library(tesseract)
pngfile <- pdftools::pdf_convert('myfile_1.pdf', dpi = 600)
text <- tesseract::ocr(pngfile)
cat(text)
上面的代码工作得很好。现在,我试着"大规模上传"。把大量的PDF文件转换成文本——目前,我知道如何手动完成这个任务
#import and convert 1st file
pngfile_1 <- pdftools::pdf_convert('myfile_1.pdf', dpi = 600)
text_1 <- tesseract::ocr(pngfile_1)
#import and convert 2nd file (note: the files do not have the same naming convention)
pngfile_2 <- pdftools::pdf_convert('second_file.pdf', dpi = 600)
text_2 <- tesseract::ocr(pngfile_2)
etc
我将上面的代码复制/粘贴了50次(同时改变了"索引",即pngfile_i, text_i
),并且能够完成我想要做的事情。然而,我正在寻找一个有点"自动";导入和转换所有PDF文件。
目前,我所有的pdf文件都在以下文件夹中:
"C:/Users/me/Documents/mypdfs"
我发现下面的代码可以用来"批量导入"将pdf文件放入R:
library(dplyr)
library(data.table)
tbl_fread <-
list.files(pattern = "*.pdf") %>%
map_df(~fread(.))
但我不确定如何指示此代码从正确的目录("C:/Users/me/Documents/mypdfs"
)导入所有pdf。我也不知道如何指示R"重命名"。每个导入的PDF为"pdf_1, pdf_2等">
如果所有的pdf文件都被正确导入和创建,那么我就可以写一个"循环"并执行所需的命令,例如
# "n" would be the total number of pdf files
for (i in 1:n)
{
pngfile_i <- pdftools::pdf_convert('myfile_i.pdf', dpi = 600)
text_i <- tesseract::ocr(pngfile_i)
}
谁能告诉我怎么做这个?
感谢您可以在您的list.files
-函数中添加full.names = TRUE
,但这假设"C:/Users/me/Documents/mypdfs"
包含在您的project
中。
或者,您可以使用path = "Documents/mypdfs
和full.names = TRUE
,这将把path
指向mypdfs
。
list.files(
path = "Documents/mypdfs"
full.names = TRUE,
pattern = "*.pdf"
)
根据你的pdf_n
保存它们,然后你可以使用paste
和map
。这里我使用data.frames
来提供一个示例,因为我不使用pdf,并且没有我愿意处理的批量文件。
library(tidyverse)
1:length(tbl_fread) %>% map(
.f = function(i) {
# Your regular function
# related to PDF
# Saving according to desired names
write.table(
tbl_fread[[i]],
file = paste0("pdf_", i, ".csv")
)
}
)
为了验证它是否正常工作,我们可以相应地读取它,
read.table(
file = "pdf_1.csv"
)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1