Skip to content

henrywen98/OcDataEntry

Repository files navigation

OcDataEntry - 智能PDF数据录入系统

License: MIT Python 3.9+ Streamlit OpenAI

🎯 专业的PDF文档智能录入解决方案
基于AI技术的结构化数据提取工具,专为房贷申请表、保险单据等复杂文档设计

🌟 项目概述

OcDataEntry是一个现代化的PDF数据录入自动化系统,它将传统的人工数据录入工作转变为智能化流程。通过结合OpenAI的先进语言模型和专业的PDF解析技术,系统能够:

  • 📄 自动识别:智能解析PDF文档中的文本信息
  • AI理解:使用GPT-5-mini深度理解文档内容和结构
  • 📋 结构化输出:按照预定义的JSON Schema生成标准化数据
  • 人工核验:提供专业的核验工作台确保数据准确性
  • 📊 批量处理:支持并发处理大量文档,提高工作效率

✨ 核心特性

🤖 AI智能提取

  • 先进模型: 基于OpenAI GPT-5-mini,理解复杂文档结构
  • 智能压缩: 自动清理空值字段,输出精简JSON(减少60-80%冗余)
  • 容错处理: 智能处理文档格式差异和数据缺失情况

🚀 高效批量处理

  • 并发架构: 支持20+文件的并发API调用(5并发限制防止速率超限)
  • 进度监控: 实时显示处理进度和每个文件的状态
  • 文件对应: 每个PDF文件生成独立的JSON结果,精确对应

🔍 专业核验工作台

  • 统一界面: 三栏布局(文件列表 | PDF预览 | JSON编辑)
  • 连续操作: 一次进入,连续核验所有文件,无需频繁跳转
  • 实时验证: JSON格式实时检查和优化统计显示
  • 进度追踪: 已核验X/Y文件的清晰进度显示

📋 Schema驱动设计

  • 标准化输出: 严格遵循JSON Schema,确保数据一致性
  • 灵活配置: 支持自定义Schema,适应不同文档类型
  • 类型安全: 自动数据类型转换和验证

🏗️ 系统架构

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   Web界面层     │    │    业务逻辑层    │    │   数据服务层    │
│  (Streamlit)    │◄──►│  (streamlit_app) │◄──►│  (extract.py)   │
│                 │    │                  │    │  (pdf_text.py)  │
│ • 文件上传      │    │ • 并发处理       │    │ • OpenAI API    │
│ • 进度显示      │    │ • 状态管理       │    │ • PDF解析       │
│ • 核验工作台    │    │ • 核验流程       │    │ • JSON处理      │
│ • 结果导出      │    │ • 错误处理       │    │ • 配置管理      │
└─────────────────┘    └──────────────────┘    └─────────────────┘

� 完整工作流程

🔄 标准处理流程

graph TD
    A[上传PDF文件] --> B{选择处理模式}
    B -->|批量模式| C[并发文本提取]
    B -->|单独模式| D[逐个文本提取]
    
    C --> E[并发AI数据提取]
    D --> F[逐个AI数据提取]
    
    E --> G[显示批量结果]
    F --> H[显示单独结果]
    
    G --> I[进入核验工作台]
    H --> I
    
    I --> J[PDF预览 + JSON编辑]
    J --> K[保存并标记已核验]
    K --> L{还有未核验文件?}
    L -->|是| M[切换到下一个文件]
    L -->|否| N[完成并导出]
    M --> J
## 🚀 快速开始

### 系统要求

- **Python 3.9.6+** (推荐使用系统自带Python)
- **OpenAI API密钥** (支持GPT-5-mini模型)
- **稳定网络连接** (用于API调用)
- **现代浏览器** (Chrome、Firefox、Safari、Edge等)

### 1️⃣ 获取项目

