開始する前に
- Activity Editor で “Sick Note DE” アクティビティを開きます。
- ドキュメントセットからドキュメントを1つ選択します。
- 要素プロパティの詳細モードが有効になっていることを確認します。このモードを切り替えるには、Properties ペインのアイコンをクリックします。
- アップロードされたすべてのドキュメントは事前認識が実行されており、画像上で検出されたオブジェクトを確認すると便利です。アイコンをクリックします。画面サイズの都合でこのアイコンが表示されない場合は、アイコンをクリックして Recognized Words を選択します。該当するオブジェクトがドキュメント画像上でハイライト表示されます。ハイライトするオブジェクトの種類はいつでも切り替えられます。例えば、段落を探す際は Recognized Lines に切り替えると役立ち、Separators に切り替えるとセパレーター検索要素の設定が容易になります。
- 検索要素が検索領域の外にある場合は検出されません。ドキュメント画像のコンテキストメニューで Show search area オプションを有効にします。照合結果を評価する際、各要素の検索領域は緑色でハイライト表示されます。
患者のデータの抽出
- Create Elementをクリックし、ドロップダウンリストからGroup要素を選択します。名前を”PatientDataArea”に変更します。
- 新しいグループ検索要素は、既定で必須に設定されています。必須要素が見つからない場合、Activity Editorはエラーになり、照合は中止されます。この動作により、特定のドキュメントに適していないアクティビティをスキップできます。ただし、このチュートリアルではすべての受信ドキュメントからデータを抽出するアクティビティを作成しているため、グループはオプションにしたいと考えています。Under what conditionsセクションで、Element isの値をOptionalに変更します。
- 患者の氏名と住所を含む段落を見つけて抽出したいと考えています。ドイツ語のドキュメントでは、探している段落は常に”Name, Vorname … “というラベルの付いたフィールド内にあります。ドキュメント上でこのテキストを見つけ、抽出したいデータを検索するための基準として使用する必要があります。
a. キーワードはStatic Text検索要素を使用して見つけることができます。Create Elementをクリックし、ドロップダウンリストからStatic Text要素を選択します。名前を”kwPatientTitle”に変更します。
b. PropertiesペインのText to findフィールドに”Name, Vorname”というテキストを入力します。
c. Matchをクリックします。処理が完了すると、ドキュメントの下にTree of Hypothesesが表示されます。Advanced Designerが目的の静的テキストを正常に見つけたことを確認します。要素名の横に緑の点が表示されていれば、対応する要素がドキュメント上で正常に見つかったことを示します。Tree of Hypothesesで要素名をクリックすると、ドキュメント上の対応する領域の周囲に紫色の枠が表示されます。
要素が見つからなかった場合は、その名前の横にオレンジ色の点が表示され、ドキュメント画像の周囲にオレンジ色の枠が表示されます。要素の仮説品質は、チェーン内の後続要素の状態とチェーン全体の品質に影響することを覚えておいてください。仮説品質の詳細については、ドキュメントを参照してください。
- 次に、患者の氏名と住所を含むセルの下側の境界を見つけます。これはSeparator要素を使用して行います。
a. グループにSeparator要素を追加し、“SeparatorBottom”という名前を付けます。最小長を200に設定します。
b. 要素を右クリックし、コンテキストメニューでMatch Elementを選択します。Tree of Hypothesesに多数の緑の点が表示されます。これらは、検索条件に一致するさまざまなセパレーターに対応しています。各点をクリックすると、画像上の対応するオブジェクトを確認できます。
c. 検索条件を絞り込むため、セパレーターの検索領域を指定します。Matchをクリックして、アンカー要素として使用する”kwPatientTitle”要素を見つけます。PropertiesペインのWhere to searchセクションで、Draw on Imageをクリックします。ドキュメント上で”kwPatientTitle”要素を選択し、下向き矢印アイコンをクリックしてキーワードの下側を検索領域として指定し、さらに最寄りのアイコンを選択して、キーワードに最も近いセパレーターを探します。アンカー要素の詳細については、ドキュメントを参照してください。
d. Matchをクリックし、Advanced Designerが”kwPatientTitle”要素の下にあるセパレーターを見つけたことを確認します。Tree of Hypothesesセクションで各要素名をクリックすると、その仮説を確認できます。 - ラベルとセパレーターは、患者データの信頼できる参照要素です。ただし、印刷品質が低すぎると、ラベルのテキストが認識されなかったり、セパレーターが見つからなかったりする可能性があります。良好な抽出結果を確保するため、ラベルとセパレーターの間にある段落を検索します。段落は均一なテキストブロックであるため、一部の境界要素が見つからなかった場合でも、正常に見つけることができます。
a. Paragraph検索要素を作成し、“NameAddressParagraph”という名前を付けます。
b. Text alignmentをLeftに変更します。
c. 患者データは2行から5行を占めるため、Line countを2から5に指定します。
d. 段落の検索領域を指定します。今回は、Where to searchセクションのAddメニューを使用します。要素は”kwPatientTitle”要素の下で、“SeparatorBottom”要素の上に位置する必要があります。
e. Matchをクリックします。 - 次に、患者データを抽出します。“PatientGroup”という名前の新しいグループ要素を作成します。
- 患者の氏名は1行または2行になることがあります。要素の複数のインスタンスを取得するため、繰り返しグループを使用します。
a. Repeating Group検索要素を作成し、“NameGroup”という名前を付けます。最大繰り返し数として2を指定します。要素をオプションにします。
b. “NameAddressParagraph”段落の一部である行を検索したいので、要素の領域を検索領域として指定します。そのためには、ドキュメント画像の下にあるコードエディターアイコンをクリックし、Code EditorのSearch Conditionsセクションに次のスクリプトを貼り付けます。
d. 検索対象のテキストには、大文字と小文字のラテン文字に加え、氏名に現れる可能性のある一連の句読記号が含まれる場合があります。2つの別個の文字セットを構成します。1つ目のセットには、すべてのラテン大文字および小文字を含めます。ダイアクリティカルマーク付きの文字を追加するには、Unicodeサブレンジを変更するか、Selected charactersフィールドに文字を直接貼り付けます。
e. もう1つのセットには、次の句読記号を含めます: ,-.()’. 文字列に句読記号だけが含まれることは避けたいため、2つ目のセットの**Portion in text, %**を40%に設定します。このプロパティは、特定のセットに属する文字の最大許容割合を定義します。
既定の設定では、どのセットにも含まれない文字を文字列に最大30%まで含めることができます。これにより、一部の文字が誤って認識された場合や、セットに含まれていない場合(ダイアクリティカルマーク付きの文字など)でも、文字列を見つけやすくなります。この設定は、PropertiesペインのAllowed errors値を変更して調整できます。
g. “NameLine”要素の検索領域を指定します。“kwPatientTitle”要素の下で、かつそれに最も近い位置です。
h. Matchをクリックし、Tree of Hypothesesを確認します。2つの文字列が見つかっていることが分かります。ただし、2つ目の文字列には患者の住所が含まれています。
i. 検索結果から住所を除外するため、最初の文字列に名と姓の両方が含まれているかどうかを確認します。これは、簡単なスクリプト検索条件を追加することで実現できます。“NameLine”検索要素を選択し、Search Conditionsコードエディターを開きます。
j. 1行目にカンマと空白が含まれていれば、その行にはフルネームが含まれているとみなします。フルネームが含まれている場合は、繰り返しグループの2つ目のインスタンスを検索したくありません。エディターに次のスクリプトを貼り付けます:
- 手順7で抽出した患者の氏名は、“Name”フィールドにマッピングされます。患者の住所も抽出してマッピングします。
a. “PatientGroup”内に、“NameLine”要素と同じ文字セット構成を持つ”Address”という名前のCharacter String検索要素を作成します。
b. コードを使用して要素の検索領域を指定します。住所は”NameLine”の下、またはこの要素が見つからなかった場合は”NameAddressParagraph”要素の最初の行の下にある必要があります。
d. Matchをクリックします。 検索要素の構造は次のようになります。

