Skip to main content
本教程将带您从零开始,学习如何使用 xParse Pipeline 的 Extract 功能从文档中提取结构化信息。通过定义 JSON Schema,您可以轻松实现发票、合同、订单等文档的自动化信息提取。

为什么需要信息抽取?

在日常业务中,我们经常需要从各种文档中提取结构化信息:
  • 财务自动化:从发票中提取金额、税号、日期等关键信息
  • 合同管理:从合同中提取签约方、金额、有效期等重要条款
  • 订单处理:从订单中提取商品列表、数量、价格等明细信息
  • 数据录入:将非结构化文档转换为结构化 JSON,自动录入业务系统
传统方式需要人工逐条提取,效率低且容易出错。xParse 的信息抽取功能通过 AI 技术,让文档自动变成结构化数据,大幅提升处理效率。

使用场景

信息抽取适用于以下场景:
  • 表单数据提取:从发票、合同、订单等表单中提取关键信息
  • 结构化数据生成:将非结构化文档转换为结构化 JSON 数据
  • 数据录入自动化:自动提取文档数据并录入到业务系统
  • 信息验证:提取信息后进行数据验证和校验
这里为您提供了一份Textin官方示例图片,您可以点击下载使用:文档抽取png示例.pngExtract Sample Image

环境准备

步骤 1:安装依赖

首先安装必要的依赖:

步骤 2:获取 API Key

使用 xParse 处理文档前,需要先获取 API Key。请登录后前往 TextIn 工作台 - 账号与开发者信息 获取:
  • x-ti-app-id
  • x-ti-secret-code
提示:详细获取方式请参考 API Key 文档

步骤 3:创建配置文件(可选)

为了方便管理配置,建议创建 .env 文件存储 API Key:
然后在代码中使用 python-dotenv 加载:

快速开始

步骤 1:准备文档

创建一个测试目录,放入要处理的文档(PDF、图片等):

步骤 2:编写代码

创建 extract_demo.py 文件,添加以下代码:
重要提示:Extract 必须与 Parse 组合使用,且必须在 Parse 之后。

步骤 3:运行代码

将代码保存为 extract_demo.py,然后运行:
您将看到类似以下的输出:

步骤 4:查看结果

处理完成后,结果会保存在 ./output 目录中。每个文档对应一个 JSON 文件,包含提取的结构化数据:

定义 JSON Schema

Schema 结构

JSON Schema 必须遵循以下结构:

支持的字段类型

  • string:字符串
  • number:数字
  • integer:整数
  • enum:枚举
  • object:对象,对象内可以包含 string、number、integer、enum
  • array:数组,数组内可以包含 string、number、integer、enum、object

Schema 示例

示例 1:简单字段抽取

示例 2:数组字段抽取

启用坐标信息和印章识别

启用坐标信息

generate_citations=True 时,返回结果中会包含每个字段的坐标位置:
返回结果中的 citations 字段包含:
  • value:该字段的抽取结果
  • bounding_regions:抽取结果对应的坐标位置
    • page_number:所在页码
    • text:边界框内的文本内容
    • position:坐标位置(8个数字的数组)

启用印章识别

stamp=True 时,返回结果中会包含文档中的印章信息:
返回结果中的 stamps 字段包含:
  • color:印章颜色
  • position:印章坐标
  • stamp_shape:印章形状
  • type:印章类型
  • value:印章文本内容

Pipeline Extract vs Extract API

Pipeline Extract

优点
  • 支持批量处理
  • pipeline SDK 可以灵活配置连接器
缺点
  • 需要配置两个stage
  • 不能与chunk、embed同时使用
适用场景
  • 需要批量处理文档

Extract API

优点
  • 使用简单
  • 内部自动调用Parse
缺点
  • 需要自行实现批量处理
适用场景
  • 只需要抽取结果
  • 处理单个文档

最佳实践

  1. Schema 设计
    • 字段名称要具体明确
    • 字段描述要详细,帮助模型理解
    • 合理使用 required 字段
  2. 字段类型选择
    • 数字字段使用 number 或 integer
    • 文本字段使用 string
    • 列表数据使用 array
  3. 性能优化
    • 字段数量不超过100个(叶子节点)
    • 嵌套层级不超过3级
    • 不需要坐标信息时,设置 generate_citations=False
  4. 错误处理
    • 检查返回结果中的 status
    • 处理抽取失败的情况
    • 验证抽取结果的完整性

常见问题

Q: Extract 可以与 Chunk、Embed 同时使用吗?

A: 不可以。Extract 只能与 Parse 组合使用,不能与 Chunk、Embed 同时使用。

Q: 如何提高抽取准确率?

A:
  • 提供详细的字段描述
  • 使用具体的字段名称
  • 合理设置 required 字段
  • 根据文档类型选择合适的 Parse 引擎

Q: 抽取结果中的 null 值是什么意思?

A: null 值表示该字段在文档中未找到或无法提取。这是正常情况,因为不是所有文档都包含所有字段。

相关文档