```bash
git clone https://github.com/henrywen98/OcDataEntry.git
cd OcDataEntry
Loading

2️⃣ 安装依赖

# 方式1: 使用 requirements.txt (推荐)
pip3 install -r requirements.txt

# 方式2: 手动安装核心依赖
pip3 install streamlit pdfplumber httpx pydantic pydantic-settings python-dotenv

3️⃣ 配置API密钥

# 复制环境变量模板
cp .env.example .env

# 编辑配置文件
nano .env  # 或使用你喜欢的编辑器

.env 文件中设置你的OpenAI API密钥:

OPENAI_API_KEY=sk-proj-your_actual_openai_api_key_here
OPENAI_MODEL=gpt-5-mini

4️⃣ 启动应用

🎯 推荐方式:使用一键启动脚本

python3 run_streamlit.py

🔧 替代方式:直接运行Streamlit

streamlit run streamlit_app.py --server.port=8503

5️⃣ 开始使用

启动成功后,浏览器会自动打开:

� 详细使用指南

📋 基础操作流程

第一步:文件上传

  • 📁 拖拽上传:直接拖拽PDF文件到上传区域
  • 📂 点击选择:点击"Browse files"按钮选择文件
  • 📊 支持格式:仅支持包含文本层的PDF文件
  • ⚠️ 注意事项:不支持扫描件OCR(需要可选择文本)

第二步:选择处理模式

🔄 单独处理模式

  • 📝 适用场景:不同类型的表单、混合文档
  • 处理方式:每个PDF文件独立AI分析
  • 🎯 特点:精确对应,每个文件生成独立JSON

📦 批量处理模式 (推荐)

  • 📈 适用场景:相同类型表单的大批量处理
  • 🚀 处理方式:并发AI调用(5并发控制)
  • 💡 特点:高效处理20+文件,智能JSON压缩

第三步:AI处理与优化

  • 🧠 智能提取:GPT-5-mini深度理解文档内容
  • 🗜️ 自动压缩:移除空值字段,减少60-80%冗余
  • 📊 实时统计:显示有效字段数、优化率等指标
  • ⏱️ 进度监控:实时显示处理进度和文件状态

� 核验工作台详解

统一入口设计

📊 批量处理完成
↓ 
🎯 [进入核验工作台 (N个文件)] ← 一键进入
↓
📋 核验工作台界面

三栏布局结构

┌──────────────┬────────────────┬────────────────┐
│   文件列表   │   PDF预览      │   JSON编辑     │
│              │                │                │
│ 👉 ✅ file1  │ ┌────────────┐ │ ┌────────────┐ │
│    ⏳ file2  │ │    PDF     │ │ │    JSON    │ │
│    ⏳ file3  │ │   iframe   │ │ │   Editor   │ │
│    ...       │ │   显示     │ │ │   实时验证 │ │
│              │ └────────────┘ │ └────────────┘ │
│ ╔══════════╗ │                │ ┌────────────┐ │
│ ║ 进度: 1/N ║ │ 上一个 | 下一个 │ │ 💾保存 ✅核验│ │
│ ╚══════════╝ │                │ └────────────┘ │
└──────────────┴────────────────┴────────────────┘

高效操作流程

  1. � 文件导航

    • 左侧列表显示所有待核验文件
    • 实时状态:✅已核验 / ⏳待核验 / 👉当前文件
    • 点击任意文件名快速跳转
  2. � PDF预览

    • iframe原生PDF显示(保持原始格式)
    • 降级文本显示(PDF预览失败时)
    • 高度优化的预览窗口(500px高度)
  3. 📝 JSON编辑

    • 实时语法检查和格式验证
    • 优化统计显示(字段数、压缩率等)
    • 一键保存并自动标记已核验
  4. ⚡ 批量操作

    • 连续核验:保存后自动准备下一个文件
    • 进度追踪:实时显示"已核验 X/Y 个文件"
    • 一键退出:完成后统一导出所有结果

📊 性能优化特性

并发处理优势

处理方式 20个文件处理时间 特点
串行处理 ~10分钟 逐个调用API
并发处理 ~2分钟 5个文件同时处理

JSON智能压缩

指标 优化前 优化后 改善
字段数 100-150个 20-40个 ↓60-80%
文件大小 数万字符 数千字符 ↓70-85%
可读性 充满空值 紧凑清晰 显著提升

🛠️ 技术架构

现代化技术栈

  • 🌐 前端界面: Streamlit (响应式Web界面)
  • 📄 PDF解析: pdfplumber (高性能文本提取)
  • 🤖 AI引擎: OpenAI GPT-5-mini (智能理解模型)
  • ⚡ 异步处理: httpx + asyncio (并发网络调用)
  • 📋 数据验证: JSON Schema + Pydantic (类型安全)
  • 🔧 配置管理: python-dotenv (环境变量管理)

系统架构图

┌─────────────────────────────────────────────────────────────┐
│                    🌐 Streamlit Web界面                     │
├─────────────────┬─────────────────┬─────────────────────────┤
│   📁 文件上传   │   🎮 核验工作台  │   📊 结果展示           │
│   ⚙️ 模式选择   │   🔍 PDF预览     │   📈 统计分析           │
│   ⏱️ 进度监控   │   📝 JSON编辑    │   💾 数据导出           │
└─────────────────┴─────────────────┴─────────────────────────┘
                           │
┌─────────────────────────────────────────────────────────────┐
│                   🧠 业务逻辑层 (streamlit_app.py)          │
├─────────────────┬─────────────────┬─────────────────────────┤
│   🔄 并发管理   │   📋 状态管理    │   🎯 核验流程           │
│   ⚡ 异步处理   │   🔍 错误处理    │   📊 优化统计           │
│   📈 进度追踪   │   💾 持久化      │   🎮 用户交互           │
└─────────────────┴─────────────────┴─────────────────────────┘
                           │
┌─────────────────────────────────────────────────────────────┐
│                     📡 服务层                               │
├─────────────────┬─────────────────┬─────────────────────────┤
│ 📄 PDF服务      │ 🤖 AI提取服务    │ ⚙️ 配置服务              │
│ (pdf_text.py)   │ (extract.py)     │ (config.py)             │
│                 │                  │                         │
│ • pdfplumber   │ • OpenAI API     │ • 环境变量管理          │
│ • 文本提取     │ • 异步调用       │ • JSON Schema           │
│ • 错误处理     │ • 结果清理       │ • 类型验证              │
└─────────────────┴─────────────────┴─────────────────────────┘

⚠️ 使用说明

📋 支持的文件格式

  • ✅ 包含文本层的PDF文件
  • ✅ 由文字处理软件生成的PDF
  • ❌ 扫描件PDF (需要OCR处理)
  • ❌ 纯图片格式的PDF
  • ❌ 加密或受保护的PDF

API使用限制

  • 需要有效的OpenAI API密钥
  • GPT-5-mini模型调用费用按OpenAI定价
  • 大文件处理可能消耗更多token
  • 建议在稳定网络环境下使用

性能考虑

  • 单个PDF文件建议不超过50页
  • 批量处理建议不超过20个文件
  • 复杂表格可能需要更长处理时间
  • 网络延迟会影响整体速度

🔧 故障排除

支持的格式

  • PDF文件包含可选择文本层
  • 常见的表单类型:房贷申请表、保险单据、合同文档等
  • 多语言支持(主要针对中英文优化)

不支持的格式

  • 扫描件PDF(纯图片)
  • 需要OCR处理的文档
  • 加密或受保护的PDF文件
  • 非标准编码的PDF文档

💰 成本估算

使用OpenAI GPT-5-mini模型的大概成本:

  • 单个文档: $0.001 - $0.01 USD(取决于文档大小)
  • 批量处理: 20个文档约 $0.05 - $0.20 USD
  • 月度使用: 1000个文档约 $5 - $20 USD

注:实际成本取决于文档复杂度和文本长度

🔒 安全与隐私

  • 数据处理: 所有PDF文本会发送到OpenAI进行处理
  • 隐私保护: 不存储任何上传的文件或处理结果
  • 会话管理: 数据仅在浏览器会话中保持,关闭浏览器即清空
  • API安全: 支持自定义API密钥,用户完全控制

🚨 故障排除

🔧 常见问题解决

❓ "JSON序列化错误"

# 检查datetime处理问题
python3 -c "from datetime import datetime; print(datetime.now().isoformat())"
# 确保所有时间戳都转换为ISO格式

❓ "AI数据提取未启用"

# 验证API密钥设置
cat .env | grep OPENAI_API_KEY
# 确保格式:OPENAI_API_KEY=sk-proj-...

❓ "并发处理失败"

# 检查网络稳定性和API限制
curl -s https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

❓ "核验工作台加载错误"

  • 确保已完成文件处理
  • 检查session state是否保持
  • 尝试刷新页面重新处理

❓ "PDF预览无法显示"

# 检查浏览器兼容性
# Chrome/Firefox/Safari 推荐
# 确保PDF文件大小合理(<10MB)

🛠️ 性能优化建议

📈 提高处理速度

  • 使用批量处理模式(并发优势)
  • 控制单次上传文件数量(建议≤20个)
  • 确保网络稳定性(避免API重试)

💾 减少内存使用

  • 处理完成后及时清空结果
  • 避免同时处理过大的PDF文件
  • 定期重启应用清理缓存

🔧 系统调优

# 调整并发数量(在streamlit_app.py中)
max_concurrent = 3  # 降低并发数减少API压力

# 调整超时时间
timeout = 180.0  # 3分钟超时适合小文件

📊 性能监控

启用详细日志监控系统性能:

export STREAMLIT_LOGGER_LEVEL=debug
export OPENAI_LOG_LEVEL=debug
python3 run_streamlit.py

监控关键指标:

  • API调用成功率
  • 平均处理时间
  • 内存使用情况
  • 并发处理效率

� 版本更新

最新版本特性

v2.0 - 核验工作台重构

  • 🎯 统一核验界面,减少90%页面跳转
  • 🚀 并发处理支持,提升5倍批量处理速度
  • 🗜️ 智能JSON压缩,减少60-80%输出冗余
  • 📊 实时优化统计,透明的处理过程

v1.5 - 性能优化

  • ⚡ 异步API调用架构
  • 🔒 DateTime序列化修复
  • 📱 响应式界面设计

升级指南

从旧版本升级:

git pull origin main
pip3 install -r requirements.txt --upgrade

�📄 开源协议

MIT License

本项目采用MIT开源许可证,详情请查看 LICENSE 文件。

使用条款

  • ✅ 商业使用
  • ✅ 修改分发
  • ✅ 私人使用
  • ⚠️ 保留版权声明
  • ⚠️ 遵守OpenAI API使用条款

🤝 参与贡献

贡献方式

我们欢迎各种形式的贡献!

🐛 报告问题

  • 使用 GitHub Issues 报告bug
  • 提供详细的错误信息和复现步骤
  • 包含系统环境和配置信息

💡 功能建议

  • 通过 Issues 提交功能请求
  • 描述使用场景和预期效果
  • 讨论技术可行性

🔧 代码贡献

  1. Fork 项目仓库
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

开发指南

详细的开发和贡献指南请参考 CONTRIBUTING.md

社区支持

  • 技术讨论: 使用 GitHub Discussions
  • 即时沟通: 欢迎通过Issues交流
  • 文档改进: 帮助完善README和注释

📞 联系方式


⭐ 如果这个项目对你有帮助,请给个Star支持一下! ⭐

Made with ❤️ by henrywen98


💡 提示: 如果你经常处理相同类型的表单,建议使用批量处理模式以提高效率和一致性。
├── config.py # 应用配置 ├── run_streamlit.py # 启动脚本 ├── data_entry.schema.json # JSON Schema定义 ├── .env.example # 环境变量示例 └── README.md # 项目说明


## 安装和运行

### 系统要求

- Python 3.9.6+ (使用系统Python)
- 需要安装以下包:
  ```bash
  pip3 install streamlit pdfplumber httpx pydantic pydantic-settings python-dotenv