- Manage Fieldsダイアログを開き、対応するフィールドを作成し、次のように検索要素にマッピングします。
| Name | Type | Search element |
|---|---|---|
| Name | ”Patient”グループ内のText field | NameLine |
| Address | ”Patient”グループ内のText field | Address |
- 新しいフィールド用に自動的に作成された検索要素を削除します。
疾病証明書の種類の抽出
- “TypeOfSickNoteGroup”という名前のGroup要素を作成します。要素はオプションにします。
- 2つのチェックマークに関する情報を保存するため、Repeating Group検索要素を作成し、“PrimaryGroup”という名前を付けます。
a. 要素グループの検索領域を制限するのは良い方法です。コードを使って検索領域を指定します。“PatientGroup”要素の右側で、“DoctorAreaGroup”要素(これは後で作成します)の上です。 **Note: **将来の要素を使用する場合は、必ず”Exists”条件を指定してください。
c. “Checkmark”という名前のObject Collection検索要素を、次の設定で作成します: Type:
Checkmark, Checkmark state: Checked, Minimum height: 10, Maximum width: 20, Maximum height: 20。この要素が”kwPrimary”要素の左側にあり、かつそれに最も近いことを指定します。 d. Matchをクリックします。
- “PrimaryGroup”グループをコピーして貼り付けます。コピーしたグループの名前を”SecondaryGroup”に変更します。このグループは必須にします。
- “SecondaryGroup”を編集します。
a. “kwPrimary”要素の名前を”kwSecondary”に変更し、検索するテキストを”Folgebescheinigung”に設定します。検索領域として、“PrimaryGroup”の”kwPrimary”要素の下を指定します。
b. “Checkmark”要素の検索領域として、“kwSecondary”の左側で、かつそれに最も近い位置を指定します。
c. Object Collection検索要素は、検索領域内にある条件に適合するすべてのオブジェクトのコレクションを見つけます。チェックマークが同じ行にある場合、“SecondaryGroup”の”Checkmark”要素がPrimaryのチェックマークも見つけてしまう可能性があります。これを避けるには、“SecondaryGroup”の”Checkmark”要素の検索領域から、Primaryのチェックマーク(“PrimaryGroup”の”Checkmark”要素)を除外します。
d. Matchをクリックします。

