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

# 異なるFlexiLayoutの結果がどのようにマージされるか

> FlexiCapture for Invoicesが、メインの FlexiLayout、追加の FlexiLayout、およびベンダーごとに学習されたFlexiLayout バリアントのフィールド領域をどのようにマージするかを説明します。

この記事では、FlexiLayoutがドキュメントとマッチングされる順序と、フィールド領域がどのように選択されるかについて説明します。

FlexiCapture for Invoicesでは、Document Definitionとのマッチング時に、複数の種類のFlexiLayoutを使用できます。

* **汎用FlexiLayout**。これはすべての請求書の処理に使用され、さらに次の2種類があります。
  * **メインの FlexiLayout**。標準の定義済み請求書fieldsを検出するために使用されます。このFlexiLayoutはFlexiCapture for Invoicesに付属しており、変更できません。
  * **追加の FlexiLayout**。user-defined fieldsと、検出ロジックが変更された標準の請求書fieldsを検出するために使用されます。このFlexiLayoutは[ユーザーが作成します](/ja/flexi-capture/invoice-reader/ir-fls-special-facilities)。
* **FlexiLayoutバリアント**。これは特定のベンダーの請求書を処理するために使用されます。FlexiLayoutバリアントでは、それぞれのDocument Definitionで定義された任意のfieldsを検出でき、ユーザーが作成することも、FlexiCapture for Invoicesが特定のベンダーの請求書を使って学習した際に作成することもできます。

Document Definitionが請求書とマッチングされると、プログラムはフィールド領域のセットを取得します。これらのフィールド領域は、Document Definitionに含まれる複数のFlexiLayoutから取得されます。

<div id="stage-1-match-the-generic-flexilayout">
  ## ステージ 1: 汎用 FlexiLayout を Match する
</div>

<div id="apply-the-main-flexilayout">
  ### メインの FlexiLayout を適用する
</div>

まず、プログラムによってメインの FlexiLayout が適用されます。請求書画像は、Document Definition で指定された事前認識パラメーターを使用して事前認識されます。

* 言語は、**Document Definition Properties** ダイアログの **Document Definition Settings** タブにある **国と言語一覧** で指定します。
* 事前認識モード (**Fast**、**Balanced**、**Normal**、または **Accurate**) は、**Document Definition Properties** ダイアログの **FlexiLayout** タブで指定します。

メインの FlexiLayout を適用すると、プログラムは次のものを取得します。

* ベンダーの ID と事業部門の ID (検出された場合) 。
* 標準フィールドの領域。詳細については、[抽出されたフィールド](/ja/flexi-capture/invoice-reader/ir-extractable-fields)を参照してください。

<div id="apply-the-additional-flexilayout">
  ### 追加のFlexiLayoutの適用
</div>

次に、汎用FlexiLayoutで利用可能な場合、プログラムは**追加のFlexiLayout**を適用します。

請求書画像は、FlexiLayoutで指定された事前認識パラメーター (言語と事前認識モード) を使用して事前認識されます。追加のFlexiLayoutにも、Document Definitionと同じ事前認識パラメーターを指定することをお勧めします。この場合、プログラムは請求書を再度事前認識する代わりに、メインのFlexiLayoutの適用時に得られた事前認識結果を使用します。

請求書に特殊なフィールドが含まれている場合は、追加のFlexiLayoutで異なる事前認識パラメーターを指定できますが、処理速度は低下します。

追加のFlexiLayoutを適用すると、プログラムはその追加のFlexiLayoutで定義されたすべてのフィールドの領域を取得します。これらは、検出ロジックを変更する必要があった標準の請求書フィールドである場合もあれば、メインのFlexiLayoutでは定義されていない追加フィールドである場合もあります。

<div id="generate-the-aggregate-result">
  ### 集約結果を生成する
</div>

次に、プログラムは汎用FlexiLayoutの適用結果を集約した結果を生成します。Document Definitionに追加のFlexiLayoutが含まれている場合、この段階でプログラムは、メインのFlexiLayoutの結果と追加のFlexiLayoutの結果をマージします。

フィールドは名前で識別されます。その結果、メインのFlexiLayoutと追加のFlexiLayoutに由来する、重複のないフィールドのコレクションが作成されます。メインのFlexiLayoutと追加のFlexiLayoutに同じ名前のフィールドがある場合、プログラムは追加のFlexiLayoutの領域を使用します。

この方法を使うと、新しいフィールドを定義したり、標準の請求書フィールドのいずれかの取り込みロジックを変更したりできます。

<div id="stage-2-apply-flexilayout-variants">
  ## ステージ 2: FlexiLayout バリアントを適用する
</div>

