跳转到主要内容
我们已经开始从这些德文文档中提取数据,因此我们将首先为这些文档配置 Extraction Rules 活动。

准备步骤

  1. Activity Editor 中打开 “Sick Note DE” 活动。
  2. 从文档集里选择其中一个文档。
  3. 确保已启用元素属性的高级模式。要打开或关闭此模式,请单击 Properties 窗格上的图标。
  4. 所有上传的文档都已完成预先识别,查看在图像上检测到了哪些对象会很有帮助。单击该图标。如果由于屏幕尺寸原因看不到此图标,请单击图标并选择 Recognized Words。对应的对象将在文档图像上高亮显示。您可以随时在不同类型的高亮对象之间切换。例如,当查找段落时,切换到 Recognized Lines 会很有帮助,而切换到 Separators 则有助于配置 Separator 搜索元素。
  5. 如果搜索元素位于搜索区域之外,将不会被找到。在文档图像的上下文菜单中启用 Show search area 选项。当您评估匹配结果时,每个元素的搜索区域将以绿色高亮显示。
请记住,尝试调整搜索元素的高级属性可能有助于提高提取准确性。 我们也建议您经常单击 Match,以检查提取规则的效果,并比较集合中不同文档的提取结果。您可以通过在其上下文菜单中单击 Match Element 来仅测试单个元素,而不考虑其与其他元素的关系。在这种情况下,前面元素的假设质量不会影响匹配结果。

提取患者数据

首先,我们来提取患者缺失的数据。为此,我们需要创建若干搜索元素。 建议将与同一实体相关的所有元素分组。元素会依次匹配,如果未能找到最前面的元素,将会降低后续元素的假设质量。与此同时,各搜索元素组在匹配过程中彼此独立处理,并且会为每个组分别形成一个假设。由此,你可以控制各元素之间的相互影响。你还可以通过查看组内元素是否已成功找到,一目了然地评估匹配结果。最后,对元素进行分组还有助于缩短匹配时间。
  1. 单击 Create Element,并在下拉列表中选择 Group 元素。将其名称更改为 “PatientDataArea”。
  2. 新建的组搜索元素默认设置为必需元素。如果未找到必需元素,Activity Editor 将出现错误并中止匹配。这种机制允许在活动不适用于某些文档时跳过这些活动。不过,在本教程中,我们要创建一个从所有传入文档中提取数据的活动,因此希望该组为可选元素。在 Under what conditions 部分,将 Element is 的值更改为 Optional
  3. 我们要找到包含患者姓名和地址的段落。在德语文档中,我们要查找的该段落始终位于标签为 “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 中单击该元素名称,你将在文档上看到对应区域周围出现紫色框。
注意: 如果未找到某个元素,你会在其名称旁边看到一个橙色圆点,并在文档图像周围看到一个橙色框。请记住,某个元素的假设质量会影响链中后续元素的状态以及整条链的总体质量。你可以在文档中查阅有关假设质量的详细信息。
  1. 现在来查找包含患者姓名和地址的单元格的下边界。我们将使用一个 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 部分单击每个元素的名称来检查对应的假设。
  2. 标签和分隔线是患者数据的可靠参考元素。但是,如果打印质量过低,则有可能无法识别标签文本或找不到分隔线。为了确保较好的提取效果,我们将搜索位于标签和分隔线之间的段落。段落是一个内容统一的文本块,这意味着即使未找到某些边界元素,也仍然能够成功找到该段落。 a. 创建一个 Paragraph 搜索元素,并将其命名为 “NameAddressParagraph”。 b. 将 Text alignment 更改为 Left。 c. 患者数据占用 2 到 5 行,因此在 Line count 中指定从 2 到 5。 d. 为该段落指定搜索区域。这一次,你应在 Where to search 部分使用 Add 菜单。该元素应位于 “kwPatientTitle” 元素下方且 “SeparatorBottom” 元素上方。 e. 单击 Match
  3. 现在我们要提取患者的数据。创建一个名为 “PatientGroup” 的新组元素。
  4. 患者的姓名可能占用一到两行。为了捕获元素的多个实例,我们将使用一个重复组。 a. 创建一个 Repeating Group 搜索元素,并将其命名为 “NameGroup”。将最大重复次数指定为 2。将该元素设为可选。 b. 我们希望搜索属于 “NameAddressParagraph” 段落的行。要将该元素的区域指定为搜索区域,请单击文档图像下方的代码编辑器图标,并在 Search Conditions 区域的 Code Editor 中粘贴以下脚本:
