> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# サンプル 3. Step 13: 画像のさらなる解析

> サンプル 3 の残りの請求書要素を整理します。テーブルヘッダーとテーブルフッターの検出戦略、列名要素、Footer グループの計画を扱います。

ここまでで、請求書番号、請求日、Delivery Address の各field について説明しました。

次に、ほかの要素をどの順序で検出すべきかを決めます。

テスト画像上のfield の配置を解析すると、Country field の検出には、このfield の名前と [Character String](/ja/flexi-capture/fls/template/character-chain) 型の要素を使用できることがわかります。

ただし、Total Quantity field と Total Amount field を検出するには、2 つのfield に共通する名前だけでなく、追加の要素も必要です。そのため、テーブルの対応する列名を利用できます。

<div id="plan-the-search-for-the-invoice-table-field">
  ## Invoice テーブル field の検索を計画する
</div>

また、[テーブル](/ja/flexi-capture/fls/tables/general-tables) 型の要素を使って検出する Invoice テーブル field の検索に向けた準備も必要です。

1. **テーブルのヘッダーを記述します。** 列名を検出する方法は 2 つあります。
   * 1 つ目は、**Column Properties** ダイアログ (**テーブル element →** Columns tab の **Properties dialog**) で、1 つまたは複数のキーワードを指定する方法です。この方法は手軽ですが、柔軟性はあまり高くありません。
   * 2 つ目は、あらかじめ検出された要素を参照要素として使用し、列名の位置を特定する方法です。この方法では、要素に用意されている追加設定を最大限に活用できます。

     事前認識結果を解析すると、認識精度は十分に高いため、1 つ目の方法を使用できます (唯一の問題は、**Quantity** 列名が非常に短いことです。3 文字のキーワード “Qty” で誤りが 20% 発生するということは、実質的に誤りが許されないことを意味します)。

     最初の 2 つの列、**Reference** と **Designation** の検出には 1 つ目の方法を使用し、残りの列、**Quantity**、**Unit Price**、**Total** の名前の検出には、すでに説明した要素を使用します (これらの要素は、いずれにしても **TotalQuantity** field と **TotalAmount** field を検出するために作成する必要があります)。
2. **テーブルのフッターを記述します。** これも、キーワードを使用する方法と補助要素を使用する方法のいずれかで記述できます。

   フッター内のキーワードを解析すると、画像によってはそれらのキーワードがテーブルの最初のrow にも現れることがわかるため、search area を制限する手段として補助要素を使用する必要があります。
3. **テーブルの search area を記述します。** ヘッダーとフッターを記述したら、次にテーブルの右 boundary を記述します (画像のこの部分にはほかのデータがないため、左 boundary を記述する必要はありません)。

   Total 列の数値と Sales 列の数値は文脈だけでは区別できないため、別の方法が必要です。右側のテーブル search area を制限するために、最後の列である Sales の名前を使用できます。

<Note>
  要素とその検出順序は試行錯誤によって決めるものであり、FlexiLayout の調整中に変更できます。
</Note>

<div id="describe-the-auxiliary-elements">
  ## 補助要素を記述する
</div>

残りのfieldを記述する前に、補助要素を記述します。

