Как извлечь таблицы из исторического PDF?

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

Я пытался:

  • ABBYY Finereader для обнаружения таблиц.
  • Табула извлечение таблицы
  • Камелот извлечение столов
  • Пользовательский код Python

Проблема: рекламные инструменты очень плохо распознают края таблицы. Таблицы следуют схожему общему формату, но каждое сканирование выравнивается немного по-разному, поэтому жесткое кодирование границ также не будет работать.

Вопрос: Ребята, знаете ли вы хороший способ определить, где начинается таблица, а затем применить один из нескольких шаблонов?

Любые другие советы для такого рода работы с благодарностью.

3 ответа

Решение

ОБНОВЛЕНИЕ 2/26: Я решил свой собственный вопрос, хотя не стесняйтесь отвечать быстрыми или лучшими решениями.

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

Выравнивание типа таблицы

Решение:

  1. Используйте инструменты редактирования изображений в ABBYY, чтобы разрезать каждую страницу по горизонтали. Это дает одну таблицу на каждой странице.
  2. Обратите внимание, что существует 4 типа таблиц. Четные страницы и нечетные страницы имеют отдельные макеты. Первая таблица на каждой странице содержит поле для даты.
  3. Это дает четность первой таблицы, нечетность первой таблицы, четность регулярной таблицы, нечетную регулярную таблицу. Обработка по одному типу за раз с фиксированными областями таблицы и столбцами устраняет смещение из-за различий в разметке таблиц.

Выравнивание изображения

Изображения одного и того же типа таблицы все еще не выровнены, поэтому указание макета таблицы в координатах (x,y) не сработает. Расположение таблиц на разных изображениях различно.

Мне нужно было выровнять изображения в зависимости от местоположения стола, но без определения таблицы не было хорошего способа сделать это.

Я решил проблему интересным способом, но сначала я попробовал следующие шаги.

  1. Обнаружение вертикальных линий с помощью Opencv. Результат: плохо обнаружил слабые линии. Часто будет пропускать линии, что делает его бесполезным для выравнивания.
  2. Используйте Scan Tailor для обнаружения контента. Результат: алгоритм обнаружения может обрезать некоторые таблицы в одних файлах, а в других включать пробелы из-за пятен на изображении. Депеплинг не помог.
  3. Используйте Камелот с широкими областями таблицы, без значений столбцов. Результат: Это, вероятно, будет работать хорошо в других случаях, но Камелот упал здесь. Данные доводятся до центов, и между каждыми тремя цифрами есть пробелы. Это привело к неправильному расположению 00 в нескольких столбцах.

Решение:

После нарезки изображений на таблицы, описанные в разделе "Выравнивание типов таблиц", используйте функцию "Автоматическое выравнивание слоев" в Photoshop, чтобы выровнять изображения.

Пошаговое решение:

  1. Открыть фотошоп
  2. Загрузите изображения одного типа таблицы в один файл, используя: File-Scripts-Load Files to Stack
  3. Использование: Edit-Auto-выравнивание слоев
  4. Используйте инструмент кадрирования, чтобы каждый файл имел одинаковый размер.
  5. Экспортируйте каждое изображение как отдельный файл: File-Export-Layers в файлы
  6. Используйте редактор ABBYY OCR для каждого из 4 типов таблиц, жестко закодируйте столбцы и строки с помощью графического редактора.
  7. Экспорт в CSV из ABBYY
  8. Используйте что-то вроде clean.py для удаления пробелов и плохих символов.

Готово! Объедините файлы для каждой таблицы, как вам нравится. Я опубликую свой код Python для этого, когда я закончу с проектом. После очистки я опубликую данные тоже.

Здесь есть бесплатный онлайн-инструмент https://www.pdftron.com/pdf-tools/pdf-table-extraction/

Соответствующий блог https://www.pdftron.com/blog/parsing-extraction/table-extraction-and-pdf-to-xml-with-pdfgenie/ содержит ссылки на инструмент командной строки PDFGenie.

Вместо параметра Camelot table_areas (который определяет фиксированные границы) вы можете попытаться использовать параметр table_regions, чтобы указать регионы, в которых, вероятно, находятся таблицы (Camelot будет анализировать только указанные регионы для поиска таблиц).

https://camelot-py.readthedocs.io/en/master/user/advanced.html

Пожалуйста, держите нас в курсе.

Другие вопросы по тегам