准备步骤
- 在 Activity Editor 中打开 “Sick Note DE” 活动。
- 从文档集里选择其中一个文档。
- 确保已启用元素属性的高级模式。要打开或关闭此模式,请单击 Properties 窗格上的图标。
- 所有上传的文档都已完成预先识别,查看在图像上检测到了哪些对象会很有帮助。单击该图标。如果由于屏幕尺寸原因看不到此图标,请单击图标并选择 Recognized Words。对应的对象将在文档图像上高亮显示。您可以随时在不同类型的高亮对象之间切换。例如,当查找段落时,切换到 Recognized Lines 会很有帮助,而切换到 Separators 则有助于配置 Separator 搜索元素。
- 如果搜索元素位于搜索区域之外,将不会被找到。在文档图像的上下文菜单中启用 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” 的新组元素。
- 患者的姓名可能占用一到两行。为了捕获元素的多个实例,我们将使用一个重复组。 a. 创建一个 Repeating Group 搜索元素,并将其命名为 “NameGroup”。将最大重复次数指定为 2。将该元素设为可选。 b. 我们希望搜索属于 “NameAddressParagraph” 段落的行。要将该元素的区域指定为搜索区域,请单击文档图像下方的代码编辑器图标,并在 Search Conditions 区域的 Code Editor 中粘贴以下脚本:
- 在步骤 7 中提取的患者姓名将映射到 “Name” 字段。我们还将提取并映射患者的地址。 a. 在 “PatientGroup” 中,新建一个名为 “Address” 的 Character String 搜索元素,其字符集配置应与 “NameLine” 元素相同。 b. 通过代码为该元素指定搜索区域:地址必须位于 “NameLine” 之下,或者在未找到此元素的情况下,位于 “NameAddressParagraph” 元素第一行的下方。

- 打开 Manage Fields 对话框,创建相应的字段,并按如下方式将其映射到搜索元素:
| 名称 | 类型 | 搜索元素 |
|---|---|---|
| Name | ”Patient” 组中的 Text 字段 | NameLine |
| Address | ”Patient” 组中的 Text 字段 | Address |
- 删除为新字段自动创建的搜索元素。
提取病假条的类型
- 创建一个名为 “TypeOfSickNoteGroup” 的 Group 元素。将该元素设置为可选。
- 为了存储两个勾选状态的信息,创建一个 Repeating Group 搜索元素,并将其命名为 “PrimaryGroup”。 a. 较好的做法是限制该元素组的搜索区域。使用代码指定搜索区域:在 “PatientGroup” 元素的右侧、在(稍后将创建的)“DoctorAreaGroup” 元素的上方。**注意:**在使用尚未创建的元素时,一定要指定 “Exists” 条件。
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” 元素也可能找到主复选标记。为避免这种情况,请将主复选标记(“PrimaryGroup” 的 “Checkmark” 元素)从 “SecondaryGroup” 的 “Checkmark” 元素的搜索区域中排除。 d. 单击 Match。

- 打开 Manage Fields 窗口,创建相应字段并按如下方式将其映射到搜索元素:
| Name | Type | Search element |
|---|---|---|
| Type of Sick Note | Checkmark group | |
| Primary | “Type of Sick Note” 复选标记组中的复选标记 | PrimaryGroup -> Checkmark |
| Secondary | “Type of Sick Note” 复选标记组中的复选标记 | SecondaryGroup -> Checkmark |
- 删除为新字段自动创建的搜索元素。
提取医生数据
- 创建一个名为 “DoctorAreaGroup” 的 Group 元素。将该元素设置为可选。
- 我们要查找的框中包含一个标签。要找到它,请创建一个名为 “kwDoctorTitle” 的 Static Text 元素(要查找的文本:“Unterschrift des Arztes”)。
- 在 “DoctorAreaGroup” 组内,再创建一个名为 “DataArea” 的组。
- 包含医生信息和签名的框是由四条分隔线组合而成的。它们位于 “kwDoctorTitle” 元素的四周。不过,我们应当以一种方式配置这些元素,使程序即使在没有找到 “kwDoctorTitle” 元素的情况下也能找到它们。在 “DataArea” 组中,创建四个具有以下属性的 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 对话框,创建相应字段,并按如下方式将它们映射到搜索元素:
| Name | Type | Search element |
|---|---|---|
| Doctor Information | ”Doctor” 组中的文本字段 | DoctorInformation |
| Signature | ”Doctor” 组中的图像字段 | Signature |
- 删除为新字段自动创建的搜索元素。
