Время прочтения: 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-файлами, а не с отсканированными документами.