使用 lapply 创建语料库时出现内存问题

Memory problems when using lapply for corpus creation

我最终的目标是将数千个pdf转换成语料库/文档术语矩阵来进行一些主题建模。我正在使用 pdftools 包导入我的 pdf 并使用 tm 包来准备我的数据以进行文本挖掘。我设法导入并转换了一个单独的 pdf,如下所示:

txt <- pdf_text("pdfexample.pdf")

#create corpus
txt_corpus <- Corpus(VectorSource(txt))

# Some basic text prep, with tm_map(), like:
txt_corpus <- tm_map(txt_corpus, tolower)

# create document term matrix
dtm <- DocumentTermMatrix(txt_corpus)

但是,我完全坚持自动化这个过程,而且我对循环或应用函数的经验有限。在将原始 pdf_text() 输出转换为语料库时,我的方法有 运行 内存问题,即使我只用 5 个 pdf 文件(总计:1.5MB)测试了我的代码。 R 试图分配超过一半 GB 的向量。这对我来说绝对不对。我的尝试是这样的:

# Create a list of all pdf paths
file_list <- list.files(path = "mydirectory",
                 full.names = TRUE,
                 pattern = "name*", # to import only specific pdfs
                 ignore.case = FALSE)

# Run a function that reads the pdf of each of those files:
all_files <- lapply(file_list, FUN = function(files) {
             pdf_text(files)
             })

all_files_corpus = lapply(all_files,
                          FUN = Corpus(DirSource())) # That's where I run into memory issues

我是不是做错了什么?不确定这是否只是一个内存问题,或者是否有更简单的方法来解决我的问题。至少,从我收集到的信息来看,lapply 应该比循环更有效地存储内存。但也许还有更多。几天来我一直试图自己解决它,但没有任何效果。

感谢 advice/hint 如何继续!

编辑:我尝试只用一个 pdf 执行 lapply,我的 R 再次崩溃,即使我完全没有容量问题,当使用第一个提到的代码时。

您可以编写一个函数,其中包含要在每个 pdf 上执行的一系列步骤。

pdf_to_dtm <- function(file) {
  txt <- pdf_text(file)
  #create corpus
  txt_corpus <- Corpus(VectorSource(txt))
  # Some basic text prep, with tm_map(), like:
  txt_corpus <- tm_map(txt_corpus, tolower)
  # create document term matrix
  dtm <- DocumentTermMatrix(txt_corpus)
  dtm
}

使用lapply 将函数应用于每个文件

file_list <- list.files(path = "mydirectory",
                 full.names = TRUE,
                 pattern = "name*", # to import only specific pdfs
                 ignore.case = FALSE)

all_files_corpus <- lapply(file_list, pdf_to_dtm)