Какую библиотеку/sdk выбрать для распознавания таблиц?
Есть около 60 млн. документов в формате pdf, в которых есть таблицы разных форматов. В основном, сканы. Разный формат это может не быть внешних границ или ячейки объединены и присутствует цветовое оформление. Попробовали tabula + opencv с предобученной моделью, найденной в интернете, но очень медленно дело идёт. Есть ли инструменты лучше и быстрее или нужно смотреть на платные?
calculator212, питон в 30 потоках на хорошем проце, оперативка и диск не умирают. За 20 дней спарсилось только 400к документов, в которых в среднем по 2-3 таблицы
Camelot python https://camelot-py.readthedocs.io/en/master/
Есть два режима работы,
Lattice и Stream
Lattice - графически определяет границы таблицы (если они есть), работает медленно.
Stream - можно задать область таблицы и разбиение на столбцы по координатам
внутри документа, работает быстрее.
Также есть графический отладчик,
то есть можно посмотреть что происходит, структуру документа, и т.п.
pdf-ы должны быть однотипными, возни много.
так же когда я 2 года назад занимался этим,
натыкался на несколько толковых онлайн сервисов,
платных естественно,
сечас вспомнить не смогу, но они легко гуглятся
Сканы - это плохо,
тут только google vision api
или уже упомянутый здесь ABBYY
Так же для сканов есть пайтон либа
PyPDFOCR https://pypi.org/project/pypdfocr/
которая преобразует пдф в Searchable Pdf, то есть добавляет текстовый слой
работает на основе Tesseract-OCR,
результат не очень,
зависит от качества скана и настроек, версии Tesseract-а
Viktor T2, Большое спасибо за подробный ответ! Камелот пробовал, но похоже, нераспробовал, т.к. показался неюзабельным в этом случае, т.к. форматы и размеры таблиц в каждом документе разные. Насчёт PyPDFOCR что-то очень знакомое, спасибо больше, гляну.
ekopiy, На разных документах Camelot и Tabula могут очень по-разному работать. Вплоть до того, что на каких-то одна библиотека отлично справляется, а другая даёт отстой и наоборот.
ekopiy, а что именно тратит больше всего времени? Просто по ощущениям из 4 секунд, нейронка занимает 90%-95% времени, если это так, то можно попробовать использовать GPU(если это конечно не сделано), если затык в питоновских функциях не связанных с opencv, то можно попробовать переписать на c++, часть логики(но это вряд ли в вашем случае сильно ускорит), если затык с алгоритмами opencv, то можно попробовать найти более быстрый аналог.