📑 结构化数据提取
01 Text Analysis📌 场景描述
📑 结构化数据提取
从非结构化文本中提取结构化数据的 Prompt 工程实践
📌 应用场景
从自由文本、表单、邮件等非结构化数据中提取结构化信息,用于:
- 表单数据自动填充
- 文档信息自动化处理
- 数据库字段自动提取
- 商务邮件数据提取
- 合约/发票数据提取
🎯 核心要素
| 要素 | 说明 | 例子 |
|---|---|---|
| 角色 | 数据提取和结构化专家 | 数据工程师 |
| 背景 | 待提取的源文本 | 邮件、文档、表单等 |
| 目标 | 提取特定信息 | JSON或表格格式 |
| 约束 | 字段清单、格式、验... |
📝 完整 Prompt
# 📑 结构化数据提取
> 从非结构化文本中提取结构化数据的 Prompt 工程实践
---
## 📌 应用场景
从自由文本、表单、邮件等非结构化数据中提取结构化信息,用于:
- 表单数据自动填充
- 文档信息自动化处理
- 数据库字段自动提取
- 商务邮件数据提取
- 合约/发票数据提取
---
## 🎯 核心要素
| 要素 | 说明 | 例子 |
|------|------|------|
| **角色** | 数据提取和结构化专家 | 数据工程师 |
| **背景** | 待提取的源文本 | 邮件、文档、表单等 |
| **目标** | 提取特定信息 | JSON或表格格式 |
| **约束** | 字段清单、格式、验证 | 必填字段、数据类型 |
| **示例** | 标准的输出格式 | JSON样本 |
---
## ✅ 完整 Prompt 模板
### 基础版(简单字段提取)
```
你是一位数据提取专家,擅长从非结构化文本中提取关键信息。
请根据以下文本,提取相关的结构化数据。
【原始文本】
"{文本内容}"
【需要提取的字段】
- 字段1:{字段名}({类型},必填/可选)
- 字段2:{字段名}({类型},必填/可选)
- 字段3:{字段名}({类型},必填/可选)
...
【提取规则】
1. {规则1}
2. {规则2}
3. {规则3}
【输出格式 - JSON】
{
"字段1": "值1",
"字段2": "值2",
...
}
【错误处理】
- 如果字段未找到:返回 null
- 如果多个值匹配:返回数组
- 如果格式不符:说明理由
```
### 进阶版(复杂的多层级数据提取)
```
你是一位资深的数据提取和验证专家,擅长处理复杂的非结构化数据。
请根据以下文本,提取和验证结构化数据,确保数据质量。
【原始文本】
"{文本内容}"
【提取目标**】
从上述文本中提取以下结构化数据:
【主体信息】
- 字段1:{说明}(数据类型:{类型},格式要求:{格式})
- 字段2:{说明}(数据类型:{类型},格式要求:{格式})
...
【相关对象信息】(如果包含)
比如:发件人信息、收件人信息、商品列表等
【提取规则和逻辑】
1. {规则描述}
2. {规则描述}
...
【数据验证规则】
- 字段1验证:{验证规则}
- 字段2验证:{验证规则}
...
【歧义处理】
- 如果{情况1}:{处理方式}
- 如果{情况2}:{处理方式}
【输出格式 - JSON**】
{
"提取状态": "成功/失败",
"置信度": "高/中/低",
"主体信息": {
"字段1": "{值}",
"字段2": "{值}",
...
},
"相关对象": [
{
"类型": "{对象类型}",
"字段1": "{值}",
...
},
...
],
"数据质量": {
"完整性": "{百分比}",
"验证通过": "true/false",
"缺失字段": ["{列表}"],
"验证失败字段": ["{列表}"]
},
"提取说明": {
"字段1": "{说明或理由}",
...
}
}
【特殊处理**】
- 日期格式统一为:YYYY-MM-DD
- 电话号码格式统一为:+国家代码 地区号 号码
- 金额统一为:数字 + 货币代码(如:100.00 USD)
- 地址统一为:国家, 城市, 街道地址
```
---
## 💡 真实示例
### 示例1:订单邮件数据提取
**输入文本:**
```
尊敬的客户,
感谢您在我们商店下单。您的订单已确认,具体信息如下:
订单号:#ORD-2024-001234
订单日期:2024年3月2日
客户姓名:张三
联系电话:13912345678
收货地址:北京市朝阳区建国路18号,邮编100000
订单商品:
1. MacBook Pro 14英寸 (M3 Pro) - 数量:1 - 单价:¥9999 - 小计:¥9999
2. USB-C Hub 7合1 - 数量:2 - 单价:¥199 - 小计:¥398
订单总额:¥10397
预计发货日期:2024年3月5日
物流方式:顺丰快递
请妥善保管订单号,如有问题请联系客服。
```
**期望输出:**
```json
{
"提取状态": "成功",
"置信度": "高",
"主体信息": {
"订单号": "ORD-2024-001234",
"订单日期": "2024-03-02",
"客户姓名": "张三",
"联系电话": "+86 139-1234-5678",
"收货地址": "中国, 北京市, 朝阳区建国路18号",
"邮编": "100000",
"订单总额": "10397.00 CNY",
"预计发货日期": "2024-03-05",
"物流方式": "顺丰快递"
},
"商品列表": [
{
"商品名称": "MacBook Pro 14英寸 (M3 Pro)",
"数量": 1,
"单价": "9999.00 CNY",
"小计": "9999.00 CNY"
},
{
"商品名称": "USB-C Hub 7合1",
"数量": 2,
"单价": "199.00 CNY",
"小计": "398.00 CNY"
}
],
"数据质量": {
"完整性": "100%",
"验证通过": true,
"缺失字段": [],
"验证失败字段": []
}
}
```
### 示例2:发票数据提取
**输入文本:**
```
【增值税发票】
发票代码:110101202024000456
发票号码:000001
开票日期:2024年3月1日
企业名称:阿里巴巴集团控股有限公司
统一社会信用代码:91110000714018532R
企业地址:杭州市西湖区翠苑六路9号
购买方:
企业名称:某科技有限公司
统一社会信用代码:91110100123456789A
联系方式:010-12345678
货物或服务清单:
1. 云服务 ECS 96核 x 30天 - 数量:1 - 单价:¥8000 - 金额:¥8000
2. 云服务 CDN 流量 1TB - 数量:1 - 单价:¥1500 - 金额:¥1500
合计金额:¥9500
税率:13%
税额:¥1235
总金额(含税):¥10735
备注:云服务发票
```
**期望输出:**
```json
{
"提取状态": "成功",
"置信度": "高",
"发票基本信息": {
"发票类型": "增值税发票",
"发票代码": "110101202024000456",
"发票号码": "000001",
"开票日期": "2024-03-01"
},
"销售方信息": {
"企业名称": "阿里巴巴集团控股有限公司",
"统一社会信用代码": "91110000714018532R",
"地址": "杭州市西湖区翠苑六路9号"
},
"购买方信息": {
"企业名称": "某科技有限公司",
"统一社会信用代码": "91110100123456789A",
"联系方式": "010-12345678"
},
"商品或服务清单": [
{
"名称": "云服务 ECS 96核 x 30天",
"数量": 1,
"单价": "8000.00 CNY",
"金额": "8000.00 CNY"
},
{
"名称": "云服务 CDN 流量 1TB",
"数量": 1,
"单价": "1500.00 CNY",
"金额": "1500.00 CNY"
}
],
"金额信息": {
"合计金额": "9500.00 CNY",
"税率": "13%",
"税额": "1235.00 CNY",
"总金额(含税)": "10735.00 CNY"
},
"备注": "云服务发票",
"数据质量": {
"完整性": "100%",
"验证通过": true,
"缺失字段": [],
"验证失败字段": []
}
}
```
---
## 🔧 优化建议
### ✅ 做的事情
1. **定义明确的字段规范**
```
✅ 很好:
- 日期格式:YYYY-MM-DD
- 电话:+国家代码 地区 号码
- 金额:数字.小数位 货币代码
❌ 不好:没有统一的格式要求
```
2. **处理多值情况**
```
✅ 很好:
- 多个商品时返回数组
- 多个地址时清楚标识
❌ 不好:忽视多值情况,只提取第一项
```
3. **验证提取结果**
```
✅ 很好:
- 检查必填字段是否都有
- 验证数据格式是否正确
- 报告数据质量评分
❌ 不好:提取后不验证
```
4. **清晰的错误说明**
```
✅ 很好:说明每个缺失或验证失败的字段原因
❌ 不好:只说"提取失败",没有细节
```
### ❌ 避免的事情
1. **忽视数据格式** - 导致后续处理出错
2. **无法处理缺失值** - 应该有明确的缺失值处理策略
3. **没有验证机制** - 无法确保数据质量
4. **字段名不一致** - 使用固定的、标准的字段名
---
## 📊 数据提取应用对比
| 场景 | 复杂度 | 关键挑战 | 解决方案 |
|-----|--------|----------|---------|
| **订单邮件** | 中 | 多商品、复杂计算 | 定义结构化字段、数组处理 |
| **发票** | 高 | 多部分、法律要求 | 详细的验证规则、格式要求 |
| **合约** | 高 | 变量内容、多种格式 | 灵活的字段提取、异常处理 |
| **表单** | 低 | 格式统一 | 直接字段映射 |
---
## 🚀 快速上手
1. **定义输出JSON结构** - 明确需要提取的字段和嵌套关系
2. **编写字段规范** - 数据类型、格式、验证规则
3. **准备示例** - 给出一两个输入输出示例
4. **复制Prompt** - 使用进阶版以确保数据质量
5. **调整和优化** - 根据实际结果微调提取规则
---
## 💡 进阶应用
### 应用1:批量文档处理
```
Prompt修改:
- 添加批处理逻辑
- 返回错误处理信息
- 生成处理汇总报告
```
### 应用2:动态字段提取
```
Prompt修改:
- 处理可选字段
- 动态识别对象类型
- 灵活的嵌套关系
```
### 应用3:多语言数据提取
```
Prompt修改:
- 指定输入语言
- 返回统一格式
- 保留原始值和翻译值
```
---
**💡 提示**: 好的数据提取不仅要准确,更要能处理各种异常情况,提供清晰的数据质量反馈,让下游系统更有信心地使用提取的数据。