> ## 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.

# サンプル 4. Step 5.6: Delivery Address field、grAddress、wgAddressAbove、および DeliveryAddress 要素

> grAddress グループ、検索領域を下側から制限する wgAddressAbove ホワイトギャップ、および DeliveryAddress Paragraph 要素を使用して、複数行の Delivery Address を抽出します。

**Delivery Address** field を検索します。

* field 名の右側かつ下側
* 検索領域の下側を制限するために **White Gap** 要素を使用
* **Paragraph** 要素を使用

<div id="create-the-graddress-group-element">
  ## grAddress グループ要素を作成する
</div>

これらすべての要素に共通するプロパティを指定するため、Group 要素を作成します。

1. InvoiceHeader 要素内に、型 **Group** の要素を作成し、名前を **grAddress** にします。
2. **Relations** タブをクリックし、グループ内の要素に対して次の検索制約を指定します。
   * **kwDeliveryAddress** 要素の Above、Offset = -400。
   * **kwDeliveryAddress** 要素の右 boundary の Left of、Offset = -800、Reference boundary = Right。
   * **kwDeliveryAddress** 要素の左 boundary の Right of、Offset = -50、Reference boundary = Left。
   * **kwDeliveryAddress** 要素の上 boundary の Below、Offset = -20、Reference boundary = Top。

<Frame>
  <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_5_6_1_.PNG?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=341cbe7bccc32ddf3e5af49b3bd40f7b" alt="ABBYY FlexiLayout Studio の grAddress Group 要素のプロパティにある Relations タブのスクリーンショット。kwDeliveryAddress 要素に対するグループの位置を決めるオフセットおよび Reference boundary の制約を示しています。" width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_5_6_1_.PNG" />
</Frame>

<div id="create-the-wgaddressabove-white-gap-element">
  ## wgAddressAbove White Gap 要素を作成する
</div>

**DeliveryAddress** 要素の検索領域を下側から制限するには、水平方向の **White Gap** を指定します。

1. `InvoiceHeader.grAddress` 要素内に、型 **White Gap** の要素を作成し、名前を **wgAddressAbove** にします。

2. **White Gap** タブをクリックします。

3. **Orientation** で **Horizontal** を選択します。**Min height** を 55 に設定します。

   <Tip>
     白い余白の高さと幅の値を選択するときは、pre-recognition の結果モードで隣接する画像オブジェクトの形状 (つまり、境界とサイズ) を考慮してください。
   </Tip>

4. 段落内の白い余白を検索するため、**Search among objects of type** では **Text** のみを選択します。

5. **Rubbish** で、次の値を指定します。

   * **Lower threshold limit** – 20。
   * **Upper threshold limit** – 80。
   * **Threshold coefficient (%)** – 10。

   <Frame>
     <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_5_6_2_.PNG?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=782a2385535990435cb356881b29b9c0" alt="ABBYY FlexiLayout Studio の wgAddressAbove 要素のプロパティにある White Gap タブのスクリーンショット。白い余白の水平方向、最小高さ、および Rubbish のしきい値が表示されています。" width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_5_6_2_.PNG" />
   </Frame>

   <Note>
     **Lower threshold limit**、**Upper threshold limit**、および **Threshold coefficient (%)** の各プロパティ値は、試行錯誤によってのみ決められます。まずはデフォルト値から始めてください。デフォルト値でうまくいかない場合は、すべてのテスト画像で白い余白が検出されるまで値を調整してください。
   </Note>

6. 追加の検索制約は指定せず、その他のオプションはデフォルト値のままにします。

7. **Relations** タブをクリックします。

8. 白い余白は **kwDeliveryAddress** というキーワード名の下にのみ位置するため、次の検索制約を指定します。
   * **kwDeliveryAddress** 要素の下、**Offset** = 20
     **Offset** は、たとえば field 名とテキストの間など、画像上の別の領域でプログラムが白い余白を見つけないようにするために必要です。**Advanced** タブをクリックします。

