извлечение текста из pdf с помощью pdfminer дает несколько копий

Я пытаюсь извлечь текст из PDF-файла с помощью PDFMiner (код, найденный при извлечении текста из файла PDF с помощью PDFMiner в python? ). Я не изменил код, кроме path / to / pdf. Удивительно, что код возвращает несколько копий одного и того же документа. Я получил тот же результат с другими файлами PDF. Нужно ли мне передавать другие аргументы или я что-то упускаю? Любая помощь высоко ценится. На всякий случай, я предоставляю код:

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage from cStringIO import StringIO 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() fstr = '' for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True): interpreter.process_page(page) str = retstr.getvalue() fstr += str fp.close() device.close() retstr.close() return fstr print convert_pdf_to_txt("test.pdf") 

One Solution collect form web for “извлечение текста из pdf с помощью pdfminer дает несколько копий”

Мой ответ был немного неправильным в потоке, на который вы ссылаетесь. Я нашел ошибку и забыл обновить свой ответ.

Поскольку документация довольно разрежена с помощью pdfminer, я не могу полностью объяснить, почему это работает так, как это делается. Надеюсь, кто-то, кто знает библиотеку pdfminer немного лучше, может дать нам некоторое представление.

Все, что я знаю, это то, что вам нужно сделать text = retstr.getvalue() вне цикла for. Я могу только предположить, что retstr обновляется так, как если бы мы делали final_text += text внутри цикла for, поэтому, как только все закончится, нам просто нужно сделать text = retstr.getvalue() чтобы получить текст со всех страниц.

 from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage from cStringIO import StringIO 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 print convert_pdf_to_txt("test.pdf") 

Надеюсь, это помогло!

  • Почему символ ID 160 не распознается как Unicode в PDFMiner?
  • python получает unicode от символа devnagari
  • pdfminer3k не имеет метода с именем create_pages в PDFPage
  • Python - лучший язык программирования в мире.