我正在将PDFMiner6与Python 3.5配合使用。它比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是更好的解析器。
有人可以帮忙吗?
答案 0 :(得分:0)
确保由pdf查看器而不是网络浏览器打开pdf。我遇到了同样的问题,这就是我解决的方法。
看起来pdfminer可以将Web浏览器正在打开的pdf视为一页。因此,您需要确保它是由pdf查看器打开的,以便pdfminer识别pdf上有超过一页。