【问题标题】:Extracting text data from PDF files从 PDF 文件中提取文本数据
【发布时间】:2011-04-20 14:56:53
【问题描述】:

是否可以在 R 中解析 PDF 文件中的文本数据? does not appear to be a relevant package for such extraction,但有没有人尝试或看到在 R 中完成此操作?

Python there is PDFMiner,但如果可能的话,我想把这个分析全部保存在 R 中。

有什么建议吗?

【问题讨论】:

  • 虽然这个问题只是模糊相关,但答案指出了从PDF文件中提取文本的一些有趣问题:*.com/questions/2732178/…
  • 谢谢尼科。幸运的是,我正在使用的特定 PDF 是非常简单的文本文件,所以希望这不会成为问题。

标签: pdf r parser-generator


【解决方案1】:
install.packages("pdftools")
library(pdftools)


download.file("http://www.nfl.com/liveupdate/gamecenter/56901/DEN_Gamebook.pdf", 
              "56901.DEN.Gamebook", mode = "wb")

txt <- pdf_text("56901.DEN.Gamebook")
cat(txt[1])

【讨论】:

    【解决方案2】:

    这是一个非常古老的线程,但供将来参考:pdftools R 包从 PDF 中提取文本。

    【讨论】:

    • 这个包确实是目前使用 R 从 PDF 中获取文本的最简单方法。
    • 是的,这个线程在 pdftools 之前。对我来说也一样 - 非常有用的工具。使得从 pdf 文件中提取偶数表变得相对容易。
    【解决方案3】:

    纯粹的 R 解决方案可能是:

    library('tm')
    file <- 'namefile.pdf'
    Rpdf <- readPDF(control = list(text = "-layout"))
    corpus <- VCorpus(URISource(file), 
          readerControl = list(reader = Rpdf))
    corpus.array <- content(content(corpus)[[1]])
    

    那么您将在数组中包含 pdf 行。

    【讨论】:

      【解决方案4】:

      tabula PDF 表格提取器应用程序基于基于 Java JAR 包 tabula-extractor 的命令行应用程序。

      R tabulizer package 提供了一个 R 包装器,可以轻松地将路径传递到 PDF 文件并从数据表中提取数据。

      Tabula 可以很好地猜测表格的位置,但您也可以通过指定页面的目标区域来告诉它要查看页面的哪个部分。

      可以从多个页面中提取数据,如果需要,可以为每个页面指定不同的区域。

      有关示例用例,请参阅:When Documents Become Databases – Tabulizer R Wrapper for Tabula PDF Table Extractor

      【讨论】:

        【解决方案5】:

        我使用外部实用程序进行转换并从 R 中调用它。所有文件都有一个包含所需信息的前导表

        设置pdftotxt.exe的路径并将pdf转为文本

        exeFile <- "C:/Projects/xpdfbin-win-3.04/bin64/pdftotext.exe"
        
        for(i in 1:length(pdfFracList)){
            fileNumber <- str_sub(pdfFracList[i], start = 1, end = -5)
            pdfSource <- paste0(reportDir,"/", fileNumber, ".pdf")
            txtDestination <- paste0(reportDir,"/", fileNumber, ".txt")
            print(paste0("File number ", i, ", Processing file ", pdfSource))
            system(paste(exeFile, "-table" , pdfSource, txtDestination, sep = " "), wait = TRUE)
        }
        

        【讨论】:

          【解决方案6】:

          一位同事让我开始使用这个方便的开源工具:http://tabula.nerdpower.org/。安装、上传 PDF,然后在 PDF 中选择需要数据化的表格。不是 R 中的直接解决方案,但肯定比体力劳动好。

          【讨论】:

          【解决方案7】:

          Linux 系统有pdftotext,我在这方面取得了相当大的成功。默认情况下,它从给定的foo.pdf 创建foo.txt

          也就是说,文本挖掘包可能有转换器。 quick rseek.org search 似乎同意您的疯狂搜索。

          【讨论】:

          • 你推荐文本挖掘包是对的。 tm 包有 readPDF,这似乎正是我需要的。
          • 这里是pdftotextR 工作流程中,对于那些不熟悉Linux 的人:*.com/a/19926301/1036500
          • 能否将PDF文件中的文本数据提取成html格式
          • .@DirkEddelbuettel - 有没有办法阅读 PDF 的特定页面而不是完整的 PDF?
          • 您可以使用 pdf 命令行工具先提取特定页面,然后再阅读。