9. **Delivery Address** field はすべての画像に存在するわけではありませんが、存在する場合は必ずその名前を伴うため、**Advanced pre-search relations** フィールドに次の追加条件を指定します。**kwDeliveryAddress** 要素が検出された場合にのみ、画像オブジェクトを検索します。[FlexiLayout language](/ja/flexi-capture/fls/code/general-code) では、この条件は次のように記述できます。

   ```text theme={null}
   If InvoiceHeader.kwDeliveryAddress.IsNull Then DontFind;
   ```

10. **wgAddressAbove** 要素がすべての画像で検出されるかどうかを確認するため、FlexiLayout をマッチングします。

11. プログラムは指定した検索領域で複数の白い余白を見つけることがあり、常に正しいものを選べるとは限らないため、追加の検索制約を設定します。画像を確認すると、対象の白い余白は指定した検索領域内で最も上にある余白であることが分かります。したがって、**Advanced pre-search relations** フィールドに次の追加条件を指定します。最初のページの上境界に最も近い画像オブジェクトを検索します。[FlexiLayout language](/ja/flexi-capture/fls/code/general-code) では、この条件は次のように記述できます。

    ```text theme={null}
    NearestY: Page(1).RectGlobal.Top;
    ```

12. **InvoiceFooter** 要素を一時的に除外し、FlexiLayout をマッチングします。

<div id="create-the-deliveryaddress-paragraph-element">
  ## DeliveryAddress Paragraph element を作成する
</div>

1. `InvoiceHeader.grAddress` 要素で、型 **Paragraph** の要素を作成し、**DeliveryAddress** という名前を付けます。
2. **Relations** タブをクリックします。
3. **DeliveryAddress** は白い gap **wgAddressAbove** の上にしか配置できないため、次の検索制約を指定します。
   * **wgAddressAbove** 要素の **Above**、**Offset** = 0。
4. **DeliveryAddress** 要素の検索領域は `InvoiceHeader.grAddress` グループのレベルですでに指定されているため、ここで改めて指定する必要はありません。
5. **Advanced** タブをクリックします。
6. **DeliveryAddress** field の名前も検索領域内にあるため、**DeliveryAddress** の値だけを取得できるよう、これを除外します。さらに、検索領域には区切り線や noise も含まれているため、それらも除外するのが適切です。このため、**kwDeliveryAddress** 要素の region をそのまま除外することはできません。代わりに、**kwDeliveryAddress** 要素の region を取得し、その region を拡大してすべての noise を含めたうえで、できあがった rectangle を除外するほうが適切です。そのためには、**Advanced pre-search relations** field に次の検索制約を指定します。

   ```text theme={null}
   If InvoiceHeader.kwDeliveryAddress.IsNull Then DontFind;
   Else
   // field 名の周囲に長方形を描画します（boundaries に多少のオフセットを加えます）
   { Let Left = InvoiceHeader.kwDeliveryAddress.Rect.Left - 100dt;
   Let Top = InvoiceHeader.kwDeliveryAddress.Rect.Top - 100dt;
   Let Right = InvoiceHeader.kwDeliveryAddress.Rect.Right + 20dt;
   Let Bottom = InvoiceHeader.kwDeliveryAddress.Rect.Bottom;
   // 生成した長方形を field の 検索領域 から除外します
   ExcludeRect (Left, Top, Right, Bottom);
   }
   ```
7. **InvoiceFooter** 要素を一時的に除外して、FlexiLayout をマッチングします。
8. **DeliveryAddress** block の location は、検出された **DeliveryAddress** 要素の rectangular region として指定します。これは、表示しやすいように簡略化し、縦横に 5 ドット拡張したものです。これを行うには、**Expression** オプションを選択し、次の expression を入力します。

   ```text theme={null}
   Rect outputRect;
   OutputRegion = InvoiceHeader.grAddress.DeliveryAddress.SimplifiedRegion;
   IsNull = InvoiceHeader.grAddress.DeliveryAddress.IsNull;
   OutputRegion.Inflate (5dt, 5dt);
   ```
