Python - 阅读PDF

时间:2017-11-07 08:39:16

标签: python python-3.x pdf text-extraction

我有一些pdf文件,我想从中提取文本,我几乎使用了与之相关的所有库,如pyPDF2,pdfminer。甚至继续使用tesseract和imagemagick。 Imagemagick以转换的jpg格式使大多数pdf页面变黑,然后tesseract无法读取。

问题是,在提取文本/段落时,图书馆并没有提取整个文本/段落。例如,在某些pdf文件中,正在提取整个文本,而在其他pdf文件中,只提取整个段落中的几行。

我想知道,如果有任何其他方式通过python提取文本? 然而,当我将pdf从在线源转换为jpg时,我能够提取所有文本,然后在转换的jpg文件上使用tesseract。但是,这种方法并不可行。

2 个答案:

答案 0 :(得分:0)

确保展平图像,将背景指定为白色,以及使用命令行文档中指定的其他协议。有很多选择可供选择。我已经找到了很好的结果,但在你的情况下可能会有所不同。

您将要检查输出,直到它看起来足够令人满意,以便OCR读取。

magick -colorspace gray filename.ppm  
-density 300 -depth 8 -flatten -auto-orient -auto-level -rotate -90> output.tif

如需更多帮助,请查看here

答案 1 :(得分:0)

尝试pdfreader从PDF文档中提取文本(纯文本并包含PDF运算符)和图像(内联和XObject)

这是从所有文档页面提取以上所有内容的示例代码。

from pdfreader import SimplePDFViewer, PageDoesNotExist

fd = open(you_pdf_file_name, "rb")
viewer = SimplePDFViewer(fd)

plain_text = ""
pdf_markdown = ""
images = []
try:
    while True:
        viewer.render()
        pdf_markdown += viewer.canvas.text_content
        plain_text += "".join(viewer.canvas.strings)
        images.extend(viewer.canvas.inline_images)
        images.extend(viewer.canvas.images.values())
        viewer.next()
except PageDoesNotExist:
    pass

您可以将图像转换为PIL/Pillow对象并保存(或执行所需的任何操作)

for i, img in enumerate(images):
    img.to_Pillow().save("{}.png".format(i))