Я искал мой вопрос и не получил свой ответ в двух доступных вопросовСтраница PDF постранично
В основном я хочу итерацию над каждой страницей, потому что я хочу выбрать только ту страницу, которая имеет определенный текст.
Я использовал 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
?
Ничего плохого в ответе на свой вопрос. В конце концов, это может быть полезно для других. –
Если вы ответили на свой вопрос, отметьте его как принятый ответ. –