Как сейчас режется текст по клеткам и на чём ломается

Все пять примеров прогнаны через работающее распознавание как есть, 25 августа 2026 года. Ничего не меняли — это замер текущего состояния.

112
блоков всего в пяти документах (8 страниц)
43
блока склеивают соседние столбцы
5 из 5
документов со склейками

Сколько склеек в каждом документе

ДокументСтр.БлоковСклеек Левая и правая половины бланкаПодписи столбцов таблицыКлетки таблицы
Пример 123314392
Пример 2 (снят под углом)24313580
Пример 3193201
Пример 4183111
Пример 521910541
Итого81124316225

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

Три типа склеек

1. Левая и правая половины бланка в одном блоке — 16 блоков

В шапке документа слева стоит продавец, справа покупатель, между ними линейка. Обе половины попадают в один блок и даже в одну строку. Пример 3, дословно из выдачи:

Продавец: 000 `ХоподОК: (2) Покупатель ИП Андреев Алексой Владимирович (6)

«(2)» и «(6)» — номера разных клеток бланка. Такие же блоки на всю ширину листа есть в Примерах 1, 4 и 5.

Рамка одного блока на всю ширину шапки документа
Пример 3. Синим — рамка одного блока: в него попали и продавец, и покупатель. Красным — граница клетки бланка, оказавшаяся внутри рамки.

2. Подписи столбцов товарной таблицы в одном блоке — 22 блока

Шапка товарной таблицы многострочная. Её строки не попадают в сетку таблицы и уходят в свободный текст, где подписи соседних столбцов сливаются в одну строку. Пример 5, один блок пересекает десять границ столбцов:

№ Наименование товара Код вида Единица Количество Цена Стоимость Налого- | Сумма налога, Стоимость
Один блок поверх подписей десяти столбцов
Пример 5. Синяя рамка — один блок. Красные линии внутри неё — границы столбцов, которые он перечеркнул.

3. Внутри клетки таблицы проходит линейка — 5 клеток

Клетка получилась шире настоящей и вобрала соседнюю.

| Грузополучатель и его адрес: ООО «ИНТЕР СТРОЙ», 199406, Санкт-Петербург, Беринга yn, дом № !
25% | 4066.57 ЕЯ 400,00 Е. |

Первая строка — Пример 1: подпись поля и значение в одной клетке. Вторая — Пример 2: налоговая ставка, сумма налога и стоимость с налогом в одной клетке.

Сколько столбцов товарной таблицы вообще доходит до результата

Товарная таблица занимает почти всю ширину листа — шестнадцать столбцов и больше. Сколько нашлось на самом деле:

ДокументШирина найденной таблицыСтолбцовКлетокИз них пустых
Пример 189 % листа1924780
Пример 2, стр. 173 % листа147018
Пример 2, стр. 278 % листа114413
Пример 355 % листа3364
Пример 489 % листа166416
Пример 596 % листа1628827

Хуже всех Пример 3: таблица нашлась только в левой половине листа — три столбца из шестнадцати. Всё, что правее (количество, цена, суммы, страна происхождения), в таблицу не попало и лежит одним текстовым блоком на месте этих столбцов.

Документ с перекосом — Пример 2

Пример 2 снят фотоаппаратом под углом. Что происходит по шагам.

На исходном снимке. На первой странице нашлось 27 вертикальных линеек. Крайняя левая завалена на +6,93°, крайняя правая — на −5,78°: линейки расходятся веером, разброс между краями листа почти 13°.

Подготовка снимка отрабатывает. Сервис пишет: «вертикали расходились веером на 12,9° — разведены в параллельные» и «выпрямлен прогиб страницы около 31 px». После правки на той же странице 18 линеек, крайняя левая 0,81°, крайняя правая 0,15° — лист выпрямлен, это видно и глазами.

Но выпрямление не бесплатное. Три следствия, все проверены по выдаче:

  1. Рамки на исходном снимке становятся приблизительными. Разворот веера и выпрямление прогиба — не поворот листа, обратно координаты точно не пересчитываются. Сервис сам помечает первую страницу Примера 2 как неточную — у всех остальных страниц всех документов такой пометки нет. На экране проверки при показе исходника рамка встанет рядом с нужным местом, а не по нему.
  2. Правый край таблицы срезан. Товарная таблица занимает 73 % ширины листа вместо ~96 %: столбцы «страна происхождения» и «номер декларации» остались снаружи.
  3. Линейка таблицы после выпрямления проходит сквозь строку товара. Первая строка товаров перечёркнута, и цифры в ней разваливаются.
Найденная товарная таблица Примера 2 со срезанным правым краем
Пример 2. Синим — граница таблицы, какой её нашло распознавание: правые столбцы остались снаружи. Хорошо видно и линейку, перечеркнувшую первую строку товаров.
Первая строка товара: должно бытьВышло
цена 9 375,000.975. 0 | IN EIGN NS | |
стоимость без налога 37 500,0037250000
ставка 20 %| |
сумма налога 7 500,00= > Ри
стоимость с налогом 45 000,00пусто

Слева — значения из эталонного разбора этого документа. Из 70 клеток этой таблицы 18 пустые.

Важная оговорка. По перекошенной странице счёт склеек занижен. Признак «линейка внутри рамки блока» дал по Примеру 2 ноль склеенных клеток, хотя глазами они видны — например, «25% | 4066.57 ЕЯ 400,00 Е. |». Причина: после выпрямления линейки рвутся и перестают быть длинными прямыми, поэтому их не находит ни счёт, ни само распознавание. Значит 13 склеек по Примеру 2 — это нижняя оценка.

Общая причина

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

Эта записка ничего не меняет в распознавании — это замер «как есть». Полный текст с методикой и всеми цифрами лежит в проекте: docs/shag1-yacheyki.md.

← ко всем отчётам по проекту