Skip to main content
テスト画像を解析すると、Total Quantity field と Total Amount field は Footer.kwTotal という名前がある場合にのみ現れ、同じ高さに配置されていることが分かります。 Total Quantity field と Total Amount field を検出するには、Character String 型の要素を使用します。これらの要素に共通する検索条件を指定するため、Group 要素である grTotal を作成します。

grTotal Group 要素を作成する

Group 要素 grTotal を作成するには:
  1. Footer 要素内に Group 要素を作成し、grTotal という名前を付けます。
  2. 名前が存在しない場合は subelements の検索を停止するようにするため、Optional element を選択します。
    詳細については、The Optional property of a Group element を参照してください。
  3. Advanced タブをクリックします。
  4. Total Quantity field と Total Amount field は、画像上では名前 Footer.kwTotal がある場合にのみ現れるため、Advanced pre-search relations field に次の追加の検索制約を設定します: Footer.kwTotal 要素が検出されなかった場合は、画像上でそのオブジェクトを検索しません。FlexiLayout language では次のようになります。 If Footer.kwTotal.IsNull Then DontFind;

TotalQuantity 要素を作成する

Total Quantity field は、Total 行と Quantity 列の交点にあります。最初の制約は、Group 要素レベルですでに指定されています。2 つ目の制約を指定するには、前に検出された列名を参照要素として使用します。 TotalQuantity 要素を作成するには、次の手順に従います。
  1. grTotal 要素で、型 Character String の要素を作成し、TotalQuantity という名前を付けます。
  2. Character String タブをクリックします。
  3. Character count フィールドに、次のファジー区間を指定します: {-1, 1, 10, INF}。これは文字列の長さの推定値です。想定される値の範囲は 1 ~ 10 です。この範囲外の仮説にはペナルティが課されます。
  4. 要素の他の parameters はデフォルト値のままにします。
  5. Relations タブをクリックします。
  6. Total Quantity field は常に Footer.kwTotal という名前の keywords と同じ高さか、やや下に配置されるため、次の検索制約を設定します:
    • 要素 Footer.kwTotal の Above、Offset = -200、Reference boundary = Bottom
    • 要素 Footer.kwTotal の Below、Offset = -20、Reference boundary = Top
    offsets の値を設定する前に、pre-recognition 中に検出された隣接オブジェクトの幾何学的プロパティ (サイズや boundary など) を分析するとよいでしょう。Offset 値は試行錯誤で決定します。
  7. Advanced タブをクリックします。
  8. Total Quantity field は画像上では省略可能ですが、現れる場合は常に Quantity 列と一緒に現れ、その名前の下に配置されるため、Advanced pre-search relations field に次の追加の検索制約を設定します: TableHeader.kwQuantity 要素が検出されている場合にのみ、画像上でオブジェクトを検索します。列名の各 boundary から左右に 50 ドットを超える範囲は検索しないでください。FlexiLayout language では: If Not (TableHeader.kwQuantity.IsNull) Then { LeftOf: TableHeader.kwQuantity.Right, -50 * dot; RightOf: TableHeader.kwQuantity.Left, -50 * dot; } Else DontFind;
  9. test images で FlexiLayout のマッチングを試し、該当するすべての画像でプログラムが要素を正常に検出することを確認します。
  10. TotalQuantity ブロックの位置を記述するには、ソース要素オプションを選択し、次に ”” をクリックして、ソース要素として TotalQuantity 要素を選択します。

TotalAmount 要素を作成する

Total Amount field は、Total 行 (テーブルのフッター) と Total 列が交差する位置にあります。最初の制約は、Group 要素レベルですでに指定されています。2 つ目の制約を指定するには、前に検出された列名を参照要素として使用します。 TotalAmount 要素を作成するには、次の手順を実行します。
  1. grTotal 要素で、型 Character String の要素を作成し、TotalAmount という名前を付けます。
  2. Character String タブをクリックします。
  3. Character count フィールドで、次のファジー区間を指定します: [-1, 1, 20, 2147483647]。これは文字列の長さのおおよその見積もりです。想定される値の範囲は 1 ~ 20 です。この範囲外の仮説にはペナルティが課されます。
  4. 要素のその他のパラメーターはデフォルト値のままにします。
  5. Relations タブをクリックします。
  6. Total Amount field は常に Footer.kwTotal という名前のキーワードと同じ高さにあるため、次の検索制約を設定します:
    • 要素 Footer.kwTotal の上、Offset = -20、Reference boundary = Bottom。
    • 要素 Footer.kwTotal の下、Offset = -20、Reference boundary = Top。
  7. Advanced タブをクリックします。
  8. Total Amount field は、Total 列名のすぐ下 (多少ずれる場合があります) にしか配置されず、また Unit Price 列と Sales 列の間にしか配置できないため、Advanced pre-search relations field に次の追加の検索制約を設定します: TableHeader.kwTotal 要素が検出されている場合は、TableHeader.kwTotal 要素の右境界から右へ 70 ドット以内、かつ TableHeader.kwTotal 要素の左境界から左へ 50 ドット以内でオブジェクトを探します。 または、TableHeader.kwUnitPrice 要素と TableHeader.kwSales 要素が検出されている場合は、TableHeader.kwSales 要素の左境界から右へ 40 ドット以内、かつ TableHeader.kwUnitPrice 要素の右境界より右側でオブジェクトを探します。それ以外の場合は、オブジェクトを探しません。FlexiLayout language では、次のようになります: If Not (TableHeader.kwTotal.IsNull) Then { LeftOf: TableHeader.kwTotal.Right, -70 * dot; RightOf: TableHeader.kwTotal.Left, -50 * dot; } Else If Not (TableHeader.kwUnitPrice.IsNull) and Not (TableHeader.kwSales.IsNull) Then { LeftOf: TableHeader.kwSales.Left, -40 * dot; RightOf: TableHeader.kwUnitPrice, 0 * dot; } Else DontFind;
    オフセット値を設定する前に、事前認識で検出された隣接オブジェクトの幾何学的特性 (つまり、サイズと境界) を分析しておくとよいでしょう。オフセット値は試行錯誤で決定します。
  9. テスト画像で FlexiLayout のマッチングを試し、該当するすべての画像でプログラムが要素を正しく検出できることを確認します。
  10. TotalAmount ブロックの位置を記述するには、ソース要素オプションを選択し、次に 参照ボタン をクリックして、ソース要素として TotalAmount 要素を選択します。