1. 要素間の相互依存関係を解析すると、まず **Quantity**、**Unit Price**、**Total**、**Sales** の列名を検出する必要があることがわかります。
2. テーブルのヘッダーは、列名と **Invoice Number**、**Invoice Date**、**Delivery Address** の各fieldの間にある水平のseparatorから始まります。このseparatorは、列名のsearch areaを絞り込むのに役立ちます。
   * このために、型 [Separator](/ja/flexi-capture/fls/template/separator) の要素を作成し、**hsTableHeaderTop** という名前を付けます。詳細な手順については、[Step 14](/ja/flexi-capture/fls/tutorial3/3step14) を参照してください。
     列名は自然な順序で探します。
   * 型 [Group](/ja/flexi-capture/fls/template/elements-compound) の要素を作成し、**TableHeader** という名前を付けます。詳細な手順については、[Step 15](/ja/flexi-capture/fls/tutorial3/3step15) を参照してください。この要素には次を含める必要があります。
     * 型 [Static Text](/ja/flexi-capture/fls/template/static-text) の要素 **kwQuantity**。これは、テーブル **InvoiceTable** の **Quantity** 列名に対応します。詳細な手順については、[Step 16](/ja/flexi-capture/fls/tutorial3/3step16) を参照してください。
     * 型 [Static Text](/ja/flexi-capture/fls/template/static-text) の要素 **kwUnitPrice**。これは、テーブル **InvoiceTable** の **Unit Price** 列名に対応します。詳細な手順については、[Step 17](/ja/flexi-capture/fls/tutorial3/3step17) を参照してください。
     * 型 [Static Text](/ja/flexi-capture/fls/template/static-text) の要素 **kwTotal**。これは、テーブル **InvoiceTable** の **Total** 列名に対応します。詳細な手順については、[Step 18](/ja/flexi-capture/fls/tutorial3/3step18) を参照してください。
     * 型 [Static Text](/ja/flexi-capture/fls/template/static-text) の要素 **kwSales**。これは、テーブル **InvoiceTable** の **Sales** 列名に対応します。詳細な手順については、[Step 19](/ja/flexi-capture/fls/tutorial3/3step19) を参照してください。
3. 続いて、ドキュメントの下部を記述します。対象となるfieldは、**Total Quantity** フィールド名と **Total Amount** フィールド名 (これがテーブルの下側の境界として機能します) 、およびテーブルの下側の境界の特定に役立つその他のキャプションです。

   また、この論理グループ内で **Country** fieldの名前要素とソース要素も記述します。
4. [Group](/ja/flexi-capture/fls/template/elements-compound) 要素を作成し、**Footer** という名前を付けます。この要素には次を含める必要があります。
   * 型 [Static Text](/ja/flexi-capture/fls/template/static-text) の要素 **kwFooter**。これは、**Invoice テーブル** のフッターに対応します。詳細な手順については、[Step 21](/ja/flexi-capture/fls/tutorial3/3step21) を参照してください。
   * 型 [Static Text](/ja/flexi-capture/fls/template/static-text) の要素 **kwTotal**。これは、**Total Quantity** フィールドと **Total Amount** フィールドの名前に対応します。詳細な手順については、[Step 22](/ja/flexi-capture/fls/tutorial3/3step22) を参照してください。
   * 型 [Static Text](/ja/flexi-capture/fls/template/static-text) の要素 **kwOrigin**。これは、**Country** fieldの名前に対応します。詳細な手順については、[Step 23](/ja/flexi-capture/fls/tutorial3/3step23) を参照してください。
   * 型 [Character String](/ja/flexi-capture/fls/template/character-chain) の要素 **Country**。これは、**Country** fieldに対応します。詳細な手順については、[Step 24](/ja/flexi-capture/fls/tutorial3/3step24) を参照してください。

<div id="describe-the-remaining-fields">
  ## 残りの field を記述する
</div>

必要な準備がすべて整い、追加の要素を作成する順序も説明されたので、残りの field を探し始めることができます。前に検出した列名と Footer を基に、残りの Total Quantity、Total Amount、および Invoice Table の field を記述します。

1. このため、型が [Character String](/ja/flexi-capture/fls/template/character-chain) の要素を 2 つ作成し、**TotalQuantity** と **TotalAmount** という名前を付けます。これらの要素は、それぞれ **Total Quantity** field と **Total Amount** field に対応します。詳しい手順については、[Step 25](/ja/flexi-capture/fls/tutorial3/3step25) を参照してください。
2. 型が [テーブル](/ja/flexi-capture/fls/tables/general-tables) の要素を作成し、**InvoiceTable** という名前を付けます。この要素は **Invoice Table** field を表します。詳しい手順については、[Step 26](/ja/flexi-capture/fls/tutorial3/3step26) を参照してください。
