我目前正在尝试创建一个将许多pdf文件读入数据框的函数。我的最终目标是让它从pdf文件中读取特定信息,并将它们转换为data.frame,每行包含保险计划名称,以及包含我需要的信息的列,如个人计划价格,家庭计划价格等。一直关注answer given by someone for a similar question in the past。但是,我一直收到错误。以下是我正在练习的两个不同文件的链接(1和2)。
以下是我的代码和错误:
PDFtoDF = function(file) {
dat = readPDF(control=list(text="-layout"))(elem=list(uri=file),
language="en", id="id1")
dat = c(as.character(dat))
dat = gsub("^ ?([0-9]{1,3}) ?", "\\1|", dat)
dat = gsub("(, HVOL )","\\1 ", dat)
dat = gsub(" {2,100}", "|", dat)
excludeRows = lapply(gregexpr("\\|", dat), function(x) length(x)) != 6
write(dat[excludeRows], "rowsToCheck.txt", append=TRUE)
dat = dat[!excludeRows]
dat = read.table(text=dat, sep="", quote="", stringsAsFactors=FALSE)
names(dat) = c("Plan", "Individual", "Family")
return(dat)
}
files <- list.files(pattern = "pdf$")
df = do.call("rbind", lapply(files, PDFtoDF))
Error in read.table(text = dat, sep = "", quote = "", stringsAsFactors =
FALSE) : no lines available in input
在此方法之前,我一直在使用pdftools包和正则表达式。这种方法有效,除了很难澄清文档某些部分的模式,例如位于顶部的计划名称。我希望我现在尝试的方法会有所帮助,因为它会将文本提取为单独的字符串。
答案 0 :(得分:1)
这是最好的答案:
require(readtext)
df <- readtext("*.pdf")
是的,这很简单,使用 readtext 包!