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

Использование функции RestrictSearchArea для ограничения области поиска

Функция RestrictSearchArea позволяет задать область поиска элемента в виде прямоугольника, массива прямоугольников, а также в виде региона.

В документах достаточно часто встречается ситуация, когда искомое поле на разных страницах может по-разному располагаться относительно заголовка. Например, на одних страницах, поле может находиться правее заголовка, а на других – под ним. В этом случае область поиска целесообразно задавать в виде массива прямоугольников. О том, как можно использовать функцию RestrictSearchArea в такой ситуации, подробно рассмотрено в разделе Использование функций Nearest и FuzzyQuality для поиска элементов.

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

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

Рассмотрим, как можно использовать функцию RestrictSearchArea в случае поиска поля даты. Обычно рекомендуется искать поля даты с использованием как минимум двух типов элементов: Date и Character String. Но и этих двух элементов при низком качестве исходных изображений может оказаться недостаточно. Подробнее организация поиска поля даты рассмотрена в разделе Поиск даты в случае хорошего и плохого распознавания.

Проиллюстрируем работу этой функции на примере проекта SearchOfDate.fsp (папка %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\RestrictSearchArea). Фактически, этот проект является копией одноименного проекта, расположенного в папке Date\FCS project, в котором условия поиска всех элементов (DateField, DateAsString и DateAsObjectCollection) были одинаковы, и выглядели, как показано на изображении ниже.

Но в текущем проекте мы вместо того, чтобы дублировать условия, описанные на вкладке Relations для элементов DateAsString и DateAsObjectCollection, использовали функцию RestrictSearchArea, написав следующий код в секции Advanced pre-search relations на вкладке Advanced:

if (DateField.IsNull == FALSE) then Dontfind();
else RestrictSearchArea (DateField.Rect);
    

Данный код означает, что попытка поиска поля даты в виде строки и коллекции объектов будет осуществляться только в том случае, если дату не удалось найти с помощью специализированного элемента Date. Причем искаться оба эти элемента будут именно в той области, в которой не удалось найти элемент DateField. Дело в том, что метод DateField.Rect вернет описывающий прямоугольник гипотезы элемента DateField. Поскольку гипотеза не найдена, то этот описывающий прямоугольник будет совпадать с областью поиска. Таким образом, мы задаем область поиска элементов DateAsString и DateAsObjectCollection совпадающую с прямоугольником, описывающим область поиска ненайденного элемента DateField.

11/10/2020 12:08:08 PM


Please leave your feedback about this article