一个基于 Streamlit 的智能文档内容抽取应用,能够从非结构化文档中提取结构化数据并输出为 JSON 格式。
- 📄 多格式支持: 支持 PDF、DOCX、DOC、TXT 等文档格式
- 🤖 AI 驱动: 集成 Qwen-Plus/Qwen-Turbo 模型进行智能内容识别
- 📊 多内容类型: 支持文本、表格、图片、图表等多种内容类型
- 🔍 数据验证: 内置 LLM 验证机制确保提取数据的准确性
- 📱 简洁界面: 基于 Streamlit 的直观用户界面
- 🏭 模块化设计: 采用工厂模式,易于扩展新的文档类型
- Python 3.11+
- Streamlit: Web 应用框架
- pdfplumber: PDF 文档解析
- Qwen API: 大语言模型服务
- loguru: 彩色日志输出
- Poetry: 依赖管理
# 克隆项目
git clone <repository-url>
cd readudata
# 安装 Poetry (如果未安装)
curl -sSL https://install.python-poetry.org | python3 -
# 安装依赖
poetry install# 复制环境变量模板
cp .env.example .env
# 编辑 .env 文件,填入您的 Qwen API Key
QWEN_API_KEY=your_qwen_api_key_here# 激活虚拟环境
poetry shell
# 启动 Streamlit 应用
streamlit run app.py应用将在 http://localhost:8501 启动。
- 上传文档: 在左侧面板选择并上传支持的文档文件
- 配置选项: 选择 LLM 模型和处理选项
- 开始处理: 点击"开始处理"按钮
- 查看结果: 在右侧面板查看提取的结构化数据
- 下载结果: 下载 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
- 继承
BaseParser类 - 实现
can_parse()和parse()方法 - 在
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_client.py 中的 _build_extraction_prompt() 方法中自定义不同内容类型的提示词。
- 将代码推送到 GitHub 仓库
- 在 Streamlit Cloud 创建应用
- 在 Streamlit Cloud 中配置环境变量
- 部署应用
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"]- API Key 安全: 请妥善保管您的 Qwen API Key,不要提交到版本控制系统
- 文件大小限制: 大文件可能导致处理时间较长,建议分块处理
- 网络连接: 需要稳定的网络连接以访问 Qwen API 服务
- 数据隐私: 上传的文档内容会发送到 Qwen API 进行处理,请注意数据隐私
MIT License
欢迎提交 Issue 和 Pull Request!