Определить текстовые столбцы с позиций слов - PullRequest
4 голосов
/ 04 октября 2011

У меня есть TIFF-файл и текст на нем, который был OCRd на более ранней стадии. Слова имеют свои точные позиции в качестве информации (вверху слева, внизу справа). Теперь мне нужно прочитать текст внутри нарисованного пользователем прямоугольника.

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

Существуют ли алгоритмы, помогающие мне расположить слова в правильном порядке? Я предполагаю, что мне нужно изучить пробелы между словами, чтобы обнаружить шаблоны, которые идентифицируют столбцы. Я хотел бы избежать обработки изображения напрямую, хотя это должно быть возможно (но без распознавания текста).

Я также не уверен относительно влияния списков / таблиц, например, в заказах и счетах. Линейно-ориентированный подход, вероятно, был бы лучше здесь.

Я занимаюсь разработкой на Delphi, но адаптивные алгоритмы на других языках также приветствуются.

edit: завтра я попытаюсь опубликовать образцы данных, но в основном у меня есть массив слов с соответствующими координатами на изображении (например, я мог бы легко нарисовать вокруг них прямоугольник).

1 Ответ

5 голосов
/ 05 октября 2011

Предположим, ваш исходный текст состоит из двух столбцов, подобных этому:

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.Наконец, для каждой строки вы сортируете по координате х.(Сортировка по возрастанию или по убыванию зависит от вашей системы координат и направления вашего текста.)

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

...