@NikitaPythonGO

Как парсить таблицы в pdf файле Python'ом?

Написал программу, которая берет текст из пдф и записывает в файл. Но по итогу часть текста идет не так вообще как надо. Кто знает как именно можно парсить именно по ячейкам, от одной к другой. Или может есть свои варианты, как это сделать
Код моей программы:
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO

def getPDFText(pdfFilenamePath):
    retstr = StringIO()
    parser = PDFParser(open(pdfFilenamePath, 'rb'))
    try:
        document = PDFDocument(parser)
    except Exception as e:
        print(pdfFilenamePath, '')
        return ''
    if document.is_extractable:
        rsrcmgr = PDFResourceManager()
        device = TextConverter(rsrcmgr,retstr, codec='ascii' , laparams = LAParams())
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        for page in PDFPage.create_pages(document):
            interpreter.process_page(page)
        return retstr.getvalue()
    else:
        print(pdfFilenamePath,"")
        return ''

if __name__ == '__main__':
    words = getPDFText('09.03_0.pdf')
    print(words)
    file = open('new.txt', 'w')
    file.write(words)
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 2
Moskus
@Moskus
PDF, в общем случае, совершенно не предназначен для хранения структурированных данных. Таблица в нем может (при определенных настройках экспорта из некоторых программ, способных создавать PDF) быть сохранена так, что ее можно прочесть, как структурированные данные (при этом сохраняется порядок строк а ячейки разделяются tab-ами, например). Но в общем случае, текст в PDF теряет структуру и хранится просто как векторное изображение, состоящее из текстовых символов.

Соответственно, для общего случая, PDF следует анализировать, как графическое изображение, сегментируя его на строки, блоки и т.п. Практически, это то, что делают OCR-средства, за вычетом необходимости распознавать отдельные символы.
Ответ написан
@Hedgehogues
Ёж
Я тоже столкнулся с такой проблемой. При этом опенсорсных средств, позволяющих решать такую задачу, я не нашёл. Поэтому пришлось написать свой парсер HoChiMinh.

Сейчас я его не поддерживаю. Но он находится в рабочем состоянии и довольно неплохо выделяет каркас регулярных таблиц, которые ориентированы по сторонам страницы pdf. При этом, он также зависит от OCR, которая осуществляет извлечение текста из ячейки. По дефолту -- это Tesseract. Но для качественной работы лучше использовать другую тулзу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы