README.md
10.3 KB
文档解析工具 - 待处理文档目录
详细文档: 文档解析系统架构
📁 目录说明
此文件夹用于存放需要解析的保险产品文档,解析脚本将自动读取并生成配置。
docs/to-parse/
├── preprocessed/ # 豆包预处理过的 MD 文件(快速通道)
├── raw/ # 原始 PDF/DOCX 文件(保留原格式)
├── 产品说明书.pdf # 根目录文档(兼容)
└── archived/ # 已处理文档归档(按日期)
🚀 使用方法
方案选择
| 方案 | 适用场景 | 速度 | 准确率 | 人工干预 |
|---|---|---|---|---|
| 豆包预处理 | 少量文档、复杂格式 | ⚡ 快 | ✅ 高 | 需要手动转换 |
| 直接解析 | 大量文档、标准格式 | 🐢 慢 | ⚠️ 中 | 完全自动 |
| 混合方案 | 批量+特殊文档 | 🚀 中 | ✅ 高 | 灵活选择 |
1. 添加文档
方案 A:豆包预处理(推荐用于少量文档)
适用场景:1-5 个文档,或包含扫描件、复杂格式
步骤:
-
上传到豆包
将 PDF/图片上传到豆包 AI -
使用提示词转换
请将这份保险产品文档转换为 Markdown 格式,要求: 1. 保留原文档的表格结构 2. 保留产品名称、缴费年期、年龄范围等关键信息 3. 使用 Markdown 表格展示费率信息 4. 输出纯 Markdown 文本,不要添加额外解释 -
下载并放置
# 下载豆包生成的 MD 文件,放到 preprocessed 目录 docs/to-parse/preprocessed/产品说明书.md -
执行解析
pnpm parse:docs -- --file="产品说明书.md"
优势:
- ⚡ 解析速度提升 3-5 倍
- ✅ 准确率更高,尤其适合复杂格式
- 🔄 支持扫描件 OCR
方案 B:直接解析(推荐用于批量文档)
适用场景:10+ 个标准格式文档
步骤:
将 PDF/Word 文档复制到 raw/ 目录:
docs/to-parse/raw/产品说明书.pdf
然后执行解析命令。
2. 执行解析
2. 执行解析
# 查看待处理的文档列表
pnpm parse:docs -- --list
# 查看配置状态
pnpm parse:docs -- --status
# 解析所有文档(dry-run 模式,仅生成待审核文件)
pnpm parse:docs
# 解析指定文档
pnpm parse:docs -- --file="产品说明书.pdf"
# 应用审核通过的配置
pnpm parse:docs -- --apply=计划书模版4
# 预览应用配置(不实际修改)
pnpm parse:docs -- --apply=计划书模版4 --dry-run
3. 查看结果
待审核文件(按原始文档名分目录):
docs/parse-audit/pending/<原始文档名>/
原始文档归档:
docs/to-parse/archived/YYYY-MM-DD/
🔗 功能链路
┌─────────────────────────────────┐
│ 文档来源选择 │
└─────────────────────────────────┘
│
┌────────────────────┴────────────────────┐
▼ ▼
┌───────────────┐ ┌───────────────┐
│ 豆包预处理 │ │ 原始文档 │
│ (手动) │ │ (PDF/DOCX) │
└───────────────┘ └───────────────┘
│ │
▼ ▼
┌───────────────┐ ┌───────────────┐
│ preprocessed/ │ │ raw/ │
│ *.md │ │ *.pdf/*.docx │
└───────────────┘ └───────────────┘
│ │
└────────────────────┬────────────────────┘
▼
┌─────────────────────────────────┐
│ 统一解析入口 (parse:docs) │
│ • 自动检测来源 │
│ • 预处理文档跳过 markitdown │
│ • 原始文档使用 markitdown │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 多产品检测与分割 │
│ (product-splitter.js) │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 智能字段提取 │
│ (smart-field-extractor.js) │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 生成配置代码与审核文件 │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 人工审核确认 │
│ (pending → approved) │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 应用到 plan-templates.js │
└─────────────────────────────────┘
🧋 核心能力
| 能力 | 说明 | 状态 |
|---|---|---|
| 多格式解析 | 支持 PDF、DOCX、TXT、MD | ✅ |
| 多产品识别 | 自动识别并分割多产品文档 | ✅ |
| 智能字段提取 | 8 种匹配模式提取配置字段 | ✅ |
| 人工审核流程 | 生成人类可读的审核文件 | ✅ |
| 配置自动应用 | 支持一键应用审核通过配置 | ✅ |
| AI 增强解析 | 支持接入 AI 服务 | 🚧 待启用 |
📋 智能提取的字段
| 字段 | 提取方式 | 默认值 |
|---|---|---|
| product_name | 标题正则匹配 | 文件名 |
| product_type | 关键词内容推断 | savings |
| currency | 货币符号统计 | USD |
| payment_periods | 智能列表提取 | ['整付', '3年', '5年'] |
| age_range | 范围值提取 | {min: 0, max: 75} |
| insurance_period | 直接匹配 | '终身' |
| withdrawal_modes | 列表提取(储蓄类) | ['年龄指定金额', '最高固定金额'] |
| withdrawal_periods | 列表提取(储蓄类) | ['1年', '3年', '5年', '10年'] |
📋 支持的文档格式
| 格式 | 扩展名 | 转换方式 |
|---|---|---|
.pdf |
markitdown CLI 或 pdf-parse | |
| Word | .docx |
mammoth 库 |
| Word(旧版) | .doc |
❌ 不支持,需转换为 .docx |
| 文本 |
.txt, .md
|
直接读取 |
🧪 测试样本
用于回归测试的样本文档建议放在此目录,命名规则建议包含产品名与类型:
docs/to-parse/
├── fixtures-life-insurance-sample.pdf
├── fixtures-critical-illness-sample.docx
└── fixtures-savings-multiproduct.pdf # 多产品文档测试
📊 审计日志
每次解析都会记录审计日志,便于回溯与排查:
docs/parsed-backup/parse-audit.jsonl # 解析审计日志
docs/parsed-backup/backup-log.jsonl # 配置变更日志
🔧 配置 AI 服务(可选)
当前使用基于规则的提取方式,如需启用 AI 增强解析:
# 1. 安装依赖
pnpm add openai anthropic
# 2. 配置 .env
AI_SERVICE_TYPE=openai
OPENAI_API_KEY=sk-xxx
OPENAI_MODEL=gpt-4-turbo
# 3. 检查状态
pnpm parse:docs -- --status
⚠️ 注意事项
- 文档命名:建议使用有意义的文件名,方便识别产品
-
预处理目录:
-
preprocessed/- 放置豆包转换的 MD 文件 -
raw/- 放置原始 PDF/DOCX 文件 - 根目录 - 兼容旧版本,可直接放置文档
-
- 手动审核:生成后请重点核对产品名称、币种、缴费年期、年龄范围
-
版本控制:生成的配置会自动备份到
docs/parsed-backup/ -
二次解析:需要重新解析时,从
archived/目录移回文档即可 - 多产品文档:一个文档包含多个产品时,会为每个产品生成独立的审核文件
- MD 文件优化:预处理的 MD 文件会跳过 markitdown,解析速度更快