我在Python3.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)。因此,我确信不是没有读取整个文档,而是解析它的代码有问题。怎么啦?
编辑:我继续在不同的文件上测试它,结果各不相同--它完全解析了一些,而另一些则在第一页停止。这是令人沮丧的,因为PDFMiner6是一个比PyPDF2更好的解析器。
有人能帮忙吗?
发布于 2018-12-19 20:13:28
确保pdf是由pdf浏览器而不是网页浏览器打开的。我也有同样的问题,我就是这样解决的。
它看起来像pdfminer将查看一个pdf,正在打开的网页浏览器作为一个页面。因此,您需要确保它是由一个pdf查看器打开,以便pdfminer认识到在pdf上有超过1页。
https://stackoverflow.com/questions/52575784
复制相似问题