Вложенность на любую глубину — проверка на рабочей ссылке

Разбивку внутри ячейки ищет одно и то же правило, и оно повторяется: нашли линейки внутри ячейки — режем ячейку по ним и в каждом куске ищем заново, пока линейки находятся. Два, три, четыре уровня разбираются одинаково, отдельного кода на «ещё один уровень» нет. Ниже — что видно на рабочей ссылке своими глазами и чем ограничен спуск, чтобы он не ушёл по кругу.

Что видно на экране «Проверить и исправить»

Открыт рабочий адрес приложения, взят «Пример 2» (перекошенный документ с разбивкой внутри ячеек), включена вкладка «После выравнивания». Проверено в браузере, обе страницы:

СтраницаЛиний внешней таблицыЛиний внутри ячеек Ячеек с разбивкойКаждая внутренняя линия лежит в своей ячейке Подпись под переключателем
13433 3 из 3 «Внутри ячеек нашлась своя разбивка: ячеек 3, линий в них 3»
21721 2 из 2 «Внутри ячеек нашлась своя разбивка: ячеек 1, линий в них 2»

Ни одна внутренняя линия не вышла за края скана. Под переключателем видна подпись «внешняя таблица / разбивка внутри ячейки». Щелчок по рамке на скане по-прежнему подсвечивает значение справа. Ошибок на странице нет.

Рабочая ссылка, «Пример 2», вкладка «После выравнивания»: тонкие линии внутри ячеек — это разбивка, найденная внутри уже найденной ячейки.
Экран проверки: сетка таблицы и разбивка внутри ячеек

Сколько уровней на ваших документах

На пяти ваших сканах внутри ячеек нарисован один уровень разбивки — глубже на бланках линий просто нет, и придумывать их нечем. Поэтому на живой ссылке видно ровно один уровень: это честная картина документа, а не потолок разбора.

Что разбор идёт глубже, проверено на настоящей странице «Примера 2»: в одну её ячейку (203 на 42 точки) дорисованы три линейки одна внутри другой — вертикальная делит ячейку пополам, горизонтальная делит левую половину, ещё одна вертикальная делит левую верхнюю четверть. Разбор нашёл все три уровня, каждый — внутри области предыдущего:

УровеньОбласть, в которой искалиЧто нашли
1вся ячейка: 261, 427 — 464, 469вертикальная линия на 362
2левая половина: 261, 427 — 362, 469горизонтальная линия на 448
3левая верхняя четверть: 261, 427 — 362, 448вертикальная линия на 311

Такой лист данными заказчика не является и в набор примеров не кладётся — он нужен только для проверки. Загрузить его на живой сервис через «Загрузить файл» и увидеть уровни на экране не получилось: уменьшенная копия страницы разбирается как другая таблица, и нужной ячейки в ней уже нет. Поэтому три уровня показаны замером разбора, а не снимком экрана.

Та самая ячейка «Примера 2» с дорисованными тремя линейками, крупно.
Ячейка с тремя уровнями разбивки

Чем ограничен спуск

Автоматическая проверка держит это на семи случаях: один уровень, три уровня, четыре уровня, частая сетка 10 на 10 (спуск кончается, область дважды не разбирается), упор в предел глубины, повтор той же области, и пересчёт координат наружу. Все семь проходят.

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

← ко всем материалам