Skip to content

shawnsang/ReadUData

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ReadUData - 文档内容抽取工具

一个基于 Streamlit 的智能文档内容抽取应用,能够从非结构化文档中提取结构化数据并输出为 JSON 格式。

功能特性

  • 📄 多格式支持: 支持 PDF、DOCX、DOC、TXT 等文档格式
  • 🤖 AI 驱动: 集成 Qwen-Plus/Qwen-Turbo 模型进行智能内容识别
  • 📊 多内容类型: 支持文本、表格、图片、图表等多种内容类型
  • 🔍 数据验证: 内置 LLM 验证机制确保提取数据的准确性
  • 📱 简洁界面: 基于 Streamlit 的直观用户界面
  • 🏭 模块化设计: 采用工厂模式,易于扩展新的文档类型

技术栈

  • Python 3.11+
  • Streamlit: Web 应用框架
  • pdfplumber: PDF 文档解析
  • Qwen API: 大语言模型服务
  • loguru: 彩色日志输出
  • Poetry: 依赖管理

快速开始

1. 环境准备

# 克隆项目
git clone <repository-url>
cd readudata

# 安装 Poetry (如果未安装)
curl -sSL https://install.python-poetry.org | python3 -

# 安装依赖
poetry install

2. 配置 API Key

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

# 编辑 .env 文件,填入您的 Qwen API Key
QWEN_API_KEY=your_qwen_api_key_here

3. 运行应用

# 激活虚拟环境
poetry shell

# 启动 Streamlit 应用
streamlit run app.py

应用将在 http://localhost:8501 启动。

使用方法

  1. 上传文档: 在左侧面板选择并上传支持的文档文件
  2. 配置选项: 选择 LLM 模型和处理选项
  3. 开始处理: 点击"开始处理"按钮
  4. 查看结果: 在右侧面板查看提取的结构化数据
  5. 下载结果: 下载 JSON 格式的处理结果

项目结构

readudata/
├── src/
│   ├── __init__.py
│   ├── config.py              # 配置管理
│   ├── logger.py              # 日志配置
│   ├── llm_client.py          # LLM 客户端
│   ├── document_processor.py  # 文档处理器
│   └── parsers/
│       ├── __init__.py
│       ├── base_parser.py     # 解析器基类
│       └── pdf_parser.py      # PDF 解析器
├── orders/                    # 测试文档目录
├── app.py                     # Streamlit 主应用
├── pyproject.toml            # 项目配置和依赖
├── .env.example              # 环境变量模板
└── README.md                 # 项目说明

配置说明

环境变量

  • QWEN_API_KEY: Qwen API 密钥(必需)
  • QWEN_BASE_URL: Qwen API 基础 URL(可选)
  • LOG_LEVEL: 日志级别(可选,默认 INFO)

处理配置

  • 最大文件大小: 50MB
  • 每块最大 Token 数: 1000
  • 支持的文件类型: .pdf, .docx, .doc, .txt

扩展开发

添加新的文档解析器

  1. 继承 BaseParser
  2. 实现 can_parse()parse() 方法
  3. DocumentProcessorFactory 中注册新解析器
from src.parsers.base_parser import BaseParser

class NewDocumentParser(BaseParser):
    def can_parse(self, file_path: Path) -> bool:
        return file_path.suffix.lower() == '.new_format'
    
    def parse(self, file_path: Path) -> ParsedDocument:
        # 实现解析逻辑
        pass

自定义 LLM 提示词

llm_client.py 中的 _build_extraction_prompt() 方法中自定义不同内容类型的提示词。

部署

Streamlit Cloud 部署

  1. 将代码推送到 GitHub 仓库
  2. Streamlit Cloud 创建应用
  3. 在 Streamlit Cloud 中配置环境变量
  4. 部署应用

Docker 部署

FROM python:3.11-slim

WORKDIR /app
COPY . .

RUN pip install poetry && poetry install --no-dev

EXPOSE 8501

CMD ["poetry", "run", "streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]

注意事项

  1. API Key 安全: 请妥善保管您的 Qwen API Key,不要提交到版本控制系统
  2. 文件大小限制: 大文件可能导致处理时间较长,建议分块处理
  3. 网络连接: 需要稳定的网络连接以访问 Qwen API 服务
  4. 数据隐私: 上传的文档内容会发送到 Qwen API 进行处理,请注意数据隐私

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

About

一个基于 Streamlit 的智能文档内容抽取应用,能够从非结构化文档中提取结构化数据并输出为 JSON 格式。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors