UiPath Documentation
maestro
latest
false
Maestro 用户指南
重要 :
新发布内容的本地化可能需要 1-2 周的时间才能完成。

提取

使用 IXP 提取模型从文档中提取结构化字段。

“提取”节点使用 UiPath 智能提取平台 (IXP) 模型从文档(发票、收据、表单或合同)中提取结构化字段,并返回结果,以便下游节点进行操作。当流程中的某个步骤需要从非结构化文件中提取带类型的数据时,请使用此功能。

开始之前:部署 IXP 模型

提取节点没有自己的内置提取程序。它会显示您组织中部署的智能提取处理 (IXP) 模型,因此您必须至少部署一个 IXP 提取模型,然后任何选项才会显示在节点下。

  • 在智能提取处理 (IXP) 中构建并部署模型。有关更多信息,请参阅“智能提取处理 (IXP)”文档
  • 必须将模型部署到您可以访问的文件夹中。模型按其完全限定名称<Folder>/<ModelName> (例如Shared/Finance/invoice-extraction )列出。
  • 如果未部署模型,则面板中会显示“提取”类别,但它为空。

您的租户还必须同时启用IXPDocument Understanding服务(“管理员”→“租户”→“服务”)。即使您只使用 IXP 模型,提取节点也需要配置两者。

工作方式

从组织中动态加载提取模型,这与从 Integration Service 加载连接器节点相同。在节点面板中,已部署的模型显示在“文档处理”→“提取”下,每个模型都作为自己的节点。向画布添加一项,会创建绑定到该特定模型的“提取”节点。

当节点运行时,Flow 会将文档发送到 IXP 模型,该模型将其数字化并提取,结构化结果在节点的output上返回。提取异步运行:节点会等待模型完成后再继续运行,因此请为大型文档留出时间。

配置

将提取节点添加到画布后,请在属性面板中对其进行配置。

字段必填默认描述
模型选定的模型已部署的要运行的 IXP 模型。当您从面板中添加节点时,系统会设置此规则,并且模型的文件夹和版本会自动绑定。
文档要从中提取内容的文件。将其绑定到流程早期中生成的文件,例如触发器中的附件或先前的节点输出。
页面范围空白从中提取的页面,例如1-3 。将其留空以处理整个文档。

输出

提取节点在$vars.<nodeName>.output处返回其结果。

变量描述
output提取结果。包含单个ExtractionResult对象,该对象具有文档元数据、提取的字段和每个字段的置信度分数。阅读结果中详细介绍了该形状。
error节点出现故障时的错误详细信息。包含codemessagedetailcategorystatus 。当节点的错误句柄已连接时可用。

读取结果

提取结果是嵌套结构。提取的字段位于ExtractionResult.ResultsDocument.Fields下,并且每个字段的值位于Values数组中,而不是直接在字段上:

$vars.<nodeName>.output = {
  ExtractionResult: {
    DocumentId: "<id>",
    ResultsVersion: 0,
    ResultsDocument: {
      DocumentTypeField: { Value: "Invoice", Confidence: 1.0, OcrConfidence: -1.0 },
      Fields: [
        {
          FieldId: "Test.Financial.Invoice.Total", // model-qualified id
          FieldName: "Total",                        // leaf label, use this for lookups
          FieldType: "Text",
          IsMissing: false,
          Values: [
            { Value: "12.57", Confidence: 0.604, OcrConfidence: 0.604, Components: [], Reference: {} }
          ]
        }
        // ...one entry per field in the model schema
      ]
    }
  }
}
$vars.<nodeName>.output = {
  ExtractionResult: {
    DocumentId: "<id>",
    ResultsVersion: 0,
    ResultsDocument: {
      DocumentTypeField: { Value: "Invoice", Confidence: 1.0, OcrConfidence: -1.0 },
      Fields: [
        {
          FieldId: "Test.Financial.Invoice.Total", // model-qualified id
          FieldName: "Total",                        // leaf label, use this for lookups
          FieldType: "Text",
          IsMissing: false,
          Values: [
            { Value: "12.57", Confidence: 0.604, OcrConfidence: 0.604, Components: [], Reference: {} }
          ]
        }
        // ...one entry per field in the model schema
      ]
    }
  }
}

要读取下游脚本节点中单个字段的值,请通过ExtractionResult.ResultsDocument.Fields找到字段,并读取FieldName并读取Values[0].Value

const value =
  $vars.extract1.output
    ?.ExtractionResult?.ResultsDocument?.Fields
    ?.find((f) => f.FieldName === "Total")
    ?.Values?.[0]?.Value;
const value =
  $vars.extract1.output
    ?.ExtractionResult?.ResultsDocument?.Fields
    ?.find((f) => f.FieldName === "Total")
    ?.Values?.[0]?.Value;

由于字段名称包含模型架构中的空格和大小写( Invoice No.Vendor Name ),因此规范化的查找更加可靠:

const fields = $vars.extract1.output?.ExtractionResult?.ResultsDocument?.Fields || [];
const norm = (s) => String(s || "").toLowerCase().replace(/\s+/g, "");
const get = (name) => {
  const f = fields.find((x) => norm(x.FieldName) === norm(name));
  return f && Array.isArray(f.Values) && f.Values[0] ? f.Values[0].Value : undefined;
};

const total = get("Total");
const vendor = get("Vendor Name");
const fields = $vars.extract1.output?.ExtractionResult?.ResultsDocument?.Fields || [];
const norm = (s) => String(s || "").toLowerCase().replace(/\s+/g, "");
const get = (name) => {
  const f = fields.find((x) => norm(x.FieldName) === norm(name));
  return f && Array.isArray(f.Values) && f.Values[0] ? f.Values[0].Value : undefined;
};

const total = get("Total");
const vendor = get("Vendor Name");
备注:

常见错误:读取Fields.find((f) => f.FieldName === "Total").Value将返回undefined 。这些字段位于ResultsDocument.Fields下(比ExtractionResult深一级),值存在Values数组中,而不直接位于字段上。从旧版 Document Understanding 工作流复制的示例使用较扁平的形状,在此处不起作用。

缺少字段

模型找不到的字段包含IsMissing: true以及空或 null Values数组。始终使用Values?.[0]进行保护(如上面的代码片段所示),因此缺少的字段读取为undefined ,而不是抛出异常。

置信度分数

每个提取的值都包含ConfidenceOcrConfidence ,两者的浮动范围都在01之间,数值越高,确定性越高。它们位于Values[0].Confidence处的值对象上。值-1.0是表示“不适用”的标记(例如,在表格标头行上),因此在比较之前将其筛选掉。使用决策节点将低置信度提取内容路由到人工任务以供审核。

表格字段

FieldTypeTable的字段在Values下保留其行,而不是上方的标量形状。每个表格值都带有一个Components数组( Header行和Body行),每个组件依次保存其Components下的单元格字段,每个字段都带有熟悉的Values[0].Value 。递归遍历Components以到达单个单元格。

错误处理

提取节点支持错误句柄。如果提取失败但错误句柄已连接,则执行路由到错误路径,错误对象位于$vars.<nodeName>.error 。有关更多信息,请参阅“错误处理”

注意

  • “提取”类别下的模型列表反映了在设计时在组织中部署的模型。在智能提取处理 (IXP) 中部署或重新部署模型,然后重新打开面板以查看更改。
  • 对于Values[0].Value ,字段值始终为字符串,即使对于日期和数字也是如此。模型也可能返回DerivedFields下的解析部分(例如,日期的YearMonthDay ,或地址的CityCountry )。
  • 开始之前:部署 IXP 模型
  • 工作方式
  • 配置
  • 输出
  • 读取结果
  • 缺少字段
  • 置信度分数
  • 表格字段
  • 错误处理
  • 注意

此页面有帮助吗?

连接

需要帮助? 支持

想要了解详细内容? UiPath Academy

有问题? UiPath 论坛

保持更新