本教程将带您从零开始,学习如何使用 xParse Pipeline 的 Extract 功能从文档中提取结构化信息。通过定义 JSON Schema,您可以轻松实现发票、合同、订单等文档的自动化信息提取。
为什么需要信息抽取?
在日常业务中,我们经常需要从各种文档中提取结构化信息:
- 财务自动化:从发票中提取金额、税号、日期等关键信息
- 合同管理:从合同中提取签约方、金额、有效期等重要条款
- 订单处理:从订单中提取商品列表、数量、价格等明细信息
- 数据录入:将非结构化文档转换为结构化 JSON,自动录入业务系统
传统方式需要人工逐条提取,效率低且容易出错。xParse 的信息抽取功能通过 AI 技术,让文档自动变成结构化数据,大幅提升处理效率。
使用场景
信息抽取适用于以下场景:
- 表单数据提取:从发票、合同、订单等表单中提取关键信息
- 结构化数据生成:将非结构化文档转换为结构化 JSON 数据
- 数据录入自动化:自动提取文档数据并录入到业务系统
- 信息验证:提取信息后进行数据验证和校验
环境准备
步骤 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 SDK 可以灵活配置连接器
缺点:
- 需要配置两个stage
- 不能与chunk、embed同时使用
适用场景:
优点:
缺点:
适用场景:
最佳实践
-
Schema 设计:
- 字段名称要具体明确
- 字段描述要详细,帮助模型理解
- 合理使用 required 字段
-
字段类型选择:
- 数字字段使用 number 或 integer
- 文本字段使用 string
- 列表数据使用 array
-
性能优化:
- 字段数量不超过100个(叶子节点)
- 嵌套层级不超过3级
- 不需要坐标信息时,设置
generate_citations=False
-
错误处理:
- 检查返回结果中的 status
- 处理抽取失败的情况
- 验证抽取结果的完整性
常见问题
A: 不可以。Extract 只能与 Parse 组合使用,不能与 Chunk、Embed 同时使用。
Q: 如何提高抽取准确率?
A:
- 提供详细的字段描述
- 使用具体的字段名称
- 合理设置 required 字段
- 根据文档类型选择合适的 Parse 引擎
Q: 抽取结果中的 null 值是什么意思?
A: null 值表示该字段在文档中未找到或无法提取。这是正常情况,因为不是所有文档都包含所有字段。
相关文档