我试图将pdf文件的文件夹读入R中的数据框。我能够使用pdftools
库和pdf_text(filepath)
读取单个pdf文件。
理想情况下,我可以抓取一系列pdf的作者和标题,然后将其推送到具有这些列的数据框中,以便我可以在文本上使用基本的tidytext
函数
现在对于单个文件,我可以使用:
library(pdftools)
library(tidytext)
library(dplyr)
txt <- pdf_text("filpath")
txt <- data_frame(txt)
txt %>%
unnest_tokens(word, txt)
这里我有一个包含单个单词的数据框。我想进入一个数据框,我在其中解压缩文章,包括标题和作者列。
答案 0 :(得分:3)
要查找工作目录中的所有PDF,可以将list.files
与参数一起使用:
all_pdfs <- list.files(pattern = ".pdf$")
all_pdfs
对象将是一个包含所有文件名的字符向量。
然后,您可以设置一个管道来读取所有PDF,并使用来自purrr的map
函数的tidytext取消它们。如果您愿意,可以使用mutate()
中的map()
来使用文件名注释每一行。
library(pdftools)
library(tidyverse)
library(tidytext)
map_df(all_pdfs, ~ data_frame(txt = pdf_text(.x)) %>%
mutate(filename = .x) %>%
unnest_tokens(word, txt))
您需要做一些更高级的工作才能获得标题和作者列,具体取决于您拥有该信息的位置。在删除之前,可能会在txt
或filename
上使用正则表达式吗?
答案 1 :(得分:0)
我可以建议添加:basename(.x)
。如果您像我一样使用full_names = TRUE
中的list.files()
选项,这将删除完整路径信息。
df <- map_df(all_pdfs[3:5], ~ data_frame(txt = pdf_text(.x)) %>%
mutate(filename = basename(.x)) %>%
unnest_tokens(word, txt))
此外,如果您遇到任何PDF解析错误......“poppler_pdf_text中的错误(loadfile(pdf),opw,upw):PDF解析失败。”...,您可以尝试创建safe
版本具有pdf_text()
的{{1}}函数。有关使用{purrr}包的更多信息,请参阅例如这个博客由Bruno Rodrigues http://www.brodrigues.co/blog/2017-03-24-lesser_known_purrr/