【问题标题】:Best tool for text extraction from PDF in Python 3.4 [closed]在 Python 3.4 中从 PDF 中提取文本的最佳工具 [关闭]
【发布时间】:2015-12-16 12:15:38
【问题描述】:

我使用的是 Python 3.4,需要从 PDF 中提取所有文本,然后将其用于文本处理。

我看到的所有答案都建议了 Python 2.7 的选项。

我需要 Python 3.4 中的一些东西。

邦森

【问题讨论】:

  • 不知道为什么投反对票。正如我所提到的,我检查了所有可用的,也在谷歌上。我发现可以与 Python 3.4 一起使用的唯一一个是在这个 xPDF detail 中,所有其他的都是 2.7 版。我在 Python 3.4 版上一无所获。要求在投反对票时也发表评论。
  • 这是一个很好但公然离题的问题。使用SoftwareRecs 进行图书馆推荐。
  • 你可以试试这个解决方案,它在 python 3 Link 中运行良好
  • pdfplumber 是最好的选择。 [Reference]

标签: python-3.x pdf


【解决方案1】:
import pdfreader
pdfFileObj = open('/tmp/Test-test-test.pdf','rb')
viewer = SimplePDFViewer(pdfFileObject)
viewer.navigate(1)
viewer.render()
viewer.canvas.strings

【讨论】:

    【解决方案2】:

    slate3k 非常适合提取文本。我已经使用 Python 3.7.3 对几个 PDF 文件进行了测试,例如,它比 PyPDF2 准确得多。它是 slate 的一个分支,它是 PDFMiner 的包装器。这是我正在使用的代码:

    import slate3k as slate
    
    with open('Sample.pdf', 'rb') as f:
        doc = slate.PDF(f)
    
    doc
    #prints the full document as a list of strings
    #each element of the list is a page in the document
    
    doc[0]
    #prints the first page of the document
    

    感谢 GitHub 上的此评论: https://github.com/mstamy2/PyPDF2/issues/437#issuecomment-400491342

    【讨论】:

      【解决方案3】:

      补充 @Sarah 的 答案。 PDFMiner 是一个不错的选择。我已经使用它很长一段时间了,直到现在它在从 PDF 中提取文本内容方面效果很好。我所做的是创建一个使用CLI client from pdfminer 的函数,然后将输出保存到一个变量中(稍后我可以在其他地方使用)。我使用的 Python 版本是 3.6,该函数运行良好并且可以完成所需的工作,所以也许这对你有用:

      def pdf_to_text(filepath):
          print('Getting text content for {}...'.format(filepath))
          process = subprocess.Popen(['pdf2txt.py', filepath], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
          stdout, stderr = process.communicate()
      
          if process.returncode != 0 or stderr:
              raise OSError('Executing the command for {} caused an error:\nCode: {}\nOutput: {}\nError: {}'.format(filepath, process.returncode, stdout, stderr))
      
          return stdout.decode('utf-8')
      

      您当然必须导入子流程模块:import subprocess

      【讨论】:

        【解决方案4】:

        pdfminer.six (https://github.com/pdfminer/pdfminer.six) 也已在其他地方推荐,旨在支持 Python 3。但我不能亲自担保,因为它在安装 MacOS 期间失败。 (有一个未解决的问题,它似乎是最近的问题,所以可能会有一个快速修复。)

        【讨论】:

          【解决方案5】:

          您需要安装 PyPDF2 模块才能在 Python 3.4 中处理 PDF。 PyPDF2 不能提取图像、图表或其他媒体,但它可以提取文本并将其作为 Python 字符串返回。要安装它,请从命令行运行 pip install PyPDF2。此模块名称区分大小写,因此请确保输入小写的“y”,所有其他字符均输入大写。

          >>> import PyPDF2
          >>> pdfFileObj = open('my_file.pdf','rb')     #'rb' for read binary mode
          >>> pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
          >>> pdfReader.numPages
          56
          >>> pageObj = pdfReader.getPage(9)          #'9' is the page number
          >>> pageObj.extractText()
          

          最后一条语句返回“my_file.pdf”文档第 9 页中可用的所有文本。

          【讨论】:

          • 嗨,Ritesh,你很可能知道这个问题的答案。 Question.
          • 轻微修正 - 认为应该在第二行的 open 命令中引用 "rb" 而不仅仅是 rb。
          • 此外,pypdf2 中的页面是零索引的,即getPage(9) 将为您提供第 10 页。 pypdf2完全忽略了原始文档中的页码。
          • 注意:a)在 Py3 中不支持,b)如果它有一个不可解析的 unicode(例如 " )github.com/mstamy2/PyPDF2/issues/37 并且它是不可预测的,正如上面其他人所评论的那样,它会忽略整个单词。它是一个很好的工具,但遗憾的是不适用于生产代码:(
          • 2 年了,他们还没有修复这个错误github.com/mstamy2/PyPDF2/issues/254 我更愿意找到一个得到适当支持的包。这个不能处理python 3。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-08
          • 2021-04-05
          • 1970-01-01
          • 2012-08-24
          • 2019-06-26
          相关资源
          最近更新 更多