Как извлечь таблицы из PDF-файла с помощью PDFMiner?Python

Программы на Python
Anonymous
Как извлечь таблицы из PDF-файла с помощью PDFMiner?

Сообщение Anonymous »

Я пытаюсь извлечь информацию из некоторых таблиц в документе PDF.
Рассмотрим ввод:

Код: Выделить всё

Title 1
some text some text some text some text some text
some text some text some text some text some text

Table Title
| Col1          | Col2    | Col3    |
|---------------|---------|---------|
| val11         | val12   | val13   |
| val21         | val22   | val23   |
| val31         | val32   | val33   |

Title 2
some more text some more text some more text some more text
some more text
some more text some more text some more text some more text
Я могу получить контуры/заголовки как таковые:

Код: Выделить всё

path='myFile.pdf'
# Open a PDF file.
fp = open(path, 'rb')
# Create a PDF parser object associated with the file object.
parser = PDFParser(fp)
# Create a PDF document object that stores the document structure.
# Supply the password for initialization.
document = PDFDocument(parser, '')
outlines = document.get_outlines()
for (level,title,dest,a,se) in outlines:
print (level, title)
Это дает мне:

Код: Выделить всё

(1, u'Title 1')
(2, u'Table Title')
(1, u'Title 2')
И это идеально, поскольку уровни выровнены по текстовой иерархии. Теперь я могу извлечь текст следующим образом:

Код: Выделить всё

if not document.is_extractable:
raise PDFTextExtractionNotAllowed
# Create a PDF resource manager object that stores shared resources.
rsrcmgr = PDFResourceManager()
# Create a PDF device object.
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# Create a PDF interpreter object.
interpreter = PDFPageInterpreter(rsrcmgr, device)
# Process each page contained in the document.
text_from_pdf = open('textFromPdf.txt','w')
for page in PDFPage.create_pages(document):
interpreter.process_page(page)
layout = device.get_result()
for element in layout:
if isinstance(element, LTTextBox):
text_from_pdf.write(''.join([i if ord(i) < 128 else ' '
for i in element.get_text()]))
Что дает мне:

Код: Выделить всё

Title 1
some text some text some text some text some text some text some text
some text some text some text some text some text some text some text
Table Title
Col1
val11
val12
val13
Col2
val21
val22
val23
Col3
val31
val32
val33
Title 2
some more text some more text some more text some more text
some more text
some more text some more text some more text some more text
Что немного странно, поскольку таблица извлекается по столбцам. Можно ли получить таблицу построчно? Более того, как я могу определить, где начинается и заканчивается таблица?


Подробнее здесь: https://stackoverflow.com/questions/462 ... h-pdfminer

Вернуться в «Python»