Время прочтения: 2 мин.

Друзья, на сайте Newtechaudit.ru уже были представлены примеры обработки PDF-файлов с помощью Python-библиотек. Я же предлагаю сфокусироваться на более узкой задаче, которую мне пришлось решать — извлечение таблиц с данными из PDF-файлов.

Я выполнил эту процедуру это в Python с помощью библиотеки Camelot.

Camelot дает возможность настроить извлечение таблиц в том случае, если невозможно получить желаемый результат с настройками библиотеки по умолчанию. Каждая извлекаемая таблица представляет собой pandas DataFrame, который легко интегрируется в ETL и рабочие процессы анализа данных. Использование Camelot позволяет экспортировать извлекаемую таблицу в форматы csv, JSON, Excel и HTML.

Хочу поделиться, как я это осуществил. Имеется pdf-файл (Table.pdf ) следующего содержания:

Таблица экономии топлива на маршруте следования спецтранспорта при различных показателях движения.

Результаты подтверждены проверкой.

Извлекаю из этого файла таблицу и сохраню ее в csv формате.

  • Сначала нужно провести некоторые подготовительные действия, а именно: для работы библиотеки Camelot следует установить необходимые зависимости (tkinter и ghostscript ).
  • Очень важно, друзья, проверить правильность установки этих зависимостей:

Для tkinter следует запустить  Python  и выполнить:

import tkinter

В случае некорректной установки tkinter будет выведено сообщение об ошибке.

Для ghostscript, установленной в среде Windows, выполнить действие, набрав в командной строке:

C:\> gswin64c.exe -version

Или:

C:\> gswin32c.exe -version

для 32-битной версии ОС.

В случае правильной установки будет выведена информация о версии ghostscript и об авторских правах.

  • Далее устанавливаю библиотеку с помощью командной строки ОС:
pip install camelot-py[cv]
  • Теперь после установки всех требований, можно извлекать таблицы. Открываю новый файл Python и выполняю следующее:
import camelot
# PDF-файл с извлекаемой таблицей
file = 'Table.pdf'

Функция read_pdf () извлекает все таблицы в PDF-файле.

# извлечение всех таблиц в PDF-файле
tables = camelot.read_pdf(file)

По умолчанию Camelot использует только первую страницу PDF-файла для извлечения таблиц.

Чтобы указать несколько страниц, можно использовать ключевое слово pages с аргументом:

tables = camelot.read_pdf(file, pages='1,2,3')

Проверяю количество извлеченных таблиц:

print('Количество извлеченных таблиц:', tables.n)

Вывод результата:

Количество извлеченных таблиц: 1

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

# экспорт всех таблиц в  zip-архив
tables.export('export.csv', f='csv', compress=True)

Для параметра compress задано значение True, это создаст zip-архив, содержащий все таблицы в формате csv.

Стоит уточнить, что Camelot работает именно с текстовыми PDF-файлами, а не с отсканированными документами.