[英]Scraping two-column PDF
我嘗試為一個項目抓取數百個 PDF 的文本。
PDF 有標題頁、頁眉、頁腳和兩列。 我嘗試了pdftools
和tabulizer
包。 但是,兩者都有其優點和缺點:
pdf_text()
function 可以正確讀取 PDF,只有一些可以手動解決的編碼問題,但它沒有考慮到兩列結構。 此外,它會生成一個包含與頁面一樣多的元素的字符向量。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.