📑 结构化数据提取

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修改:
- 指定输入语言
- 返回统一格式
- 保留原始值和翻译值
```

---

**💡 提示**: 好的数据提取不仅要准确,更要能处理各种异常情况,提供清晰的数据质量反馈,让下游系统更有信心地使用提取的数据。
← 返回分类