Files

182 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 文档提取微服务
基于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页PDFPyMuPDF | <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