【问题标题】:I want to extract text from a PDF to a .text file using PDFminer. I have found the code but I have no idea how to use it [closed]我想使用 PDFminer 将文本从 PDF 提取到 .text 文件。我找到了代码,但我不知道如何使用它[关闭]
【发布时间】:2016-05-21 21:32:31
【问题描述】:

这是我在这里某处找到的代码。我不知道如何使用它。有人可以帮我完成这个并帮助我转换样本 pdf 吗?

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO

def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = file(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos=set()

    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,   password=password,caching=caching, check_extractable=True):
        interpreter.process_page(page)

    text = retstr.getvalue()

    fp.close()
    device.close()
    retstr.close()
    return text

【问题讨论】:

  • 你试过运行它吗?
  • 是的,我有。它什么都不做。
  • 快速附加评论 - 我正在使用 PDFminer 的 Python 3 分支 - pdfminer.six - 为了使用此代码,我发现我必须在 convert() 中将 open() 替换为 file()功能。
  • 你应该在那里问问题。

标签: python python-2.7 pdfminer


【解决方案1】:

如果您使用 pdfminer 并使用他们页面中的代码并阅读他们的文档https://www.binpress.com/tutorial/manipulating-pdfs-with-python/167

from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage

def convert(fname, pages=None):
    if not pages:
        pagenums = set()
    else:
        pagenums = set(pages)

    output = StringIO()
    manager = PDFResourceManager()
    converter = TextConverter(manager, output, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)

    infile = file(fname, 'rb')
    for page in PDFPage.get_pages(infile, pagenums):
        interpreter.process_page(page)
    infile.close()
    converter.close()
    text = output.getvalue()
    output.close
    return text

我认为您在使用时应该没有任何问题:

def convert(fname, pages=None): 基本上是为你转换 pdf

如下使用:

some_variable = convert("filename.pdf") 
print(some_variable)
#do something with your variable

使用您的示例 pdf:

【讨论】:

  • 那行得通……有点。这是输出:This is pdf 原始 PDF 说“这是 pdf”,但 python 显示“这是 pdf”
  • pdf是公开的吗,如题,可以分享吗?
  • drive.google.com/file/d/0B5eGq9boXZxARWJLX0pDb1RaX2s/… 它在我的谷歌驱动器上。我想既然我已经分享了,你可以下载它。
  • 我没有重现您的错误,查看最近在我的答案中添加的屏幕截图我事件导出到 txt 文件,一切看起来都很糟糕
  • 现在好了。它之前只是因为一些奇怪的原因而被窃听。谢谢!
【解决方案2】:

我终于找到了解决办法。最好的库是 PDfminer,在 pdf2txt.py 中几乎没有修改即可有效使用。 pdf2text.py 位于 pdfminer/tools

在终端上安装 PDfminer 使用

pip install PDfminer

from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import re

def convert(fname):
    pages=None
    if not pages:
        pagenums = set()
    else:
        pagenums = set(pages)

    output = StringIO()
    manager = PDFResourceManager()
    converter = TextConverter(manager, output, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)

    infile = file(fname, 'rb')
    for page in PDFPage.get_pages(infile, pagenums):
        interpreter.process_page(page)
    infile.close()
    converter.close()
    text = output.getvalue()
    output.close
    print text 

    # write Content to .txt
    text_file = open("Output_1.txt", "w")
    text = re.sub("\s\s+", " ", text)
    text_file.write("%s" % text)
    text_file.close()

convert("xyz.pdf")

【讨论】:

  • 对不起,但这并没有告诉我们任何事情,而且它不是 SO 上其他用户的可重用资源,我投票关闭它。您能否返回并编辑问题以说明样板代码的实际问题是什么,以及您是如何解决的?也请在您的回答中明确说明。我们不会在那个代码和这个代码之间做一个差异。
猜你喜欢
  • 2014-01-21
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2021-09-27
  • 2021-08-20
  • 2014-12-17
  • 1970-01-01
相关资源
最近更新 更多