# 文档提取微服务

基于FastAPI的文档文本提取服务，支持PDF、Docx、Txt格式。

## 功能特性

- ✅ **PDF提取**：使用PyMuPDF快速提取PDF文本
- ⏳ **Docx提取**：使用Mammoth提取Word文档（Day 3）
- ⏳ **Txt提取**：支持多种编码（Day 3）
- ⏳ **语言检测**：自动检测PDF语言（Day 2）
- ⏳ **Nougat集成**：高质量学术PDF解析（Day 2）

## 快速开始

### 1. 安装依赖

```bash
cd extraction_service

# 创建虚拟环境（推荐）
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt
```

### 2. 配置环境变量

```bash
# 复制示例配置
cp .env.example .env

# 编辑配置（可选）
# SERVICE_PORT=8000
# DEBUG=True
```

### 3. 启动服务

```bash
# 开发模式（自动重载）
python main.py

# 或使用uvicorn
uvicorn main:app --reload --port 8000
```

服务将在 http://localhost:8000 启动

### 4. 测试服务

#### 健康检查

```bash
curl http://localhost:8000/api/health
```

返回：
```json
{
  "status": "healthy",
  "checks": {
    "pymupdf": {
      "available": true,
      "version": "1.23.8"
    },
    "temp_dir": {
      "path": "/tmp/extraction_service",
      "writable": true
    }
  }
}
```

#### PDF文本提取

```bash
curl -X POST http://localhost:8000/api/extract/pdf \
  -F "file=@test.pdf"
```

返回：
```json
{
  "success": true,
  "method": "pymupdf",
  "text": "提取的文本内容...",
  "metadata": {
    "page_count": 20,
    "char_count": 50000,
    "file_size": 1024000,
    "filename": "test.pdf"
  }
}
```

## API文档

启动服务后访问：
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc

## 项目结构

```
extraction_service/
├── main.py              # 主应用入口
├── requirements.txt     # Python依赖
├── .env.example         # 环境变量示例
├── README.md           # 本文件
├── services/           # 服务模块
│   ├── __init__.py
│   ├── pdf_extractor.py      # PDF提取（PyMuPDF）
│   ├── nougat_extractor.py   # Nougat提取（Day 2）
│   ├── docx_extractor.py     # Docx提取（Day 3）
│   ├── txt_extractor.py      # Txt提取（Day 3）
│   ├── language_detector.py  # 语言检测（Day 2）
│   └── file_utils.py         # 文件工具
└── tests/              # 测试文件（待添加）
```

## 开发计划

### ✅ Day 1（已完成）
- [x] FastAPI项目搭建
- [x] PyMuPDF集成
- [x] PDF文本提取功能
- [x] 健康检查API

### ⏳ Day 2（进行中）
- [ ] 安装Nougat
- [ ] 语言检测功能
- [ ] Nougat提取逻辑
- [ ] 顺序降级机制

### ⏳ Day 3
- [ ] Docx提取（Mammoth）
- [ ] Txt提取（多编码）
- [ ] 文件格式验证

## 依赖说明

| 库 | 版本 | 用途 |
|---|---|---|
| fastapi | 0.104.1 | Web框架 |
| uvicorn | 0.24.0 | ASGI服务器 |
| PyMuPDF | 1.23.8 | PDF文本提取 |
| pdfplumber | 0.10.3 | PDF语言检测 |
| mammoth | 1.6.0 | Docx提取 |
| langdetect | 1.0.9 | 语言检测 |
| loguru | 0.7.2 | 日志管理 |

## 性能指标

| 操作 | 目标时间 |
|---|---|
| 20页PDF（PyMuPDF） | <30秒 |
| 10页Docx | <10秒 |
| 1MB Txt | <5秒 |

## 常见问题

### Q: PyMuPDF安装失败？
A: 确保Python版本>=3.8，使用pip安装：`pip install PyMuPDF`

### Q: 服务无法启动？
A: 检查端口8000是否被占用，可修改.env中的SERVICE_PORT

### Q: 临时文件在哪里？
A: 默认在/tmp/extraction_service目录，可通过TEMP_DIR环境变量配置

## License

MIT






