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

提取

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

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

开始之前:部署 IXP 模型​

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

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

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

工作方式​

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

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

配置​

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

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

输出​

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

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

读取结果​

提取结果是嵌套结构。提取的字段位于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 ,而不是抛出异常。

置信度分数​

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

表格字段​

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

错误处理​

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

注意​

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

此页面有帮助吗?

连接

需要帮助? 支持

想要了解详细内容? UiPath Academy

有问题? UiPath 论坛

保持更新