ステージ 1 で汎用 FlexiLayout を適用してプログラムがベンダーを検出し、そのベンダー用の **FlexiLayout バリアント** が存在する場合、このステージでその FlexiLayout バリアントが適用されます。

Document Definition の事前認識パラメーターが使用されます。これらは、汎用 FlexiLayout に含まれるメインの FlexiLayout のマッチング時に使用された事前認識パラメーターと同じです。そのため、追加の事前認識は必要ありません。

請求書に対して FlexiLayout バリアントのマッチングを行うと、プログラムはこの特定のベンダー向けの FlexiLayout バリアントで定義されているすべての field の領域を取得します。さまざまな請求書を使ってプログラムを学習させて FlexiLayout バリアントを得た場合、そのバリアントには Document Definition で定義されているすべての field が含まれます。FlexiLayout バリアントを手動で作成する場合は、指定したベンダーに固有の操作が必要な field だけをそのバリアントに残す必要があります。

<div id="stage-3-merge-the-results">
  ## ステージ 3: 結果をマージする
</div>

このステップでは、**汎用 FlexiLayout** のマッチングで得られた結果と、**FlexiLayout バリアント** のマッチングで得られた結果がマージされます。

FlexiLayout バリアントが、さまざまな請求書を使ってプログラムを学習させることで得られたものである場合、そのバリアントには Document Definition で定義されているすべての field が含まれます。Document Definition には、学習中にユーザーが領域を変更する必要があった field、つまり汎用 FlexiLayout では十分に検出できなかった field に関する情報が保存されます。プログラムはこの情報を使用して、どの field の領域を汎用 FlexiLayout から取得し、どの field の領域をこのベンダーの請求書で学習した FlexiLayout バリアントから取得するかを決定します。

<Note>
  **合計金額** field の領域は、異なる方法で選択されます。汎用 FlexiLayout を適用すると、プログラムは **合計金額** field の領域がどの程度の信頼度で検出されたかを指定します。領域が十分な信頼性で検出されなかった場合、**合計金額** field は確認が必要になります。指定したベンダーの請求書で学習した FlexiLayout バリアントが存在し、汎用 FlexiLayout が **合計金額** field を十分な信頼度で検出できない、またはまったく検出できない場合は、FlexiLayout バリアントで検出された **合計金額** field の領域が使用されます。また、FlexiLayout バリアントで検出された **合計金額** field の領域を常に使用するようにプログラムを設定することもできます。これを行うには、`HKEY_CURRENT_USER\Software\ABBYY\FlexiCapture\12.0\DAForms\UseTrainedInvoiceAmounts` レジストリ キーの値を `true` に設定します (既定では、このキーは `false` に設定されています) 。
</Note>

FlexiLayout バリアントが手動で作成されている場合、プログラムはその FlexiLayout バリアントに含まれるすべての field の領域を使用します。その他の field の領域は、汎用 FlexiLayout のマッチング結果から取得されます。

field の領域の検出にどの FlexiLayout が使用されたかという情報は、認識ログに記録されます。

<div id="example">
  ## 例
</div>

Document Definition で定義されている field の一部を例に見てみましょう。

2 つの標準請求書 field、**InvoiceDate** と **InvoiceNumber**、および 2 つのユーザー定義 field、**CustomFieldA** と **CustomFieldB** を考えます。

* **InvoiceDate** と **InvoiceNumber** は標準 field であり、これらの field の検出アルゴリズムは、汎用 FlexiLayout に含まれるメインの FlexiLayout で指定されています。
* **CustomFieldA** と **CustomFieldB** はユーザー定義 field であり、これらの field の検出アルゴリズムは、汎用 FlexiLayout に含まれる追加の FlexiLayout で指定されています。

特定のベンダーの請求書に対する **InvoiceDate** と **CustomFieldB** field の検出品質にオペレーターが満足しておらず、このベンダーの請求書を使ってプログラムを学習させたとします。

このベンダーの請求書では、field 領域は次のようにマージされます。

* **InvoiceNumber** — この領域は、メインの FlexiLayout で得られた結果から取得されます。
* **CustomFieldA** — この領域は、追加の FlexiLayout で得られた結果から取得されます。
* **InvoiceDate** と **CustomFieldB** — これらの領域は、このベンダーの請求書を使ってプログラムを学習させることで生成された FlexiLayout バリアントの結果から取得されます。

他のベンダーの請求書では、field 領域は次のようにマージされます。

* **InvoiceDate** と **InvoiceNumber** — これらの領域は、メインの FlexiLayout で得られた結果から取得されます。
* **CustomFieldA** と **CustomFieldB** — これらの領域は、追加の FlexiLayout で得られた結果から取得されます。
