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

Пример 3. Шаг 13. Продолжаем анализ изображений

К этому моменту у нас описаны поля Invoice Number, Invoice Date и DeliveryAddress.

Продумаем последовательность дальнейшего поиска элементов.

Анализ структуры расположения полей на тестовых изображениях показывает:

  • Для поиска поля Country нам, скорее всего, будет достаточно заголовка этого поля и элемента типа Character String.
  • Для поиска полей Total Quantity и Total Amount одного заголовка, общего для этих полей, явно недостаточно, дополнительно потребуются опорные элементы для локализации полей по горизонтали. В качестве таких элементов могут служить заголовки соответствующих столбцов таблицы.

Что касается поля Invoice Table, которое мы будем искать с помощью элемента типа Table, здесь нам тоже понадобятся предварительные приготовления:

  1. Header таблицы. Определить местоположение заголовков столбцов можно двумя способами:
    • Первый способ – указать одно или несколько ключевых слов, открыв диалог свойств столбца с вкладки Columns в диалоге свойств табличного элемента. Этот способ более быстрый в смысле разработки, но менее гибкий.
    • Второй способ – использовать ранее найденный элемент для определения местоположения заголовка. Здесь в нашем распоряжении вся гибкость настроек, если она понадобится.

Проанализировав наши изображения, видим, что качество хорошее и нет никаких особенностей, которые могут помешать выбрать первый метод (разве что очень короткий заголовок столбца Quantity: для 3-х буквенного ключевого слова допустимый процент ошибок 20% означает, что ни одной ошибки не допускается).

Решаем для заголовков первых 2-х столбцов Reference и Designation воспользоваться первым способом, а для остальных - столбцы Quantity, Unit Price и Total – воспользуемся ранее описанными вспомогательными элементами, необходимыми нам для поиска полей TotalQuantity и TotalAmount.

  1. Footer таблицы. Он также (как и заголовки столбцов) может быть задан двумя способами:
    • Через список ключевых слов
    • Через вспомогательный элемент.

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

  1. Область поиска таблицы. Справившись с ограничением таблицы сверху (Header) и снизу (Footer), нам нужно ограничить таблицу справа (потребности в ограничении слева нет, т.к. с этой стороны на изображениях нет других данных).
    Так как даже с помощью контекста данных столбца мы не сможем отделить цифры столбца Total от цифр столбца Sales, нам потребуется другой подход. Можно ограничить область поиска таблицы справа относительно заголовка последнего, не нужного нам, столбца Sales.

Замечание. Выбор элементов и последовательности их поиска является творческим процессом и может меняться в процессе отладки гибкого описания.

Таким образом, прежде чем непосредственно приступить к поиску оставшихся полей, опишем все вспомогательные элементы:

  1. Проанализировав взаимозависимости планируемых элементов, начнем с заголовков столбцов таблицы. Нам нужно найти заголовки для столбцов Quantity, Unit Price, Total и Sales.
  2. Проанализировав наши изображения, видим, что шапка таблицы начинается с горизонтального сепаратора, и других сепараторов между заголовками столбцов и полями Invoice Number, Invoice Date и Delivery Address. Данный сепаратор позволит нам очень строго задать область поиска заголовков столбцов таблицы:
    • Для этого нам необходим элемент hsTableHeaderTop (тип Separator), (подробная инструкция в Шаге 14). Заголовки столбцов мы будем искать в порядке их следования.
    • Создайте составной элемент TableHeader (тип Group ), (подробная инструкция в Шаге 15), в составе которого опишем элементы:
      • элемент  kwQuantity (тип Static Text), соответствующий столбцу Quantity таблицы  InvoiceTable (подробная инструкция в Шаге 16).
      • элемент  kwUnitPrice (тип Static Text, соответствующий столбцу Unit Price таблицы  InvoiceTable (подробная инструкция в  Шаге 17).
      • элемент  kwTotal (тип Static Text), соответствующий столбцу Total таблицы  InvoiceTable (подробная инструкция в Шаге 18).
      • элемент  kwSales (тип Static Text), соответствующий столбцу Sales таблицы  InvoiceTable (подробная инструкция в Шаге 19).
  3. В нижней части страницы присутствуют заголовки полей Total Quantity и Total Amount (по совместительству являющийся для таблицы ограничителем снизу), нас также интересуют альтернативные надписи, которые также могут служить ограничителями для таблицы снизу, и в этой же логической группе опишем заголовок и source element для поля Country.
  4. Создайте составной элемент Footer (тип Group), в составе которого опишем элементы:
    • элемент  kwFooter (тип Static Text), соответствующий итоговой части таблицы Invoice Table (подробная инструкция в Шаге 21).
    • элемент  kwTotal (тип Static Text), соответствующий заголовку полей Total Quantity и Total Amount (подробная инструкция в Шаге 22).
    • элемент  kwOrigin (тип Static Text), соответствующий заголовку поля Country (подробная инструкция в Шаге 23).
    • элемент Country (тип Character String), соответствующий полю Country (подробная инструкция в Шаге 24).

Теперь, когда все предварительные приготовления сделаны и описан порядок создания вспомогательных элементов, приступим к анализу поиска оставшихся полей. Опираясь на ранее найденные заголовки столбцов и футера, опишем оставшиеся поля Total Quantity, Total Amount и Invoice Table.

  1. Для этого создадим элементы TotalQuantity (тип Character String) и TotalAmount (тип Character String), соответствующие полям Total Quantity и Total Amount (подробная инструкция в Шаге 25).
  2. Создадим элемент InvoiceTable (типTable), соответствующий полю Invoice Table (подробная инструкция в Шаге 26).

12/1/2020 7:04:05 AM


Please leave your feedback about this article