Извлечь / определить таблицы из PDF Python
Существуют ли библиотеки с открытым исходным кодом, которые поддерживают идентификацию и извлечение таблиц?
Под этим я подразумеваю:
- Определить структуру таблицы существует
- Классифицировать таблицу по ее содержимому
- Извлечение данных из таблицы в полезном формате вывода, например, JSON / CSV и т. Д.
Я просмотрел похожие вопросы по этой теме и обнаружил следующее:
- PDFMiner, который решает проблему 3, но кажется, что пользователь должен указать PDFMiner, где существует структура таблицы для каждой таблицы (поправьте меня, если я ошибаюсь)
- pdf-table-extract, который пытается решить проблему 1, но согласно списку дел, в настоящее время не может идентифицировать таблицы, разделенные пробелами. Это проблема, так как все таблицы в моих PDF-файлах разделены пробелами!
В настоящее время я думаю, что мне пришлось бы потратить много времени на разработку решения для машинного обучения для идентификации структур таблиц из PDF-файлов. Поэтому любые альтернативные подходы будут более чем приветствоваться!
3 ответа
Вы должны обязательно взглянуть на мой ответ:
а также взглянуть на все ссылки, включенные в него.
Tabula / TabulaPDF в настоящее время является лучшим инструментом для извлечения таблиц, который доступен для очистки PDF.
После многих плодотворных часов изучения библиотек OCR, ограничивающих рамок и алгоритмов кластеризации - я нашел решение настолько простым, что оно заставляет вас плакать!
Я надеюсь, что вы используете Linux;
pdftotext -layout NAME_OF_PDF.pdf
УДИВИТЕЛЬНО!!
Теперь у вас есть хороший текстовый файл со всей информацией, выстроенной в красивые столбцы, теперь его легко отформатировать в CSV и т. Д.
Именно в такие времена я люблю Linux, эти ребята придумали УДИВИТЕЛЬНЫЕ решения для всего и поместили его БЕСПЛАТНО!
Я просто хотел бы добавить к очень полезному ответу от Курта Пфайфла - теперь есть обертка Python для Tabula, и это пока работает очень хорошо: https://github.com/chezou/tabula-py
Это преобразует вашу таблицу PDF в фрейм данных Pandas. Вы также можете установить координаты в координатах x,y, что, очевидно, очень удобно для нестандартных данных.