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

# ステップ 7. 病欠証明書 DE アクティビティを設定する

> Static Text、Separator、Paragraph、Object Collection、Region などの検索要素を使用して、ドイツの病欠証明書向けの Extraction Rules アクティビティ を設定します。

ドイツの文書に対する Extraction Rules アクティビティ の設定を続けます。Fast Learning ですでに一部の field は処理されています。このアクティビティでは残りを扱います。

<div id="before-you-begin">
  ## 開始する前に
</div>

<Steps>
  <Step title="Activity Editor でアクティビティを開く">
    1. **Activity Editor** で "病欠証明書 DE" アクティビティを開きます。
    2. ドキュメントセットからドキュメントを1つ選択します。
  </Step>

  <Step title="要素の詳細プロパティを有効にする">
    要素プロパティの詳細モードが有効になっていることを確認します。このモードを切り替えるには、**Properties** ペインのアイコンをクリックします。
  </Step>
</Steps>

<Tip>
  検索要素の設定中に役立つ視覚的な補助手段が 2 つあります:

  * アップロードされたすべてのドキュメントは事前認識が実行されており、画像上で検出されたオブジェクトを確認すると便利です。アイコンをクリックします (画面サイズの都合でこのアイコンが表示されない場合は、その他アイコンをクリックして **Recognized Words** を選択します) 。該当するオブジェクトがドキュメント画像上でハイライト表示されます。ハイライトするオブジェクトの種類はいつでも切り替えられます。例えば、段落を探す際は **Recognized Lines** に切り替えると役立ち、**Separators** に切り替えるとセパレーター検索要素の設定が容易になります。
  * 検索要素が検索領域の外にある場合は検出されません。ドキュメント画像のコンテキストメニューで **Show search area** オプションを有効にします。照合結果を評価する際、各要素の検索領域は緑色でハイライト表示されます。
</Tip>

抽出精度を高めるために、検索要素の詳細プロパティを試してみると有効な場合があります。

抽出ルールの動作を確認し、セット内のドキュメント間で抽出結果を比較するため、頻繁に **Match** をクリックします。コンテキストメニューで **Match Element** をクリックすると、他の要素との関連なしに単一の要素をテストできます。この場合、先行要素の仮説品質は照合結果に影響しません。

<div id="extract-the-patients-data">
  ## 患者データの抽出
</div>

複数の検索要素を作成して、不足している患者データを抽出します。

1 つのエンティティに関連する要素はグループ化します。検索要素は順番に照合されるため、先頭の要素が失敗すると、その後のチェーン全体で仮説の品質が低下します。一方、グループはそれぞれ独自の仮説に基づいて個別に処理されるため、グループ化すると、要素同士の影響を制御しやすくなり、照合結果もひと目で評価できます。グループ化は照合時間の短縮にも役立ちます。