- Manage Fieldsウィンドウを開き、対応するフィールドを作成して、次のように検索要素にマッピングします。
| Name | Type | Search element |
|---|---|---|
| Type of Sick Note | Checkmark group | |
| Primary | ”Type of Sick Note”チェックマークグループ内のCheckmark | PrimaryGroup -> Checkmark |
| Secondary | ”Type of Sick Note”チェックマークグループ内のCheckmark | SecondaryGroup -> Checkmark |
- 新しいフィールド用に自動的に作成された検索要素を削除します。
医師データの抽出
- “DoctorAreaGroup” という名前の Group 要素を作成します。この要素は任意とします。
- 探すボックスにはラベルが含まれています。これを見つけるために、“kwDoctorTitle” という名前の Static Text 要素を作成します (検索するテキスト: “Unterschrift des Arztes”) 。
- “DoctorAreaGroup” グループの中に、“DataArea” という名前のグループをもう 1 つ作成します。
- 医師の情報と署名を含むボックスは、4 本のセパレーターの組み合わせによって構成されています。これらは “kwDoctorTitle” 要素の周囲に配置されています。ただし、“kwDoctorTitle” 要素が見つからなかった場合でもプログラムがボックスを見つけられるように、要素を設定する必要があります。“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” を除外 |
- 医師の署名および医師情報の検索領域を、見つかったセパレーターに基づいて手動で指定することもできますが、その代わりに、セパレーターで囲まれた領域に対応する Region 要素を作成します。“BoxRegion” という名前の Region 検索要素を作成し、検索領域を次のように指定します: “SeparatorRight” の左側、“SeparatorLeft” の右側、“SeparatorBottom” の上側、“SeparatorTop” の下側。
- “DoctorGroup” という名前の新しいグループを作成します。
- 医師の署名を検出するために、“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); |
- ボックス内のテキスト情報を抽出するには、次の設定を持つ 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; |
- Match をクリックし、要素が正しく検出されていることを確認します。

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