【问题标题】:Converting pdf files into data.frames将 pdf 文件转换为 data.frames
【发布时间】:2017-06-14 21:30:51
【问题描述】:

我目前正在尝试创建一个将许多 pdf 文件读入数据框的函数。我的最终目标是让它从 pdf 文件中读取特定信息并将它们转换为 data.frame,其中每行包含保险计划名称,列包含我需要的信息,例如个人计划价格、家庭计划价格等。我一直关注answer given by someone for a similar question in the past。但是,我不断收到错误消息。这是我正在练习的两个不同文件的链接(12)。

下面是我的代码和错误:

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 包和正则表达式。这种方法很有效,只是很难澄清文档某些部分的模式,例如顶部的计划名称。我希望我现在尝试的方法会有所帮助,因为它会为我将文本提取到单独的字符串中。

【问题讨论】:

    标签: r pdf tm


    【解决方案1】:

    这是最佳答案:

    require(readtext)
    df <- readtext("*.pdf")
    

    是的,就这么简单,使用 readtext 包!

    【讨论】:

    • 当我打印它为 pdf 文本创建的“文本”变量时,该变量会在控制台中显示其中的一些内容,然后显示 。这是否意味着 pdf 中的所有信息都已存储但太长而无法在控制台中打印出来?顺便说一句,这可能有用——谢谢!我想我可以尝试弄清楚如何将一个变量拆分为多个变量,然后开始从中获取我需要的信息,并将它们放入每个文档自己的单元格/变量中。我认为学习如何制作一个带循环的函数来处理许多 pdf 文件应该不会太难。
    • 这只是一个data.frame,文本列被称为(在你的例子中)df$text。然而 readtext 包借用了 tibble 的 print 方法,因此您可以在控制台中看到对象的一个​​版本。截断只是为了打印,而不是对对象所做的任何事情。
    • 感谢您的帮助!我的最终目标是能够从每个 pdf 中获取定价数据以及特定的措辞/句子,并将其放入数据库中。您对这个项目的最佳方法或有益的软件包有什么建议吗?我担心纯粹使用基本的正则表达式来查找模式,将它们拆分为我想要的变量,然后转换为列变量可能不是最好的方法lol
    猜你喜欢
    • 2020-12-29
    • 2011-12-23
    • 1970-01-01
    • 2020-06-25
    • 2018-06-03
    • 2013-07-10
    • 2012-04-14
    • 1970-01-01
    相关资源
    最近更新 更多