<Steps>
  <Step title="PatientDataArea グループを作成する">
    1. **Create Element** をクリックし、ドロップダウンリストから **Group** 要素を選択します。名前を "PatientDataArea" に変更します。
    2. **Under what conditions** セクションで、**Element is** の値を **Optional** に変更します。

    新しいグループ検索要素は、デフォルトで必須です。必須の要素が見つからない場合、Activity Editor でエラーが発生し、照合は中止されます。このように設定すると、特定のドキュメントに適さないアクティビティはスキップできます。ただし、このチュートリアルでは、アクティビティは受信するすべてのドキュメントからデータを抽出する必要があるため、グループは任意にする必要があります。
  </Step>

  <Step title="Static Text 要素で患者ラベルを見つける">
    ドイツの文書では、患者の氏名と住所を含む段落は、常に "Name, Vorname ..." というラベルの field 内にあります。このテキストを文書上で見つけ、それを基準にして、抽出したいデータを検索します。

    1. **Create Element** をクリックし、ドロップダウンリストから **Static Text** 要素を選択します。名前を "kwPatientTitle" に変更します。
    2. **Properties** ペインの **Text to find** field に "Name, Vorname" と入力します。
    3. **Match** をクリックします。処理が完了すると、文書の下に **Tree of Hypotheses** が表示されます。
    4. Advanced Designer が静的テキストを正しく見つけたことを確認してください。要素名の横に緑色の点が表示されていれば、照合成功です。
    5. **Tree of Hypotheses** で要素名をクリックすると、文書上の該当する領域が紫色のフレームで囲まれて表示されます。

    <Note>
      要素が見つからなかった場合は、名前の横にオレンジ色の点が表示され、文書画像の該当箇所がオレンジ色のフレームで囲まれます。要素の仮説の品質は、チェーン内の後続要素の状態やチェーン全体の品質に影響する点に注意してください。詳細については、[Optimization of Hypothesis Matching](/ja/vantage/documentation/advanced-designer/activities/flexilayout/hypotheses/hypothesis-optimization) を参照してください。
    </Note>
  </Step>

  <Step title="Separatorを使って下側の境界を特定する">
    **Separator** 要素を使用して、患者の氏名と住所を含むセルの下境界を見つけます。

    1. グループに **Separator** 要素を追加し、"SeparatorBottom" という名前を付けます。最小長を 200 に設定します。
    2. 要素を右クリックし、コンテキストメニューから **Match Element** を選択します。**Tree of Hypotheses** には多数の緑色の点が表示されます。これらは、検索条件に一致するさまざまな区切り線に対応しています。各点をクリックすると、画像上の対応するオブジェクトを確認できます。
    3. 検索条件をさらに絞り込むため、区切り線の検索領域を指定します。
       1. **Match** をクリックして、アンカー要素として使用する "kwPatientTitle" 要素を見つけます。
       2. **Properties** ペインの **Where to search** セクションで、**Draw on Image** をクリックします。
       3. ドキュメント上の "kwPatientTitle" 要素を選択し、下向き矢印アイコンをクリックしてキーワードの下側を検索領域として指定します。次に、最も近いアイコンをクリックして、キーワードに最も近い区切り線を検索します。
    4. **Match** をクリックし、Advanced Designer が "kwPatientTitle" 要素の下にある区切り線を検出したことを確認します。
  </Step>

  <Step title="氏名と住所が記載された段落を探します">
    患者データについては、ラベルと区切り線が信頼できる参照要素です。ただし、印字品質が低すぎると、ラベルのテキストが認識されなかったり、区切り線が検出されなかったりすることがあります。良好な抽出結果を得るには、ラベルと区切り線の間にある段落を検索します。段落は均一なテキストブロックであるため、境界要素の一部が欠けていても検出できます。

    1. **Paragraph** の search element を作成し、"NameAddressParagraph" という名前を付けます。
    2. **Text alignment** を **Left** に変更します。
    3. 患者データは2行から5行にわたるため、**Line count** を 2 ～ 5 に指定します。
    4. **Where to search** セクションの **Add** メニューを使用して、段落の search area を指定します。この要素は、"kwPatientTitle" 要素の下、"SeparatorBottom" 要素の上に配置する必要があります。
    5. **Match** をクリックします。
  </Step>

  <Step title="PatientGroup を作成する">
    患者情報を抽出する検索要素をまとめるための、"PatientGroup" という名前の新しいグループ要素を作成します。
  </Step>

  <Step title="繰り返しグループ「NameGroup」を設定する">
    患者の名前は、1 行または 2 行にわたる場合があります。要素の複数のインスタンスを取得するには、繰り返しグループを使用します。

    1. **繰り返しグループ** 検索要素を作成し、"NameGroup" という名前を付けます。最大繰り返し回数に 2 を指定します。要素はオプションにします。
    2. 検索範囲を "NameAddressParagraph" 段落に含まれる行のみに制限するには、文書画像の下にある Code Editor アイコンをクリックし、次のスクリプトを **Search Conditions** セクションの **Code Editor** に貼り付けます。

       ```text theme={null}
       RSA:PatientDataArea.NameAddressParagraph.Rect;
       ```
    3. 繰り返しグループ内に、1 行分の文字列を取得するための **Character String** 要素を作成します。"NameLine" という名前を付けます。
    4. 検索対象のテキストには、ラテン文字の大文字・小文字と、いくつかの句読記号が含まれる場合があります。2 つの文字セットを個別に設定します。
       * 1 つ目のセットには、ラテン文字の大文字と小文字をすべて含めます。ダイアクリティカルマーク付きの文字を追加するには、Unicode サブレンジを変更するか、文字を **Selected characters** field に直接貼り付けます。
       * 2 つ目のセットには、次の句読記号を含めます: ,-.()'. 文字列が句読記号だけにならないように、2 つ目のセットの **Portion in text, %** を 40% に設定します。
    5. **Search for parts of words** オプションを無効にします。
    6. "NameLine" 要素の検索範囲を指定します。"kwPatientTitle" 要素の下で、かつその最も近くに設定します。
    7. **Match** をクリックし、**Tree of Hypotheses** を確認します。2 つの文字列が見つかりますが、2 つ目の文字列には患者の住所が含まれています。
    8. 検索結果から住所を除外するには、スクリプト検索条件を追加します。
       1. "NameLine" 検索要素を選択し、**Search Conditions** の Code Editor を開きます。
       2. 次のスクリプトを貼り付けます。これは、1 行目にカンマと空白が含まれている場合、その行には氏名が含まれていると見なし、氏名が見つかった場合は繰り返しグループが 2 つ目のインスタンスの検索を停止することを前提としています。

          ```text theme={null}
          if (NameGroup.HasInstances and LastFound.NameLine.Value.Find(", ") > 0) then DontFind;
          ```
    9. **Match** をクリックし、名前が正しく検出されることを確認します。

    <Note>
      既定の設定では、どのセットにも含まれない文字を文字列に最大 30% まで含めることができます。これにより、一部の文字が誤って認識された場合や、セットに含まれていない場合 (ダイアクリティカルマーク付き文字など) でも、文字列を検出しやすくなります。この設定は、**Properties** ペインの **Allowed errors** の値を変更して調整できます。
    </Note>
  </Step>

  <Step title="「NameRegion」という Region 要素を作成する">
    繰り返しインスタンスを持つ要素には field をマッピングできないため、"NameGroup" インスタンスのすべての領域を含む補助的な **Region** 要素を作成します。

    1. "PatientGroup" グループに **Region** search element を作成し、"NameRegion" という名前を付けます。
    2. **Code Editor** を開き、次のスクリプトを **Search Conditions** セクションに貼り付けます。

       ```text theme={null}
       RSA: NameGroup.AllInstances.NameLine.Rects;
       ```
  </Step>

  <Step title="AddressRegion という Region 要素を作成する">
    患者の名前はすでに見つかっており、"NameAddressParagraph" 段落の残りの部分が住所です。住所を含む領域を指定するには、"NameAddressParagraph" 領域から "NameGroup" の矩形を除外します。

    "PatientGroup" グループに別の **Region** 要素を作成し、"AddressRegion" に名前を変更して、次のスクリプトを **Search Conditions** セクションの **Code Editor** に貼り付けます。

    ```text theme={null}
    RSA: PatientDataArea.NameAddressParagraph.Rects;
    Exclude: NameGroup.AllInstances.NameLine.Rects;
    ```

    search element の構造は次のようになります。

    <Frame>
      <img src="https://mintcdn.com/abbyy/Bmjdl5TjCaidPxKi/images/vantage/advanced-designer/ad_tutorial_de_patient_structure.png?fit=max&auto=format&n=Bmjdl5TjCaidPxKi&q=85&s=c2502cf31cc439346c77dd3d6ba437b7" alt="ドイツの患者データ用の search element 階層: kwPatientTitle、SeparatorBottom、NameAddressParagraph を含む PatientDataArea group と、NameGroup、NameRegion、および AddressRegion を含む PatientGroup" style={{ width:"38%" }} width="377" height="323" data-path="images/vantage/advanced-designer/ad_tutorial_de_patient_structure.png" />
    </Frame>
  </Step>

  <Step title="患者のfieldを作成し、マッピングする">
    **Manage Fields** ダイアログを開き、対応する field を作成し、以下のように検索要素にマッピングします。

    | 名前        | 型                         | 検索要素          |
    | :-------- | :------------------------ | :------------ |
    | Full Name | 「Patient」グループの Text field | NameRegion    |
    | Address   | 「Patient」グループの Text field | AddressRegion |

    新しい field 用に自動作成された検索要素を削除します。
  </Step>
