メインコンテンツへスキップ

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.

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

開始する前に

1

Activity Editor でアクティビティを開く

  1. Activity Editor で “病欠証明書 DE” アクティビティを開きます。
  2. ドキュメントセットからドキュメントを1つ選択します。
2

要素の詳細プロパティを有効にする

要素プロパティの詳細モードが有効になっていることを確認します。このモードを切り替えるには、Properties ペインのアイコンをクリックします。
アップロードされたすべてのドキュメントは事前認識が実行されており、画像上で検出されたオブジェクトを確認すると便利です。アイコンをクリックします (画面サイズの都合でこのアイコンが表示されない場合は、その他アイコンをクリックして Recognized Words を選択します) 。該当するオブジェクトがドキュメント画像上でハイライト表示されます。ハイライトするオブジェクトの種類はいつでも切り替えられます。例えば、段落を探す際は Recognized Lines に切り替えると役立ち、Separators に切り替えるとセパレーター検索要素の設定が容易になります。
検索要素が検索領域の外にある場合は検出されません。ドキュメント画像のコンテキストメニューで Show search area オプションを有効にします。照合結果を評価する際、各要素の検索領域は緑色でハイライト表示されます。
抽出精度を高めるために、検索要素の詳細プロパティを試してみると有効な場合があります。 また、抽出ルールの動作を確認し、セット内の異なるドキュメントで抽出結果を比較するため、頻繁に Match をクリックすることをお勧めします。コンテキストメニューで Match Element をクリックすると、他の要素との関連なしに単一の要素をテストできます。この場合、先行要素の仮説品質は照合結果に影響しません。

患者データの抽出

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

PatientDataArea グループを作成する

  1. Create Element をクリックし、ドロップダウンリストから Group 要素を選択します。名前を “PatientDataArea” に変更します。
  2. Under what conditions セクションで、Element is の値を Optional に変更します。
新しいグループ検索要素は、デフォルトで必須に設定されています。必須の要素が見つからない場合、Activity Editor でエラーが発生し、照合は中止されます。このように設定すると、特定のドキュメントに適さないアクティビティはスキップできます。ただし、このチュートリアルでは、受信するすべてのドキュメントからデータを抽出するアクティビティを作成しているため、グループは任意にする必要があります。
2

Static Text 要素で患者ラベルを見つける

ドイツの文書では、患者の氏名と住所を含む段落は、常に “Name, Vorname …” というラベルの field 内にあります。このテキストを文書上で見つけ、それを基準にして、抽出したいデータを検索します。
  1. Create Element をクリックし、ドロップダウンリストから Static Text 要素を選択します。名前を “kwPatientTitle” に変更します。
  2. Properties ペインの Text to find field に “Name, Vorname” と入力します。
  3. Match をクリックします。処理が完了すると、文書の下に Tree of Hypotheses が表示されます。Advanced Designer が目的の静的テキストを正しく見つけたことを確認してください。要素名の横に緑色の点が表示されていれば、照合成功です。Tree of Hypotheses で要素名をクリックすると、文書上の該当する領域が紫色のフレームで囲まれて表示されます。
要素が見つからなかった場合は、名前の横にオレンジ色の点が表示され、文書画像の該当箇所がオレンジ色のフレームで囲まれます。要素の仮説の品質は、チェーン内の後続要素の状態やチェーン全体の品質に影響する点に注意してください。仮説の品質の詳細については、ドキュメントを参照してください。
3

Separatorを使って下側の境界を特定する

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

氏名と住所が記載された段落を探します

患者データについては、ラベルと区切り線が信頼できる参照要素です。ただし、印字品質が低すぎると、ラベルのテキストが認識されなかったり、区切り線が検出されなかったりすることがあります。良好な抽出結果を得るには、ラベルと区切り線の間にある段落を検索します。段落は均一なテキストブロックであり、境界要素の一部が見つからなかった場合でも正常に検出できます。
  1. Paragraph の search element を作成し、“NameAddressParagraph” という名前を付けます。
  2. Text alignmentLeft に変更します。
  3. 患者データは2行から5行にわたるため、Line count を 2 ~ 5 に指定します。
  4. Where to search セクションの Add メニューを使用して、段落の search area を指定します。この要素は、“kwPatientTitle” 要素の下、“SeparatorBottom” 要素の上に配置する必要があります。
  5. Match をクリックします。
5

PatientGroup を作成する

患者情報を抽出する検索要素をまとめるための、“PatientGroup” という名前の新しいグループ要素を作成します。
6

繰り返しグループ「NameGroup」を設定する

