【问题标题】:Extract text from document in memory using docsplit使用 docsplit 从内存中的文档中提取文本
【发布时间】:2013-04-29 18:54:16
【问题描述】:

使用docsplit gem,我可以从 PDF 或任何其他文件类型中提取文本。例如,使用以下行:

 Docsplit.extract_pages('doc.pdf')

我可以拥有 PDF 文件的文本内容。

我目前正在使用 Rails,PDF 是通过请求发送并存在于内存中的。查看 API 和源代码,我找不到从内存中提取文本的方法,只能从文件中提取。

有没有办法获取此 PDF 的文本以避免创建临时文件?

如果重要的话,我正在使用attachment_fu

【问题讨论】:

    标签: ruby-on-rails ruby attachment-fu docsplit


    【解决方案1】:

    使用临时目录:

    require 'docsplit'
    
    def pdf_to_text(pdf_filename)
      Docsplit.extract_text([pdf_filename], ocr: false, output: Dir.tmpdir)
    
      txt_file = File.basename(pdf_filename, File.extname(pdf_filename)) + '.txt'
      txt_filename = Dir.tmpdir + '/' + txt_file
    
      extracted_text = File.read(txt_filename)
      File.delete(txt_filename)
    
      extracted_text
    end
    
    pdf_to_text('doc.pdf')
    

    【讨论】:

      【解决方案2】:

      如果你有字符串中的内容,使用StringIO创建一个IO可以读取的类文件对象。在StringIO中,无论内容是真文本还是二进制,都一样。

      查看以下任一:

      新的(字符串=“”[,模式]) 使用字符串和模式创建新的 StringIO 实例。 open(string=""[, mode]) {|strio| ...} 等价于 ::new,除了当它被一个块调用时,它产生新实例并关闭它,并返回从块返回的结果。

      【讨论】:

      • 其实这不是我想要的。 Docsplit 需要一个文件路径作为输入,而我不能从 stringio 获得它。输出也是一样。
      • 如果您需要一个文件路径,您将不得不将其写入磁盘。 Tempfile 可以工作,或者正常的File.write 后跟File.delete
      猜你喜欢
      • 2017-10-22
      • 2021-08-08
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      相关资源
      最近更新 更多