配置

  1. 设置OpenAI API密钥:

    cp .env.example .env
    # 编辑.env文件,添加你的OpenAI API密钥
  2. 配置.env文件:

    OPENAI_API_KEY=your_actual_openai_api_key_here
    

运行应用

方法1: 使用启动脚本

python3 run_streamlit.py

方法2: 直接运行Streamlit

python3 -m streamlit run streamlit_app.py --server.port=8503 --server.address=0.0.0.0

访问应用

使用说明

  1. 上传PDF文件: 支持多文件选择,仅支持包含文本层的PDF
  2. 选择处理模式:
    • 单独处理: 逐个处理每个文件
    • 批量处理: 合并所有PDF文本后一次性处理
  3. 开始处理: 系统会自动提取PDF文本并调用AI进行结构化
  4. 下载结果: 以JSON格式导出结构化数据

技术架构

  • 前端: Streamlit Web界面
  • PDF处理: pdfplumber (仅文本层,无OCR)
  • AI模型: OpenAI GPT-5-mini
  • 数据格式: JSON Schema驱动的结构化输出
  • 网络: httpx异步HTTP客户端
  • 配置: Pydantic Settings环境变量管理

注意事项

  • 仅支持包含文本层的PDF文件
  • 不支持扫描件或图片格式的PDF
  • 需要有效的OpenAI API密钥
  • 处理大文件可能需要较长时间
  • 确保网络连接稳定

🔧 故障排除

常见问题

❓ "AI数据提取未启用"

# 检查API密钥是否正确设置
cat .env
# 确保OPENAI_API_KEY格式正确:sk-proj-...

❓ 模块导入错误

# 检查是否安装了所有依赖
python3 -c "import streamlit, pdfplumber, httpx, pydantic; print('所有依赖已安装')"

❓ PDF解析失败

  • 确认PDF包含可选择的文本(不是扫描件)
  • 尝试在PDF阅读器中选择文字来验证
  • 某些PDF可能有特殊编码,可尝试重新生成

❓ API调用超时

  • 检查网络连接稳定性
  • 尝试处理更小的文件
  • 确认OpenAI服务状态正常

🤝 贡献

欢迎贡献代码!请查看 CONTRIBUTING.md 了解详细的贡献指南。

快速贡献步骤

  1. Fork 这个仓库
  2. 创建你的功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建一个 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

📞 联系方式

如有问题或建议,请:


⭐ 如果这个项目对你有帮助,请给它一个星标!

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages