我正在为13K pdf文件做循环,它在其中读取,预处理文本,查找相似之处并以txt形式写入。但是,当我运行for循环时,会出现错误
Error in poppler_pdf_text(loadfile(pdf), opw, upw) : Not enough space
可能是什么原因?
memory_limit()
,这也不是问题。 Thumbs.db
,但是再次出现相同的问题。
folder_path <- "C: ...."
## get vector with all pdf names
pdf_folder <- list.files(folder.path)
## for loop over all pdf documents
for(s in 1:length(pdf_folder)){
## choose one pdf document from vector of strings
pdf_document_name <- pdf_folder[s]
## read pdf_document pdf into data.frame
pdf <- read_pdf(paste0(folder_path,"/",pdf_document_name))
print(s)
rm(pdf)
} ## end of for loop
# Error:
Error in poppler_pdf_text(loadfile(pdf), opw, upw) : Not enough space
预期结果是读取原始路径中的所有pdf文档。
答案 0 :(得分:0)
我能够通过以下方式重现此错误:
textreadr :: read_pdf函数是pdftools :: pdf_text函数的包装器-错误消息中提到了该函数。 According to the docs pdf_text函数将所有文本框呈现在文本画布上,并返回与PDF文件中的页数相等长度的字符向量。
**编辑**
经过大量挖掘,it appears to be a problem is with the pdftools package and possibly the poppler library。如果您在运行textreadr :: read_pdf函数的同时观看任务管理器,则会发现RAM的使用显着增加。
您可以尝试this workaround,它已经为某些人工作了。我使用与以前相同的大pdf文件进行了尝试,并收到此错误:
pdf <- callr::r(function(){
textreadr::read_pdf('filename.pdf')
})
Error in value[[3L]](cond) :
callr subprocess failed: could not start R, exited with non-zero status,
has crashed or was killed
答案 1 :(得分:0)
python中有一个生成器函数,该函数可以保存大量文档,而不会影响内存。您可以尝试使用相同的。我不确定您的代码是否在python中。即使不是在python中,您也可以合并python库并仅在python中执行这段代码。 python中还有一个 difflib 库,可以用单行代码比较文档。
请参考以下视频。