tidytext从文件夹中读取文件

时间:2017-05-30 05:55:23

标签: r nlp tidytext

我试图将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)

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

2 个答案:

答案 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))

您需要做一些更高级的工作才能获得标题和作者列,具体取决于您拥有该信息的位置。在删除之前,可能会在txtfilename上使用正则表达式吗?

答案 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/

撰写