【问题标题】:Not enough space Error appears when running for loop for 13K pdf documents为 13K pdf 文档运行 for 循环时出现空间不足错误
【发布时间】:2019-11-22 11:41:35
【问题描述】:

我正在为 13K pdf 文件执行循环,它在其中读取、预处理文本、查找相似性并写入 txt。但是,当我运行 for 循环时,它会给出错误

Error in poppler_pdf_text(loadfile(pdf), opw, upw) : Not enough space

可能是什么原因?

  1. 我尝试增加memory_limit(),也不是问题。
  2. 我试图删除文件夹中的隐藏文件,如Thumbs.db,但同样的问题再次出现。
  3. 我在每次迭代时删除 pdf 文件。

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文档。

【问题讨论】:

  • 不确定是什么导致了该错误,但底层硬盘驱动器上有多少可用空间?
  • 您知道失败的特定文件吗?可能是那个特定文件的问题。
  • 按照@cory 所说的,您可以尝试在print(s) 之前的循环中插入一个计数器,如下所示:cat("counter: ", s)。然后您将能够查看循环失败的位置,并调查该 pdf 文件。尽管这似乎是一个内存问题,但您可以查看您的计算机可以处理多少文件,并将循环分块分成几部分,以免内存不足运行一次性完成。
  • pdf 文件完全是机器可读的。
  • @r2evans on C:我有大约 1 GB 的可用空间。

标签: r batch-processing


【解决方案1】:

python中有一个生成器功能,可以容纳大量文档,对内存没有任何影响。您可以尝试使用相同的。我不确定您的代码是否在 python 中。即使它不在python中,您也可以合并python库并在python中只执行这段代码。 python中还有一个difflib库,可以用一行代码比较文档。

请参考以下视频。

https://www.youtube.com/watch?v=bD05uGo_sVI

【讨论】:

    【解决方案2】:

    我能够通过以下方式重现此错误:

    • 基于图像的 pdf(16,702 页,161,277 KB)
    • R v3.5.3 64 位
    • textreadr v0.90
    • pdftools v2.2
    • tesseract v4.0
    • Windows 10 64 位
    • 16 GB 内存

    通过将 pdftools 包更新到 v2.3.1 解决了这个问题。

    large_pdf_file <- "path/to/file.pdf"
    
    system.time(test <- textreadr::read_pdf(large_pdf_file))
    #    user  system elapsed
    #  165.64    0.42  166.17
    
    dim(test)
    # [1] 519871      3
    

    The problem is a possible memory leak in the poppler library which is used by the pdftools package.

    在使用textreadr::read_pdf 函数读取基于大图像的 pdf 文件时,任务管理器显示 RAM 显着增加。

    如果您坚持使用旧版本的 pdftools,一些用户报告使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多