Russian (Русский) - Change language

Исключение элементов с помощью Exclude

При создании гибкого описания не всегда удается ограничиться описанием области поиска поля данных в терминах “выше-ниже-правее-левее”. Обычно это происходит, когда в область поиска попадают посторонние объекты (элементы формы или объекты появившиеся на изображении в результате сканирования). Такие объекты не должны попасть в блок для распознавания, т.е. и их надо каким-то образом исключить при описании соответствующего элемента. Примером может служить поле адреса на рисунках, приведенных ниже. Имеется в виду взаимное расположение заголовков “Address:”, “(Address)”, которые необходимо исключить из распознавания, и собственно адреса, который необходимо распознавать.

Для этих целей служит функция Exclude, которая позволяет исключить из области поиска элемента область, задаваемую при вызове данной функции. Это может быть регион гипотезы (найденной или не найденной), прямоугольник или массив прямоугольников найденных элементов, а также регион, построенный из набора объектов изображения, входящих в состав какой-либо найденной гипотезы (см. метод ExcludeSet).

Рассмотрим на примере проекта Exclude.fsp (папка %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Exclude), как работает функция Exclude.

В проекте находятся 4 страницы:

  • Страница 1 - поле адреса является многострочным. Заголовок “Address:”, расположен на первой строке адреса. Т.е. нельзя сказать, что поле данных находится правее или ниже заголовка. Но заголовок необходимо исключить из распознавания;
  • Страница 2 – поле адреса не имеет заголовка;
  • Страницы 3 и 4 – строка “(Address)” находится внутри поля данных. Но ее необходимо исключить из распознавания.

На всех страницах в нашем примере поле адреса располагается ниже поля с названием компании. Поэтому сначала мы создаем элемент типа Static Text с именем CompanyHeader для поиска заголовка данного поля и задаем его значение.

Затем мы создаем элемент типа Static Text с именем AddressHeader для поиска заголовка поля адреса. В качестве значений статического текста мы задаем Address:|(Address). Т.е. перечисляем все варианты строк, которые нам надо будет найти, а затем исключить из поля адреса. Описываем условие поиска этих строк в секции Relations , говоря, что данные строки необходимо искать ниже (Below) элемента CompanyHeader.

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

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

Поскольку поле адреса в нашем случае многострочное, для его поиска в проекте создан элемент типа Paragraph. Мы назвали его Address и также как в случае заголовка поля адреса, задали, что его необходимо искать ниже (Below) элемента CompanyHeader.

Как видно после запуска процедуры наложения гибкого описания, на 1, 3 и 4 страницах в поле адреса попала также и строка заголовка.

Теперь снова откроем диалог свойств элемента Address и перейдем на вкладку Search Constraints. Нажмем кнопку Add... рядом с секцией Exclude regions of elements и в списке выберем элемент AddressHeader.

После сохранения свойств элемента снова запустим процедуру наложения гибкого описания на всех страницах. Как видно в пакете проекта, регион блока, соответствующий полю адреса, приобрел непрямоугольную форму, поскольку из него был вырезан регион, соответствующий заголовку.

Замечание. Секция Exclude regions of elements позволяет исключить из области поиска текущего элемента регион найденной гипотезы другого элемента. Если же необходимо исключить более сложную геометрическую фигуру, либо нужно сначала вычислить некоторый регион, а затем уже исключить его из области поиска, то следует воспользоваться функциями Exclude, ExcludeRect, ExcludeSet в секции Advanced pre-search relations диалога свойств элемента.

Замечание. Регион блока по определению состоит из прямоугольников, поставленных сверху друг на друга, так что любая (мысленно проведенная) горизонтальная прямая пересекает регион только один раз, т.е. вертикальных зубцов в блоке быть не может по определению. Поэтому если полезная информация и строка, которую необходимо исключить, располагаются примерно или строго на одном уровне, заголовок не удастся исключить из поля данных на этапе создания гибкого описания. В этом случае исключение заголовка может быть осуществлено уже после распознавания в FlexiCapture из распознанного текста с помощью правила “Замена значений из списка”.

01.12.2020 7:04:05


Please leave your feedback about this article