RSA:PatientDataArea.NameAddressParagraph.Rect;
c. 在重复组内创建一个用于捕获一行字符的 Character String 元素,并将其命名为 “NameLine”。 d. 我们要查找的文本可能包含大写和小写字母,以及名称中可能出现的一组标点符号。请配置两个单独的字符集。第一个字符集应包含所有拉丁大写和小写字母。若要添加带变音符号的字符,请更改 Unicode 子范围,或将字符直接粘贴到 选定字符 字段中。 e. 另一个字符集应包含以下标点符号: ,-.()’. 我们不希望该字符串只包含标点符号,因此将第二个字符集的 文本中的比例, % 设置为 40%。此属性定义来自某个字符集的字符所允许的最大百分比。 注意: 默认设置允许该字符串最多包含 30% 不属于任何字符集的字符。即使某些字符被错误识别或未包含在字符集中(例如带变音符号的字符),这也有助于仍然找到这些字符串。您可以通过在 属性 窗格中更改 允许的错误 值来调整此设置。 f. 禁用 Search for parts of words 选项。 g. 为 “NameLine” 元素指定搜索区域:位于 “kwPatientTitle” 元素下方,且距离其最近的位置。 h. 单击 Match 并查看 Tree of Hypotheses。你会看到找到两个字符串。但是,第二个字符串包含的是患者的地址。 i. 为了在搜索结果中排除该地址,我们将检查第一个字符串是否同时包含名字和姓氏。这可以通过添加一个简单的脚本搜索条件来实现。选择 “NameLine” 搜索元素并打开 Search Conditions 代码编辑器。 j. 我们假设,如果第一行同时包含逗号和空格,则该行包含全名。如果它包含全名,我们就不希望再搜索重复组的第二个实例。将以下脚本粘贴到编辑器中:
if (NameGroup.HasInstances and LastFound.NameLine.Value.Find(", ") > 0) then DontFind;
k. 点击 Match,并确保正确找到该名称。
  1. 在步骤 7 中提取的患者姓名将映射到 “Name” 字段。我们还将提取并映射患者的地址。 a. 在 “PatientGroup” 中,新建一个名为 “Address” 的 Character String 搜索元素,其字符集配置应与 “NameLine” 元素相同。 b. 通过代码为该元素指定搜索区域:地址必须位于 “NameLine” 之下,或者在未找到此元素的情况下,位于 “NameAddressParagraph” 元素第一行的下方。
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;
c. 禁用 Search for parts of words 选项。d. 单击 Match 搜索元素的结构应如下所示: AD_Tutorial_DE_Patient_Structure
  1. 打开 Manage Fields 对话框,创建相应的字段,并按如下方式将其映射到搜索元素:
名称类型搜索元素
Name”Patient” 组中的 Text 字段NameLine
Address”Patient” 组中的 Text 字段Address
  1. 删除为新字段自动创建的搜索元素。

提取病假条的类型

病假条类型字段有两个复选框。它们的标签为 “Erstbescheinigung” 和 “Folgebescheinigung”。任务是找到这些标签,然后检查它们旁边的复选框是否被勾选。
  1. 创建一个名为 “TypeOfSickNoteGroup” 的 Group 元素。将该元素设置为可选。
  2. 为了存储两个勾选状态的信息,创建一个 Repeating Group 搜索元素,并将其命名为 “PrimaryGroup”。 a. 较好的做法是限制该元素组的搜索区域。使用代码指定搜索区域:在 “PatientGroup” 元素的右侧、在(稍后将创建的)“DoctorAreaGroup” 元素的上方。**注意:**在使用尚未创建的元素时,一定要指定 “Exists” 条件。
