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

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

Я пытался:

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

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

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

Мы будем благодарны за любые другие советы для такого рода работы.


person FBB    schedule 23.02.2019    source источник


Ответы (3)


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

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

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

Решение:

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

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

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

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

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

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

Решение:

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

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

  1. Откройте Photoshop
  2. Загрузите изображения одного типа таблиц в один файл, используя: Файл-Скрипты-Загрузить файлы в стек.
  3. Использование: Правка-Автоматическое выравнивание слоев.
  4. Используйте инструмент кадрирования, чтобы сделать все файлы одинакового размера.
  5. Экспортируйте каждое изображение как отдельный файл: Файл-Экспорт-Слои в файлы
  6. Используйте редактор ABBYY OCR для каждого из 4 типов таблиц, жестко запрограммируйте столбцы и строки с помощью редактора графического интерфейса.
  7. Экспорт в CSV из ABBYY
  8. Используйте что-нибудь вроде clean.py, чтобы удалить пробелы и плохие символы.

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

person FBB    schedule 26.02.2019

Здесь есть бесплатный онлайн-инструмент 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

person Ika    schedule 25.02.2019

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

https://camelot-py.readthedocs.io/en/master/user/advanced.html#specify-table-regions

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

person Stefano Fiorucci - anakin87    schedule 26.02.2019