</Steps>

<div id="extract-the-type-of-sick-note">
  ## 病欠証明書の種類を抽出する
</div>

病欠証明書の種類のfieldには、2つのチェックボックスがあります。ラベルは「Erstbescheinigung」と「Folgebescheinigung」です。ここでの作業は、これらのラベルを見つけ、その横にチェック済みのチェックマークがあるかどうかを確認することです。

<Steps>
  <Step title="TypeOfSickNoteGroup と PrimaryGroup を作成する">
    「TypeOfSickNoteGroup」グループを作成します。その中に「PrimaryGroup」グループを作成します。両方のグループを任意にします。
  </Step>

  <Step title="PrimaryGroup を設定する">
    1. 「PrimaryGroup」グループ内に、「kwCheckmark」という名前の**Static Text**要素 (検索するテキスト: 「Erstbescheinigung」) を作成します。
    2. この要素は、前に検索した要素とは関係ありません。要素ツリー全体をマッチングする代わりに、「kwCheckmark」要素のコンテキストメニューで **Match Element** をクリックして、新しい要素だけをマッチングします。キーワードが正しく見つかっていることを確認してください。
    3. 次に、チェックマーク、バーコード、画像などのさまざまなグラフィックobjectを見つけるために使用される**Object Collection**要素を使って、チェックマークを見つけます。
       * 「Checkmark」という名前の**Object Collection**要素を追加します。
       * **Properties** ペインの **Type** ドロップダウンリストで、**Checkmark** 以外のすべてのオプションを選択解除します。
       * objectの最小の幅と高さを 30 に、最大の幅と高さを 130 に設定します。
       * チェックマークの検索領域を「kwCheckmark」要素の左側に指定します。
       * チェックマークは、キーワードとほぼ同じ行にある必要があります。次のコードを **Code Editor** の **Search Conditions** セクションに貼り付けて、要素の上端と下端の境界がキーワードに対してどこに位置するかを指定します。

         ```text theme={null}
         RSA: TopBound > kwCheckmark.Top - 50dot;
         RSA: BottomBound < kwCheckmark.Bottom + 50dot;
         ```
       * **Match** をクリックします。
  </Step>

  <Step title="SecondaryGroup を作成して設定する">
    1. 「PrimaryGroup」グループをコピーし、コピーの名前を「SecondaryGroup」に変更します。
    2. グループをコピーすると、そのプロパティとともにすべての要素もコピーされます。「SecondaryGroup」グループの「kwCheckmark」要素を選択し、検索するテキストを「Folgebescheinigung」に変更します。
    3. **Object Collection**検索要素は、検索範囲内にある条件に合うすべてのobjectのcollectionを見つけます。チェックマークが同じ行に配置されている場合、「SecondaryGroup」の「Checkmark」要素が Primary のチェックマークも見つけてしまうことがあります。これを避けるため、「SecondaryGroup」の「Checkmark」要素の検索領域から primary のチェックマーク (「PrimaryGroup」の「Checkmark」要素) を除外します。
    4. **Match** をクリックします。

    検索要素の構造は次のようになります。

    <Frame>
      <img src="https://mintcdn.com/abbyy/Bmjdl5TjCaidPxKi/images/vantage/advanced-designer/ad_tutorial_de_typeofsicknote_structure.png?fit=max&auto=format&n=Bmjdl5TjCaidPxKi&q=85&s=1c22006d8c0ccf5729e63d0b75a9b256" alt="ドイツの病欠証明書の種類に対する検索要素の階層: TypeOfSickNoteGroup に PrimaryGroup と SecondaryGroup が含まれ、それぞれに kwCheckmark のキーワード要素と Checkmark 要素がある" style={{ width:"32%" }} width="377" height="248" data-path="images/vantage/advanced-designer/ad_tutorial_de_typeofsicknote_structure.png" />
    </Frame>
  </Step>

  <Step title="病欠証明書の種類のfieldを作成してマッピングする">
    **Manage Fields** ウィンドウを開き、対応するfieldを作成して、次のように検索要素にマッピングします。

    | Name      | Type                                    | Search element              |
    | :-------- | :-------------------------------------- | :-------------------------- |
    | 病欠証明書の種類  | チェックマークグループ                             |                             |
    | Primary   | 「Type of Sick Note」チェックマークグループ内のチェックマーク | PrimaryGroup -> Checkmark   |
    | Secondary | 「Type of Sick Note」チェックマークグループ内のチェックマーク | SecondaryGroup -> Checkmark |

    新しいfield用に自動作成された検索要素を削除します。
  </Step>
