【发布时间】:2018-09-30 07:46:19
【问题描述】:
我在 Python 3.5 中使用 PDFMiner6。它比 PyPDF2 好得多(速度较慢,但更准确,不会吐出一堆没有空格分隔的字母)。我试图解析这个文件:
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2963791/ (您可以从 NIH 网站免费下载 PDF)。
我使用了这段代码(它是更大蜘蛛的一部分,但其余代码与这个问题无关):
import io
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
class PDFMiner6(object):
def __init__(self):
pass
def PdfFileReader(self, fp):
text = []
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
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)
output = retstr.getvalue()
text.append(output)
fp.close()
device.close()
retstr.close()
return text
它完美地解析第一页,然后停止。文档的其余部分没有被解析。
我使用 PyPDF2 测试了同一个文档,它解析了整个文档,但输出的垃圾没有任何空格(因此我切换到 PDFMiner6)。所以我确定不是整个文档都没有被读取,而是解析它的代码有问题。怎么了?
编辑:我继续在不同的 PDF 文件上对其进行了测试,结果各不相同 - 它完全解析了一些文件,而另一些文件则停在第一页。这令人沮丧,因为与 PyPDF2 相比,PDFMiner6 是一个更好的解析器。
有人可以帮忙吗?
【问题讨论】:
-
您的代码使用 Python 3.7 运行良好。我通过在结果中搜索字符串“Page 10”来验证结果
-
您是否更改了任何设置?我一直只得到 PDF 的第一页,程序停止并且不解析文档的其余部分。我正在将 Python 3.5.5 与 Anaconda 一起使用...
-
我没有改变任何东西。我只是实例化该类并调用方法
PDFMiner6().PdfFileReader(fpin)然后循环遍历结果以将其写入文本文件。这是结果 txt 文件file.io/C23LXV。我使用pip安装了pdfminer.six==20170720 -
不,我想你只有第一页——就像我一样。我链接的 PDF 只有 8 页,而不是 10 页。所以,我不确定您是如何获得“第 10 页”