Метод Tabula-py read_pdf_with_template()

#python #tabula #tabula-py

Вопрос:

Я пытаюсь прочитать определенную часть документа в виде таблицы. Он структурирован в виде таблицы, но между ячейками, строками или столбцами нет разделительных линий.

Мне удалось успешно использовать read_pdf() метод с аргументами area и. column Я мог бы точно указать, где начинается и заканчивается таблица и где разделяются столбцы.

Но в моем pdf-файле есть несколько таблиц разных размеров на каждой странице без четких маркеров для их идентификации, и я должен использовать эти аргументы.

Я узнал о read_pdf_with_template() методе в вопросах репозитория Github здесь, и немного больше об этом в документации, запросе на извлечение и примере записной книжки.

Но нигде не упоминается, как структурировать teamplate.json и какие аргументы я мог бы использовать или что они означают.

Я попытался вставить area координаты в x1, y1, x2, y2 , передав список столбцов в аргументе метода и height аргументы width с размером таблицы.

Но он выбирает верхнюю центральную часть pdf-файла, которая не соответствует ни одной из координат, которые я вставил, когда я все рассчитал в обратном порядке.

Вот страница, которую я пытаюсь прочитать (я удалил некоторые конфиденциальные данные) введите описание изображения здесь

а вот фрагменты кода

 import tabula

tables = tabula.read_pdf_with_template(input_path = "test.pdf", template_path = "template.json", columns=[195, 310, 380])

print(tables[0])
 
 [
    {
        "page": 1,
        "extraction_method": "stream",
        "x1": 225,
        "x2": 35,
        "y1": 375,
        "y2": 565,
        "width": 525,
        "height": 400
    }
]
 

Ответ №1:

Я просто вела себя как дурочка.

Шаблоны-это не то, что вы создаете вручную. Они должны быть сгенерированы приложением tabula, как упомянуто здесь.

Просто скачайте tabula с официального сайта. Как только вы запустите приложение, это будет довольно просто. Вручную щелкните и перетащите каждую таблицу на каждой странице и нажмите кнопку загрузить шаблон сверху.