4

我正在尝试将 pdf 文件的文件夹读入 R 中的数据框。我可以使用pdftools库和pdf_text(filepath).

理想情况下,我可以获取一系列 pdf 的作者和标题,然后将其推送到具有这些列的数据框中,以便我可以tidytext在文本上使用基本功能。

对于现在的单个文件,我可以使用:

library(pdftools)
library(tidytext)
library(dplyr)
txt <- pdf_text("filpath")
txt <- data_frame(txt)
txt %>%
     unnest_tokens(word, txt)

在这里,我有一个带有单个单词的数据框。我想进入一个数据框,其中我有文章解包,包括标题和作者列。

4

2 回答 2

7

要查找工作目录中的所有 PDF,您可以使用list.files参数:

all_pdfs <- list.files(pattern = ".pdf$")

然后,该all_pdfs对象将是一个包含所有文件名的字符向量。

然后,您可以设置一个管道来读取所有 PDF,并使用 tidytext 和 purrr 中的map函数取消嵌套它们。如果您愿意,可以mutate()在中使用 a来用文件名注释每一行。map()

library(pdftools)
library(tidyverse)
library(tidytext)

map_df(all_pdfs, ~ data_frame(txt = pdf_text(.x)) %>%
    mutate(filename = .x) %>%
    unnest_tokens(word, txt))

您需要做一些更出色的工作才能获得标题和作者列,具体取决于您在哪里获得这些信息。也许在取消嵌套之前txtfilename之前使用正则表达式?

于 2017-05-30T19:34:17.187 回答
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))

safe此外,如果您遇到任何 PDF 解析错误...“poppler_pdf_text(loadfile(pdf), opw, upw ) 中的错误:PDF 解析失败。”...,您可以尝试pdf_text()使用safe_pdf_text <- purrr::safely(pdf_text). 有关为此使用 {purrr} 包的更多信息,请参阅例如 Bruno Rodrigues 的博客http://www.brodrigues.co/blog/2017-03-24-lesser_known_purrr/

于 2018-04-14T22:15:56.157 回答