Предположим, ваш исходный текст состоит из двух столбцов, подобных этому:
Aaaa bb ccc ddddd mmmm nn oooo pp
eee fff ggggg hh qqq rrrrrrrrr
i jjjj kkk lll sss tttt uu.
Из вашего описания звучит так, будто ваш OCR дал вам отдельные слова и их ограничивающие прямоугольники.Если исходная страница сканируется ортогонально, то все слова в данной строке должны иметь одинаковые (или очень близкие) значения y.Если они не совпадают, вы можете сделать целочисленное деление по вертикальным позициям с некоторой долей типичной высоты блока.Это должно сгруппировать значения у.Вы можете выполнить аналогичную обработку для координат x, чтобы гарантировать, что слова на краю столбца также имеют идентичные значения x.
Чтобы обнаружить отдельные столбцы, я бы попытался составить гистограмму всех «левых»значения всех слов (или правые края, если ваш текст работает справа налево).Вы должны увидеть пик в начале каждого столбца.
Вероятно, вы можете исключить любые ложные срабатывания, убедившись, что в каждой строке есть пробел между правой координатой последнего поля перед началом кандидатаколонны.Пробел, вероятно, должен быть не меньше минимальной ширины любого слова.
Затем вы можете разбить ваши слова на группы столбцов, проверив, к какому горизонтальному диапазону относятся их левая и правая координаты.В нашем примере слова с Aaaa
по lll
будут находиться в первом разделе, а слова с mmmm
по uu.
будут находиться во втором разделе.
В каждом разделе,затем вы можете разделить на линии путем сортировки по координатам Y.Наконец, для каждой строки вы сортируете по координате х.(Сортировка по возрастанию или по убыванию зависит от вашей системы координат и направления вашего текста.)
Та же самая базовая идея может быть применена к таблицам, а также к столбцам текста, но вам могут потребоваться некоторые настройки дляиметь дело с такими вещами, как правильные ячейки.