tidytext 从文件夹中读取文件

tidytext read files from folder

我正在尝试将 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)

这里我有一个包含单个单词的数据框。我想访问一个数据框,我在其中解压了文章,包括标题和作者列。

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

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

all_pdfs object 将是一个包含所有文件名的字符向量。

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

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

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

您需要做一些更高级的工作才能获得标题和作者栏,具体取决于您在何处获得该信息。也许在取消嵌套之前在 txtfilename 上使用正则表达式?

我可以建议添加:basename(.x)。如果您像我一样在 list.files() 中使用 full_names = TRUE 选项,这将删除完整路径信息。

df <- map_df(all_pdfs[3:5], ~ data_frame(txt = pdf_text(.x)) %>%
    mutate(filename = basename(.x)) %>%
    unnest_tokens(word, txt))

此外,如果您遇到任何 PDF 解析错误..."Error in poppler_pdf_text(loadfile(pdf), opw, upw) : PDF parsing failure."...,您可以尝试使用 [=16= 创建 pdf_text() 函数的 safe 版本].有关为此使用 {purrr} 包的更多信息,请参见例如此博客由布鲁诺·罗德里格斯 http://www.brodrigues.co/blog/2017-03-24-lesser_known_purrr/