【发布时间】:2017-10-16 21:46:03
【问题描述】:
我正在使用 python 3.5,我想从 pdf 文件中逐行读取文本。试图使用pdfminer3k,但在任何地方都没有得到正确的语法。
如何正确使用?
【问题讨论】:
标签: python-3.x python-3.5 pdf-scraping
我正在使用 python 3.5,我想从 pdf 文件中逐行读取文本。试图使用pdfminer3k,但在任何地方都没有得到正确的语法。
如何正确使用?
【问题讨论】:
标签: python-3.x python-3.5 pdf-scraping
我已经更正了 Lisa 的代码。现在可以了!
fp = open(path, 'rb')
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox, LTTextLine
parser = PDFParser(fp)
doc = PDFDocument()
parser.set_document(doc)
doc.set_parser(parser)
doc.initialize('')
rsrcmgr = PDFResourceManager()
laparams = LAParams()
laparams.char_margin = 1.0
laparams.word_margin = 1.0
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
extracted_text = ''
for page in doc.get_pages():
interpreter.process_page(page)
layout = device.get_result()
for lt_obj in layout:
if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine):
extracted_text += lt_obj.get_text()
【讨论】:
extracted_text += string 改为extracted_text += lt_obj.get_text()。
doc.set_parser 和 doc.initialize 行以使其正常工作。
我使用的是 python 3.4,但我猜它与 python 3.5 的工作方式相同。 这是我使用的:
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox, LTTextLine
parser = PDFParser(file_content)
doc = PDFDocument()
parser.set_document(doc)
doc.set_parser(parser)
doc.initialize('')
rsrcmgr = PDFResourceManager()
laparams = LAParams()
#I changed the following 2 parameters to get rid of white spaces inside words:
laparams.char_margin = 1.0
laparams.word_margin = 1.0
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
extracted_text = ''
# Process each page contained in the document.
for page in doc.get_pages():
interpreter.process_page(page)
layout = device.get_result()
for lt_obj in layout:
if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine):
extracted_text += string
with open('convertedFile.txt',"wb") as txt_file:
txt_file.write(extracted_text.encode("utf-8"))
【讨论】: