Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .env.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# ========================================
# MMDocParser 环境变量配置
# ========================================

# ===== 服务配置 =====
# 服务监听主机
HOST=0.0.0.0
# 服务监听端口
PORT=8000
# 工作进程数量
WORKERS=4

# ===== CORS配置 =====
# 允许的跨域来源,多个用逗号分隔
CORS_ORIGINS=*

# ===== 文件限制配置 =====
# 最大文件大小(支持格式:100MB, 100M, 104857600)
MAX_FILE_SIZE=100MB
# 单次请求最大文件数量
MAX_FILES_PER_REQUEST=20

# ===== Redis配置 =====
# Redis连接URL
REDIS_URL=redis://localhost:6379
# 任务队列名称
TASK_QUEUE=document_parsing_queue
# 任务状态前缀
TASK_STATUS_PREFIX=task_status

# ===== S3配置 =====
# S3兼容存储端点
S3_ENDPOINT=http://localhost:9000
# S3访问密钥
S3_ACCESS_KEY=minioadmin
# S3秘密密钥
S3_SECRET_KEY=minioadmin
# S3存储桶名称
S3_BUCKET=documents
# S3区域
S3_REGION=us-east-1

# ===== 任务配置 =====
# 任务超时时间(秒)
TASK_TIMEOUT=3600

# ===== 开发环境配置 =====
# 调试模式
DEBUG=false
# 日志级别
LOG_LEVEL=INFO
124 changes: 123 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,124 @@
# TriModalParser
# MMDocParser

一个专业的文档解析服务,支持提取文档中的文字、图片、表格、公式等信息。

## 功能特性

- 🚀 **异步处理**:基于Sanic的高性能异步Web框架
- 📁 **多格式支持**:PDF、DOCX、XLSX等
- 🔄 **任务队列**:Redis任务队列,支持异步处理
- ☁️ **云存储**:S3兼容存储,支持大文件
- 📊 **状态跟踪**:实时查询任务状态和结果
- 🏥 **健康检查**:服务健康状态监控


## 快速开始

### 1. 环境要求

- Python 3.12+
- Redis 6.0+
- S3兼容存储(MinIO/AWS S3)

### 2. 安装依赖

```bash
# 使用uv安装
uv sync
```

### 3. 配置环境变量

```bash
# 复制环境变量模板
cp .env.template .env

# 编辑配置
```

### 4. 启动服务

```bash
# 方式1:使用启动脚本
python run.py

# 方式2:直接运行
sanic main:app --host 0.0.0.0 --port 8000 --workers 4
```

## API接口

### 1. 上传文档

```http
POST /api/v1/documents/upload
Content-Type: application/json

{
"files": [
{
"name": "document.pdf",
"content": "base64编码的文件内容"
}
]
}
```

### 2. 查询任务状态

```http
GET /api/v1/tasks/{task_id}/status
```

### 3. 获取解析结果

```http
GET /api/v1/tasks/{task_id}/result
```

### 4. 健康检查

```http
GET /health
```

## 项目结构

```
MMDocParser/
├── main.py # 主应用文件
├── run.py # 启动脚本
├── config.py # 配置管理
├── storage/ # 存储相关
│ ├── s3_client.py # S3客户端
│ └── redis_client.py # Redis客户端
├── parsers/ # 文档解析器
│ └── document_parser.py # 解析器基类和实现
├── utils/ # 工具函数
│ └── validators.py # 验证工具
└── pyproject.toml # 项目配置
```

## 开发指南

### 添加新的文档格式支持

1. 在 `parsers/document_parser.py` 中创建新的解析器类
2. 继承 `DocumentParser` 基类
3. 实现 `parse()` 和 `can_parse()` 方法
4. 在 `DocumentParserFactory` 中注册新解析器

## 部署

### Docker部署

### 生产环境配置

## 许可证

MIT License

## 贡献

欢迎提交Issue和Pull Request!

8 changes: 8 additions & 0 deletions __init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
"""
MMDocParser - 文档解析服务

一个专业的文档解析服务,支持提取文档中的文字、图片、表格、公式等信息。
"""

__version__ = "0.1.0"
__author__ = "MMDocParser Team"
36 changes: 36 additions & 0 deletions config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import os

import dotenv

dotenv.load_dotenv()

class Settings:
"""应用配置类"""
HOST: str = os.getenv("HOST", "127.0.0.1")
PORT: int = int(os.getenv("PORT", "8000"))
WORKERS: int = int(os.getenv("WORKERS", "4"))

# CORS配置
CORS_ORIGINS: list[str] = os.getenv("CORS_ORIGINS", "*").split(",")

# 文件限制
MAX_FILE_SIZE: int = int(os.getenv("MAX_FILE_SIZE", str(100 * 1024 * 1024))) # 100MB
SUPPORTED_FORMATS: list[str] = ["pdf", "docx", "doc","xlsx"]

# Redis配置
REDIS_URL: str = os.getenv("REDIS_URL", "redis://localhost:6379")
TASK_QUEUE: str = os.getenv("TASK_QUEUE", "document_parsing_queue")
TASK_STATUS_PREFIX: str = os.getenv("TASK_STATUS_PREFIX", "task_status")

# S3配置
S3_ENDPOINT: str = os.getenv("S3_ENDPOINT", "http://localhost:9000")
S3_ACCESS_KEY: str = os.getenv("S3_ACCESS_KEY", "minioadmin")
S3_SECRET_KEY: str = os.getenv("S3_SECRET_KEY", "minioadmin")
S3_BUCKET: str = os.getenv("S3_BUCKET", "documents")
S3_REGION: str = os.getenv("S3_REGION", "us-east-1")

# 任务配置
MAX_FILES_PER_REQUEST: int = int(os.getenv("MAX_FILES_PER_REQUEST", "20"))
TASK_TIMEOUT: int = int(os.getenv("TASK_TIMEOUT", "3600")) # 1小时

settings = Settings()
Loading
Loading