【问题标题】:Scraping two-column PDF抓取两列 PDF
【发布时间】:2022-09-26 09:14:36
【问题描述】:

我尝试为一个项目抓取数百个 PDF 的文本。

PDF 有标题页、页眉、页脚和两列。我尝试了包pdftoolstabulizer。但是,两者都有其优点和缺点:

  • pdftools 的pdf_text() 函数可以正确读取PDF,只有一些可以手动解决的编码问题,但它没有考虑两列结构。此外,它会生成一个包含与页面一样多的元素的字符向量。
  • 相反,tabulizer 中的extract_text() 函数可以很好地处理两列结构,但会产生(在许多情况下)不正确的结果(下面的示例)。此外,它生成一个字符值,其中只有一个元素包含整个 PDF 文档的文本。

基于 stackoverflow 上的另一篇文章,我构建了以下基于制表器的函数,因为它处理 PDF 的两列结构并输出包含存储在单独元素中的所有页面的向量:

get_text <- function(url) {
  # Get nunber of pages of PDF
  p <- get_n_pages(url)
  # Initialize a list
  L <- vector(mode = \"list\", length = 1)
  # Extract text from pdf
  txt <- tabulizer::extract_text(url, pages = seq(1,p))
  # Output: character vector containing all pages
  return(txt)
}

虽然它通常工作正常,但有些 PDF 无法正确阅读。例如,

get_text(url = \"https://aplikace.mvcr.cz/sbirka-zakonu/ViewFile.aspx?type=c&id=3592\")

而不是正确的单词和数字(包含捷克字母),例如 \"\"\\001\\002\\r\\n\\b\\a\\004 \\006\\t\\ n\\r\\n% .\\005 \\t\\031\\033 * .\" 显示。但是,并非适用于所有 PDF。此外,请注意 pdftools 正确读取它(忽略两列) .

任何人都可以帮助我解决这个问题或者可以解释它为什么会发生吗?

非常感谢您!

    标签: r pdf web-scraping pdftools tabulizer


    【解决方案1】:

    我遇到了一些PDF的这个问题。我使用的一种解决方案是使用 stringr 将数字转换为它们的真实值。这是一个例子:

    convert_Special_Coding_Numbers <- function(text)
    {
      text <- stringr::str_replace_all(string = text, pattern = "\\003", "")
      text <- stringr::str_replace_all(string = text, pattern = "\\025", "2")
      text <- stringr::str_replace_all(string = text, pattern = "\\030", "5")
      text <- stringr::str_replace_all(string = text, pattern = "\\026", "3")
      text <- stringr::str_replace_all(string = text, pattern = "\\034", "9")
      text <- stringr::str_replace_all(string = text, pattern = "\\017", ",")
      text <- stringr::str_replace_all(string = text, pattern = "\\023", "0")
      text <- stringr::str_replace_all(string = text, pattern = "\\027", "4")
      return(text)
    }
    
    

    【讨论】:

      猜你喜欢
      • 2021-06-30
      • 2011-12-16
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 2018-03-13
      • 1970-01-01
      相关资源
      最近更新 更多