Я искал свой вопрос и не получил ответа на два доступных вопроса
По сути, я хочу перебирать каждую страницу, потому что хочу выбрать только ту страницу, на которой есть определенный текст.
Я использовал pyPdf
. Он работает почти, я могу сказать, на 90% pdfs
, но иногда он не извлекает информацию со страницы.
Я использовал следующий код:
import pyPdf
extract = ""
pdf = pyPdf.PdfFileReader(open('filename.pdf', "rb"))
num_of_pages = pdf.getNumPages()
for p in range(num_of_pages):
ex = pdf.getPage(6)
ex = ex.extractText()
if re.search(r"to be held (at|on)",ex.lower()):
print 'yes'
print ex ,"\n"
extract = extract + ex + "\n"
continue
Приведенный выше код работает, но иногда некоторые страницы не извлекаются.
Я также пытался использовать pdfminer
, но я не мог найти, как перебирать в нем pdf страницу за страницей. pdfminer
возвращает весь текст PDF.
Я использовал следующий код:
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
В приведенном выше коде текст из pdf исходит из цикла for
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
text = retstr.getvalue()
В этом, как я могу повторять по одной странице за раз.
Документация по pdfminer
непонятна. Также существует множество версий одного и того же.
Итак, есть ли какие-либо другие пакеты, доступные для моего вопроса, или для него можно использовать pdfminer
?