【发布时间】:2022-09-26 09:14:36
【问题描述】:
我尝试为一个项目抓取数百个 PDF 的文本。
PDF 有标题页、页眉、页脚和两列。我尝试了包pdftools 和tabulizer。但是,两者都有其优点和缺点:
- 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