患者の名前は、1 行または 2 行にわたる場合があります。要素の複数のインスタンスを取得するには、繰り返しグループを使用します。
  1. 繰り返しグループ 検索要素を作成し、“NameGroup” という名前を付けます。最大繰り返し回数に 2 を指定します。要素はオプションにします。
  2. 検索範囲を “NameAddressParagraph” 段落に含まれる行のみに制限するには、文書画像の下にある Code Editor アイコンをクリックし、次のスクリプトを Search Conditions セクションの Code Editor に貼り付けます。
    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. 検索結果から住所を除外するには、スクリプト検索条件を追加します。“NameLine” 検索要素を選択し、Search Conditions の Code Editor を開きます。次のスクリプトを貼り付けます。これは、1 行目にカンマと空白が含まれている場合、その行には氏名が含まれていると見なし、氏名が見つかった場合は繰り返しグループが 2 つ目のインスタンスの検索を停止することを前提としています。
    if (NameGroup.HasInstances and LastFound.NameLine.Value.Find(", ") > 0) then DontFind;
    
  9. Match をクリックし、名前が正しく検出されることを確認します。
既定の設定では、どのセットにも含まれない文字を文字列に最大 30% まで含めることができます。これにより、一部の文字が誤って認識された場合や、セットに含まれていない場合 (ダイアクリティカルマーク付き文字など) でも、文字列を検出しやすくなります。この設定は、Properties ペインの Allowed errors の値を変更して調整できます。
7

Address要素を設定する

前のStepで抽出した患者名は、“Name” field にマッピングされます。次に、患者の住所を抽出します。
  1. “PatientGroup” 内に、“NameLine” 要素と同じ文字セット設定を持つ、“Address” という名前の Character String search element を作成します。
  2. コードを使って、その要素の search area を指定します。住所は “NameLine” の下、またはその要素が見つからなかった場合は “NameAddressParagraph” 要素の1行目の下にある必要があります。
    RSA: PatientDataArea.NameAddressParagraph.Rect;
    if NameGroup.HasInstances then
      RSA.Top: Max(RSA.Top, LastFound.NameLine.Rect.Bottom);
    else
      RSA.Top: PatientDataArea.NameAddressParagraph.Lines[0].Rect.Bottom;
    
  3. Search for parts of words オプションを無効にします。
  4. Match をクリックします。
search element の構造は次のようになります。
ドイツの患者データ用の search element 階層: kwPatientTitle、SeparatorBottom、NameAddressParagraph を含む PatientDataArea group と、NameGroup および Address を含む PatientGroup
8

患者のfieldを作成し、マッピングする

Manage Fields ダイアログを開き、対応する field を作成し、以下のように検索要素にマッピングします。
名前検索要素
Name「Patient」グループの Text fieldNameLine
Address「Patient」グループの Text fieldAddress
新しい field 用に自動作成された検索要素を削除します。

病欠証明書の種類の抽出

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

TypeOfSickNoteGroup を作成する

「TypeOfSickNoteGroup」という名前のGroup要素を作成し、この要素を任意にします。
2

PrimaryGroup を設定する

2つのチェックマークの情報を保持するために、「PrimaryGroup」という名前の繰り返しグループ検索要素を作成します。
  1. コードを使用して要素グループの検索範囲を制限します。「PatientGroup」要素の右側かつ「DoctorAreaGroup」要素 (これは後で作成します) より上の範囲です。
    if PatientGroup.Exists then RSA.Left: PatientGroup.NameGroup.NameLine.Rect.Right;
    if DoctorAreaGroup.Exists then RSA.Bottom: DoctorAreaGroup.DataArea.SeparatorTop.Rect.Top;
    
  2. 「kwPrimary」という名前のStatic Text検索要素 (検索するテキスト: 「Erstbescheinigung」) を作成し、必須にします。
  3. 次の設定で「Checkmark」という名前のObject Collection検索要素を作成します: Type Checkmark、Checkmark state Checked、Minimum height 10、Maximum width 20、Maximum height 20。この要素が「kwPrimary」要素の左側にあり、かつ最も近い位置にあるよう指定します。
  4. Match をクリックします。
後で作成する要素 (上の「DoctorAreaGroup」など) を参照する場合は、必ず Exists 条件を指定してください。
3

SecondaryGroup を作成して設定する

  1. 「PrimaryGroup」グループをコピーして貼り付けます。コピーしたグループの名前を「SecondaryGroup」に変更します。このグループは必須です。
  2. その中の「kwPrimary」要素の名前を「kwSecondary」に変更し、検索するテキストを「Folgebescheinigung」に設定します。検索範囲は、「PrimaryGroup」の「kwPrimary」要素の下に指定します。
  3. 「Checkmark」要素の検索範囲を指定します。「kwSecondary」の左側で、かつ最も近い位置です。
  4. Object Collection検索要素は、検索範囲内にある条件に合うすべてのobjectのcollectionを見つけます。チェックマークが同じ行に配置されている場合、「SecondaryGroup」の「Checkmark」要素が Primary のチェックマークも見つけてしまうことがあります。これを避けるため、検索範囲から primary のチェックマークを除外します。
  5. Match をクリックします。
検索要素の構造は次のようになります。
ドイツの病欠証明書の種類に対する検索要素の階層: TypeOfSickNoteGroup に PrimaryGroup と SecondaryGroup が含まれ、それぞれに kwPrimary または kwSecondary のキーワード要素と Checkmark 要素がある
4

