簡體   English   中英

刮兩列PDF

[英]Scraping two-column PDF

我嘗試為一個項目抓取數百個 PDF 的文本。

PDF 有標題頁、頁眉、頁腳和兩列。 我嘗試了pdftoolstabulizer包。 但是,兩者都有其優點和缺點:

  • pdftools 中的pdf_text() function 可以正確讀取 PDF,只有一些可以手動解決的編碼問題,但它沒有考慮到兩列結構。 此外,它會生成一個包含與頁面一樣多的元素的字符向量。
  • 相反,來自 tabulizer 的extract_text() function 可以很好地處理兩列結構,但會產生(在許多情況下)不正確的結果(下面的示例)。 此外,它生成一個字符值,其中只有一個元素包含整個 PDF 文檔的文本。

基於stackoverflow上的另一篇文章,我構建了基於tabulizer的function,因為它處理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 正確讀取它(忽略兩列)。

任何人都可以幫助我解決這個問題或者可以解釋它為什么會發生嗎?

非常感謝您!

我遇到了一些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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM