@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)
  • Вопрос задан
  • 8571 просмотр
Пригласить эксперта
Ответы на вопрос 4
Moskus
@Moskus
PDF, в общем случае, совершенно не предназначен для хранения структурированных данных. Таблица в нем может (при определенных настройках экспорта из некоторых программ, способных создавать PDF) быть сохранена так, что ее можно прочесть, как структурированные данные (при этом сохраняется порядок строк а ячейки разделяются tab-ами, например). Но в общем случае, текст в PDF теряет структуру и хранится просто как векторное изображение, состоящее из текстовых символов.

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

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

Ещё есть джавовская либа tabula и python-обёртка к ней — tabula-py. Но если на листе несколько таблиц, она сливает их все в один датафрейм, что не всегда удобно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 10:00
10000 руб./за проект
29 мар. 2024, в 09:59
750 руб./в час
29 мар. 2024, в 09:55
50000 руб./за проект