if PatientGroup.Exists then RSA.Left: PatientGroup.NameGroup.NameLine.Rect.Right;
if DoctorAreaGroup.Exists then RSA.Bottom: DoctorAreaGroup.DataArea.SeparatorTop.Rect.Top;
b. 创建一个名为 “kwPrimary” 的 Static Text 搜索元素(要查找的文本:“Erstbescheinigung”),并将其设为必需。 c. 创建一个名为 “Checkmark” 的 Object Collection 搜索元素,设置如下:Type:Checkmark,Checkmark state:Checked,Minimum height:10,Maximum width:20,Maximum height:20。指定该元素位于 “kwPrimary” 元素的左侧且与之最近。 d. 单击 Match
  1. 复制并粘贴 “PrimaryGroup” 组,将复制的组重命名为 “SecondaryGroup”。将该组设为必需。
  2. 编辑 “SecondaryGroup”。 a. 将 “kwPrimary” 元素重命名为 “kwSecondary”,并将要查找的文本设置为 “Folgebescheinigung”。指定搜索区域:位于 “PrimaryGroup” 中 “kwPrimary” 元素的下方。 b. 为 “Checkmark” 元素指定搜索区域:位于 “kwSecondary” 的左侧且与之最近。 c. Object Collection 搜索元素会在搜索区域内找到所有合适对象的集合。如果复选标记位于同一行,“SecondaryGroup” 的 “Checkmark” 元素也可能找到主复选标记。为避免这种情况,请将主复选标记(“PrimaryGroup” 的 “Checkmark” 元素)从 “SecondaryGroup” 的 “Checkmark” 元素的搜索区域中排除。 d. 单击 Match
搜索元素结构应如下所示: AD_Tutorial_DE_TypeOfSickNote_Structure
  1. 打开 Manage Fields 窗口,创建相应字段并按如下方式将其映射到搜索元素:
NameTypeSearch element
Type of Sick NoteCheckmark group
Primary“Type of Sick Note” 复选标记组中的复选标记PrimaryGroup -> Checkmark
Secondary“Type of Sick Note” 复选标记组中的复选标记SecondaryGroup -> Checkmark
  1. 删除为新字段自动创建的搜索元素。

提取医生数据

现在我们需要处理这些文档上的最后一块数据块。它包含医生的信息和签名。我们将先找到包含这些数据的框区域,然后提取一个包含医生信息的段落,以及一个包含签名的图像区域。
  1. 创建一个名为 “DoctorAreaGroup” 的 Group 元素。将该元素设置为可选。
  2. 我们要查找的框中包含一个标签。要找到它,请创建一个名为 “kwDoctorTitle” 的 Static Text 元素(要查找的文本:“Unterschrift des Arztes”)。
  3. 在 “DoctorAreaGroup” 组内,再创建一个名为 “DataArea” 的组。
  4. 包含医生信息和签名的框是由四条分隔线组合而成的。它们位于 “kwDoctorTitle” 元素的四周。不过,我们应当以一种方式配置这些元素,使程序即使在没有找到 “kwDoctorTitle” 元素的情况下也能找到它们。在 “DataArea” 组中,创建四个具有以下属性的 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”
还应为所有这些元素禁用 Fits entirely within search area 选项。
  1. 我们可以基于找到的分隔线,手动指定医生签名和医生信息的搜索区域。但我们不会这么做,而是创建一个 Region 元素,对应由这些分隔线围成的区域。创建一个名为 “BoxRegion” 的 Region 搜索元素,并指定搜索区域:位于 “SeparatorRight” 左侧,位于 “SeparatorLeft” 右侧,位于 “SeparatorBottom” 上方,位于 “SeparatorTop” 下方。
  2. 创建一个名为 “DoctorGroup” 的新组。
  3. 为了定位医生的签名,在 “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);
  1. 要提取该框中的文本信息,请创建一个具有以下设置的 Paragraph 元素:
PropertyValue
NameDoctorInformation
Maximum line count6
Search area位于 “kwDoctorTitle” 上方,排除 “Signature”
Search Conditions section of the Code EditorRSA: DoctorAreaGroup.DataArea.BoxRegion.Rect;
  1. 单击 Match,并确认这些元素均被正确找到。
搜索元素结构应如下所示: AD_Tutorial_DE_Doctor_Structure
  1. 打开 Manage Fields 对话框,创建相应字段,并按如下方式将它们映射到搜索元素:
NameTypeSearch element
Doctor Information”Doctor” 组中的文本字段DoctorInformation
Signature”Doctor” 组中的图像字段Signature
  1. 删除为新字段自动创建的搜索元素。

测试活动

我们已经配置了所有必要的搜索元素和字段。选择所有文档,单击 Match,然后切换到 Fields 选项卡,在文档图像上查看字段区域。请注意,只有当某个区域属于最佳路径中的假设时,才会被传递给字段。 当您对结果满意后,单击文档图像上方的复制图标,将预测标注复制到参考标注。