病欠証明書の種類のfieldを作成してマッピングする

Manage Fields ウィンドウを開き、対応するfieldを作成して、次のように検索要素にマッピングします。
NameTypeSearch element
病欠証明書の種類チェックマークグループ
Primary「Type of Sick Note」チェックマークグループ内のチェックマークPrimaryGroup -> Checkmark
Secondary「Type of Sick Note」チェックマークグループ内のチェックマークSecondaryGroup -> Checkmark
新しいfield用に自動作成された検索要素を削除します。

医師データの抽出

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

DoctorAreaGroup と DataArea を作成

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

境界を成す 4 つの Separator を追加

医師の情報と署名を含むボックスは、4 本のセパレーターの組み合わせによって構成されています。これらは “kwDoctorTitle” 要素の周囲に配置されています。ただし、“kwDoctorTitle” 要素が見つからなかった場合でもプログラムがボックスを見つけられるように、要素を設定する必要があります。“DataArea” グループ内に、次のプロパティを持つ 4 つの Separator 検索要素を作成します。
NameOrientationMinimum lengthSearch area
SeparatorRightVertical180”kwDoctorTitle” の右側、ページ右端に最も近い位置
SeparatorLeftVertical180”kwDoctorTitle” の左側、“SeparatorRight” の左側 (“kwDoctorTitle” が見つからなかった場合) 、“SeparatorRight” に最も近い位置、“SeparatorRight” の下側 (セパレーター名の右側にあるアイコンをクリックして Top Boundary of Region を選択) 、“SeparatorRight” を除外
SeparatorBottomHorizontal200”kwDoctorTitle” の下側 (-10 ポイントのオフセット付き) 、“SeparatorLeft” の右側、“SeparatorRight” の左側、ページ下端に最も近い位置 (この設定は “kwDoctorTitle” が見つからなかった場合に有用です)
SeparatorTopHorizontal200”kwDoctorTitle” の上側、“SeparatorLeft” の右側、“TypeOfSickNoteGroup” に最も近い位置、“SeparatorBottom” を除外
4 つの要素すべてについて Fits entirely within search area オプションを無効にします。
3

BoxRegion の作成

“BoxRegion” という名前の Region 検索要素を作成し、検索領域を次のように指定します: “SeparatorRight” の左側、“SeparatorLeft” の右側、“SeparatorBottom” の上側、“SeparatorTop” の下側。この領域は 4 本のセパレーターで囲まれた範囲に対応しており、これを使用することで、署名と医師情報の検索領域を手動で指定する必要がなくなります。
4

DoctorGroup を作成する

署名要素と情報要素を格納するために、“DoctorAreaGroup” グループ内に、“DoctorGroup” という名前の新しいグループを作成します。
5

Signature の Object Collection を追加する

医師の署名を検出するために、“DoctorGroup” 内に次の設定を持つ Object Collection 要素を作成します。
PropertyValue
NameSignature
TypePicture
Minimum width15
Minimum height15
Maximum width600
Maximum height350
Search Conditions section of the Code Editor署名はボックスの外側にはみ出している場合があります。画像全体を検出するため、検索領域を各方向に 100 ドット拡張します: RSA: DoctorAreaGroup.DataArea.BoxRegion.Rect.GetInflated(100dot,100dot);
6

DoctorInformation Paragraph の追加

ボックス内のテキスト情報を抽出するには、次の設定を持つ Paragraph 要素を作成します。
PropertyValue
NameDoctorInformation
Maximum line count6
Search area”kwDoctorTitle” の上側、“Signature” を除外
Search Conditions section of the Code EditorRSA: DoctorAreaGroup.DataArea.BoxRegion.Rect;
7

要素が見つかることを確認する

Match をクリックし、要素が正しく検出されていることを確認します。検索要素の構造は次のようになります:
ドイツ語の医師データ用の検索要素階層: kwDoctorTitle と DataArea(4 つの境界 Separator と BoxRegion を含む)を含む DoctorAreaGroup、および Signature と DoctorInformation を含む DoctorGroup
8

医師の field の作成とマッピング

Manage Fields ダイアログを開き、対応する field を作成して、次のように検索要素にマッピングします。
NameTypeSearch element
Doctor Information”Doctor” グループの Text fieldDoctorInformation
Signature”Doctor” グループの Image fieldSignature
新しい field 用に自動的に作成された検索要素を削除します。

アクティビティのテスト

必要な検索要素とfieldをすべて設定しました。すべてのdocumentsを選択し、Match をクリックして Fields タブに切り替え、ドキュメント画像上のfield領域を確認します。ベストパスの仮説に属する場合にのみ、その領域がfieldに渡される点に注意してください。 結果に問題がなければ、ドキュメント画像上部のコピーiconをクリックして、予測ラベリングを参照ラベリングにコピーします。

次のステップ

Step 8. 病欠証明書 BE-NL アクティビティを設定する

オランダとベルギーの病欠証明書向けに、Extraction Rules アクティビティを設定します。

チュートリアルの概要

チュートリアルの概要に戻ります。