</Steps>

<div id="extract-the-doctors-data">
  ## 医師データの抽出
</div>

これらのドキュメントの最後のデータブロックには、医師のデータと署名が含まれています。まずデータが入っているボックスを見つけ、その中から医師の情報が記載された段落と、署名が含まれる画像領域を抽出します。

<Steps>
  <Step title="DoctorAreaGroup と DataArea を作成">
    1. "DoctorAreaGroup" という名前の **Group** 要素を作成します。この要素は任意とします。
    2. 探すボックスにはラベルが含まれています。これを見つけるために、"kwDoctorTitle" という名前の **Static Text** 要素を作成します (検索するテキスト: "Unterschrift des Arztes") 。
    3. "DoctorAreaGroup" グループの中に、"DataArea" という名前のグループをもう 1 つ作成します。
  </Step>

  <Step title="境界を成す 4 つの Separator を追加">
    医師の情報と署名を含むボックスは、4 本のセパレーターの組み合わせによって構成されています。これらは "kwDoctorTitle" 要素の周囲に配置されています。ただし、"kwDoctorTitle" 要素が見つからなかった場合でも Advanced Designer がボックスを見つけられるように、要素を設定する必要があります。

    "DataArea" グループ内に、次のプロパティを持つ 4 つの **Separator** 検索要素を作成します。

    | Name            | Orientation | Minimum length | Search area                                                                                                                                                                                           |
    | :-------------- | :---------- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | SeparatorRight  | Vertical    | 180            | "kwDoctorTitle" の右側、ページ右端に最も近い位置                                                                                                                                                                      |
    | SeparatorLeft   | Vertical    | 180            | "kwDoctorTitle" の左側、"SeparatorRight" の左側 ("kwDoctorTitle" が見つからなかった場合) 、"SeparatorRight" に最も近い位置、"SeparatorRight" の下側 (セパレーター名の右側にあるアイコンをクリックして **Top Boundary of Region** を選択) 、"SeparatorRight" を除外 |
    | SeparatorBottom | Horizontal  | 200            | "kwDoctorTitle" の下側 (-10 ポイントのオフセット付き) 、"SeparatorLeft" の右側、"SeparatorRight" の左側、ページ下端に最も近い位置 (この設定は "kwDoctorTitle" が見つからなかった場合に有用です)                                                                |
    | SeparatorTop    | Horizontal  | 200            | "kwDoctorTitle" の上側、"SeparatorLeft" の右側、"TypeOfSickNoteGroup" に最も近い位置、"SeparatorBottom" を除外                                                                                                           |

    4 つの要素すべてについて **Fits entirely within search area** オプションを無効にします。
  </Step>

  <Step title="BoxRegion の作成">
    "BoxRegion" という名前の **Region** 検索要素を作成し、検索領域を次のように指定します: "SeparatorRight" の左側、"SeparatorLeft" の右側、"SeparatorBottom" の上側、"SeparatorTop" の下側。

    この領域は 4 本のセパレーターで囲まれた範囲に対応しており、これを使用することで、署名と医師情報の検索領域を手動で指定する必要がなくなります。
  </Step>

  <Step title="DoctorGroup を作成する">
    署名要素と情報要素を格納するために、"DoctorAreaGroup" グループ内に、"DoctorGroup" という名前の新しいグループを作成します。
  </Step>

  <Step title="Signature の Object Collection を追加する">
    医師の署名を検出するために、"DoctorGroup" 内に次の設定を持つ **Object Collection** 要素を作成します。

    | Property                                         | Value                                                                                                                                    |
    | :----------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |
    | Name                                             | Signature                                                                                                                                |
    | Type                                             | Picture                                                                                                                                  |
    | Minimum width                                    | 15                                                                                                                                       |
    | Minimum height                                   | 15                                                                                                                                       |
    | Maximum width                                    | 600                                                                                                                                      |
    | Maximum height                                   | 350                                                                                                                                      |
    | **Search Conditions** section of the Code Editor | 署名はボックスの外側にはみ出している場合があります。画像全体を検出するため、検索領域を各方向に 100 ドット拡張します: `RSA: DoctorAreaGroup.DataArea.BoxRegion.Rect.GetInflated(100dot,100dot);` |
  </Step>

  <Step title="DoctorInformation Paragraph の追加">
    ボックス内のテキスト情報を抽出するには、次の設定を持つ **Paragraph** 要素を作成します。

    | Property                                         | Value                                           |
    | :----------------------------------------------- | :---------------------------------------------- |
    | Name                                             | DoctorInformation                               |
    | Maximum line count                               | 6                                               |
    | Search area                                      | "kwDoctorTitle" の上側、"Signature" を除外             |
    | **Search Conditions** section of the Code Editor | `RSA: DoctorAreaGroup.DataArea.BoxRegion.Rect;` |
  </Step>

  <Step title="要素が見つかることを確認する">
    **Match** をクリックし、要素が正しく検出されていることを確認します。

    検索要素の構造は次のようになります:

    <Frame>
      <img src="https://mintcdn.com/abbyy/Bmjdl5TjCaidPxKi/images/vantage/advanced-designer/ad_tutorial_de_doctor_structure.png?fit=max&auto=format&n=Bmjdl5TjCaidPxKi&q=85&s=45b4ef041ef8b451aa97e4dcf9f32c28" alt="ドイツ語の医師データ用の検索要素階層: kwDoctorTitle と DataArea（4 つの境界 Separator と BoxRegion を含む）を含む DoctorAreaGroup、および Signature と DoctorInformation を含む DoctorGroup" style={{ width:"32%" }} width="379" height="395" data-path="images/vantage/advanced-designer/ad_tutorial_de_doctor_structure.png" />
    </Frame>
  </Step>

  <Step title="医師の field の作成とマッピング">
    **Manage Fields** ダイアログを開き、対応する field を作成して、次のように検索要素にマッピングします。

    | Name               | Type                       | Search element    |
    | :----------------- | :------------------------- | :---------------- |
    | Doctor Information | "Doctor" グループの Text field  | DoctorInformation |
    | Signature          | "Doctor" グループの Image field | Signature         |

    新しい field 用に自動的に作成された検索要素を削除します。
  </Step>
</Steps>

<div id="test-the-activity">
  ## アクティビティをテストする
</div>

必要な検索要素とfieldをすべて設定しました。すべてのdocumentsを選択し、**Match** をクリックして **Fields** タブに切り替え、ドキュメント画像上のfield領域を確認します。ベストパスの仮説に属する場合にのみ、その領域がfieldに渡される点に注意してください。

結果に問題がなければ、ドキュメント画像上部のコピーiconをクリックして、予測ラベリングを参照ラベリングにコピーします。

<div id="whats-next">
  ## 次のステップ
</div>

<CardGroup cols={2}>
  <Card title="Step 8. 病欠証明書 BE-NL アクティビティを設定する" icon="arrow-right" href="/ja/vantage/documentation/advanced-designer/tutorial/tutorial-step-8">
    オランダとベルギーの病欠証明書向けに、Extraction Rules アクティビティを設定します。
  </Card>

  <Card title="チュートリアルの概要" icon="circle-info" href="/ja/vantage/documentation/advanced-designer/tutorial/tutorial">
    チュートリアルの概要に戻ります。
  </Card>
</CardGroup>
