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

Пример 4. Шаг 8. Поиск табличного элемента, элемент InvoiceTable

Итак, все предварительные приготовления сделаны, и мы можем искать поле Invoice Table. Опишем элемент типа Table:

  1. Header таблицы. Как уже было решено, заголовки столбцов мы зададим с помощью предварительно найденных вспомогательных элементов.
  2. Footer таблицы. Для задания футера таблицы мы решили использовать уже найденный обязательный элемент Paragraph из группы InvoiceFooter, определяющий начало итоговой части. Этот элемент мы задавали как ближайший к нижнему краю таблицы.
  3. Область поиска таблицы. Ограничим область поиска справа относительно заголовка последнего, не нужного нам, столбца Sales.

Чтобы создать элемент InvoiceTable:

  1. Создайте элемент InvoiceTable (тип Table) в дереве элементов SearchElements.
  2. Выберите вкладку Columns.
  3. Выберите в качестве блока, для поиска которого служит данный элемент, ранее созданный (см. Шаг 3) блок InvoiceTable, нажав кнопку Select.
  4. Задайте параметры поиска столбцов таблицы:
    • Выберите в списке столбцов Reference и нажмите кнопку Properties....
      Для заголовка данного столбца мы будем использовать ранее найденный элемент TableHeader.kwReference. Для этого отметьте опцию Use found element as column name и выберите элемент TableHeader.kwReference, нажав кнопку .
    • Выберите в списке столбцов Designation и нажмите кнопку Properties....
      Для заголовка данного столбца мы будем использовать ранее найденный элемент TableHeader.kwDesignation.
    • Выберите в списке столбцов Unit и нажмите кнопку Properties....
      Для заголовка данного столбца мы будем использовать ранее найденный элемент TableHeader.kwUnit.
    • Выберите в списке столбцов Quantity и нажмите кнопку Properties....
      Для заголовка данного столбца мы будем использовать ранее найденный элемент TableHeader.kwQuantity.
    • Выберите в списке столбцов UnitPrice и нажмите кнопку Properties....
      Для заголовка данного столбца мы будем использовать ранее найденный элемент TableHeader.kwUnitPrice.
    • Выберите в списке столбцов Total и нажмите кнопку Properties....
      Для заголовка данного столбца мы будем использовать ранее найденный элемент TableHeader.kwTotal.
  5. Выберите вкладку Order.
  6. Поскольку искомые столбцы могут перемежаться другими (например, ExtraQtyTag), но всегда следуют в следующем порядке: сначала Designation, правее него Unit Price, и ещё правее Total, - то выберем вариант Rules for column order и, нажав кнопку Add... , добавим столбцы в таком порядке: Designation << Unit Price << Total.

    Показать пример

  1. Выберите вкладку Header. Заголовок таблицы нам нужен, но других ограничений мы накладывать не будем, поэтому оставьте значения по умолчанию.
  2. Выберите вкладку Footer. Для итоговой части таблицы мы будем использовать ранее найденный элемент InvoiceFooter.Paragraph. Для этого отметьте опцию Use found element as footer и выберите элемент InvoiceFooter.Paragraph, нажав кнопку .

    Показать пример

  1. Выберите вкладку Rows.
  2. Поскольку в нашей таблице ячейки в некоторых столбцах могут содержать многострочные записи, необходимо задать ключевые столбцы для разделения на строки. Выберите опцию Use master columns to detect rows.
    В качестве разделителя на строки первым укажем столбец Total,, так как в этом столбце всегда присутствуют данные, и каждой записи таблицы в этом столбце соответствует одна строка данных. На тот случай, если данный столбец не будет обнаружен на изображении, укажем следующими разделителями столбец Unit Price и столбец Quantity. Выберите данный набор столбцов с помощью кнопки .

    Показать пример

  1. Выберите вкладку Relations. Поскольку интересующие нас столбцы таблицы располагаются левее начала заголовка столбца Sales, добавьте следующие условия поиска:
    • Left of элемента TableHeader.kwSales, Offset = 0;

Замечание. При подборе значений для отступов (offset) бывает полезно обратить внимание на геометрические свойства (границы и размеры) опорных и искомых объектов изображения в режиме просмотра результатов предраспознавания. В остальном подбор этих значений является творческим процессом и осуществляется путем подбора.

На случай изображений плохого качества (например, мусора между телом и footer таблицы или отсутствия header или footer таблицы) бывает полезным дополнительно задать ограничение таблицы сверху и снизу. В данном случае можно использовать элементы kwDesignation для ограничения сверху и Paragraph – снизу. На вкладке Relations добавьте следующие условия поиска:

  • Below верхней границы элемента kwDesignation, Offset = -50, < Reference boundary = Top;
  • Above элемента Paragraph, Offset = -50; Reference boundary = Bottom;
  1. Наложим гибкое описание на тестовый набор изображений.
    Видим, что программа верно находит табличный элемент на всех изображениях, но на некоторых изображениях в столбец Quantity попадает текст из предыдущего, не нужного нам столбца.
    Чтобы отделить данные столбца Quantity от мусора, зададим тип контекста для данного столбца.
  2. Откройте диалог Properties табличного элемента InvoiceTable.
    Перейдите на вкладку Columns , откройте диалог Properties... для столбца Quantity, отметьте опцию проверки содержимого столбца Check content type. В типе контекста Type of column content выберите Number.

    Показать пример

  1. Если мы протестируем изображения теперь, то видим, что сейчас в столбец Quantity попадают только цифры, что и требовалось.
  2. Задайте контекст также для столбцов UnitPrice равным Currency и для Total равным Currency.
  3. Выберите в качестве описания местоположения блока InvoiceTable опцию Source element. В качестве source element укажите элемент InvoiceTable, нажав кнопку .

11/10/2020 12:08:08 PM


Please leave your feedback about this article