跳到主要内容

Dolphin

Dolphin 是一个高性能的文档解析引擎,专为生产环境设计,提供稳定可靠的文档处理能力,支持PDF、Word、Excel等多种格式的高效解析和转换。

🌟 核心特性

  • 高性能:优化的解析引擎,处理速度快
  • 生产就绪:稳定可靠,适合企业级部署
  • 多格式支持:PDF、DOCX、XLSX、PPTX等
  • 流式处理:支持大文件的流式解析
  • 分布式架构:支持横向扩展
  • 监控完善:详细的性能指标和日志
  • 容器化部署:Docker/K8s友好
  • API友好:RESTful API和SDK

📦 安装与部署

Docker部署

# 拉取镜像
docker pull dolphin/parser:latest

# 运行容器
docker run -d \
--name dolphin-parser \
-p 8080:8080 \
-v /data:/data \
dolphin/parser:latest

# 健康检查
curl http://localhost:8080/health

Kubernetes部署

apiVersion: apps/v1
kind: Deployment
metadata:
name: dolphin-parser
spec:
replicas: 3
selector:
matchLabels:
app: dolphin
template:
metadata:
labels:
app: dolphin
spec:
containers:
- name: dolphin
image: dolphin/parser:latest
ports:
- containerPort: 8080
resources:
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10

Python SDK

pip install dolphin-parser

🏗️ 技术架构

graph TB
A[客户端] --> B[API Gateway]
B --> C[负载均衡]
C --> D[Parser Worker 1]
C --> E[Parser Worker 2]
C --> F[Parser Worker N]

D --> G[文件存储]
E --> G
F --> G

D --> H[Redis缓存]
E --> H
F --> H

D --> I[监控系统]
E --> I
F --> I

🎯 应用场景

1. RESTful API使用

import requests

# 上传并解析文档
def parse_document(file_path):
"""通过API解析文档"""
url = "http://localhost:8080/api/v1/parse"

with open(file_path, "rb") as f:
files = {"file": f}
response = requests.post(url, files=files)

if response.status_code == 200:
result = response.json()
return result
else:
raise Exception(f"解析失败: {response.text}")

# 使用示例
result = parse_document("document.pdf")
print(f"文本内容: {result['text']}")
print(f"页数: {result['pages']}")

2. Python SDK使用

from dolphin import DolphinParser

# 初始化客户端
client = DolphinParser(
api_url="http://localhost:8080",
api_key="your_api_key"
)

# 解析文档
result = client.parse("document.pdf")

# 获取结果
print(f"文本: {result.text}")
print(f"元数据: {result.metadata}")
print(f"表格数量: {len(result.tables)}")

# 导出为不同格式
markdown = result.to_markdown()
json_data = result.to_json()

3. 批量处理

from dolphin import DolphinParser
from pathlib import Path
import concurrent.futures

def batch_parse_documents(input_dir, output_dir):
"""批量解析文档"""
client = DolphinParser(api_url="http://localhost:8080")

input_path = Path(input_dir)
output_path = Path(output_dir)
output_path.mkdir(exist_ok=True)

# 获取所有文档
files = list(input_path.glob("*.pdf"))

def process_file(file_path):
try:
# 解析文档
result = client.parse(str(file_path))

# 保存结果
output_file = output_path / f"{file_path.stem}.md"
with open(output_file, "w", encoding="utf-8") as f:
f.write(result.to_markdown())

return {"file": file_path.name, "status": "success"}
except Exception as e:
return {"file": file_path.name, "status": "error", "error": str(e)}

# 并发处理
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
results = list(executor.map(process_file, files))

return results

4. 流式处理大文件

from dolphin import DolphinParser

def stream_parse_large_file(file_path):
"""流式处理大文件"""
client = DolphinParser()

# 流式解析
for page_result in client.parse_stream(file_path):
print(f"页码 {page_result.page_num}:")
print(f"文本: {page_result.text[:100]}...")

# 实时处理每一页
process_page(page_result)

print("处理完成")

def process_page(page_result):
"""处理单页结果"""
# 保存到数据库、发送到队列等
pass

5. 异步处理

import asyncio
from dolphin import AsyncDolphinParser

async def async_parse(file_path):
"""异步解析"""
client = AsyncDolphinParser(api_url="http://localhost:8080")

# 提交解析任务
task_id = await client.submit_parse_task(file_path)
print(f"任务ID: {task_id}")

# 轮询任务状态
while True:
status = await client.get_task_status(task_id)

if status.state == "completed":
result = await client.get_task_result(task_id)
return result
elif status.state == "failed":
raise Exception(f"解析失败: {status.error}")

await asyncio.sleep(1)

# 使用
result = asyncio.run(async_parse("large_document.pdf"))

6. 集成到数据管道

from dolphin import DolphinParser
from airflow import DAG
from airflow.operators.python import PythonOperator

def parse_documents_task(**context):
"""Airflow任务:解析文档"""
client = DolphinParser()

# 从上游任务获取文件列表
files = context['task_instance'].xcom_pull(task_ids='get_files')

results = []
for file_path in files:
result = client.parse(file_path)
results.append({
'file': file_path,
'text': result.text,
'metadata': result.metadata
})

# 传递给下游任务
return results

# 定义DAG
with DAG('document_processing', schedule_interval='@daily') as dag:
parse_task = PythonOperator(
task_id='parse_documents',
python_callable=parse_documents_task
)

🔧 高级配置

性能优化

from dolphin import DolphinParser, Config

# 创建配置
config = Config(
# 并发配置
max_workers=10,
queue_size=100,

# 缓存配置
enable_cache=True,
cache_ttl=3600,

# 超时配置
request_timeout=30,
parse_timeout=300,

# 重试配置
max_retries=3,
retry_delay=1
)

# 使用配置
client = DolphinParser(config=config)

监控配置

from dolphin import DolphinParser, MetricsExporter

# 配置监控
metrics = MetricsExporter(
prometheus_port=9090,
enable_logging=True,
log_level="INFO"
)

client = DolphinParser(metrics=metrics)

# 查看指标
stats = client.get_metrics()
print(f"总处理数: {stats.total_processed}")
print(f"成功率: {stats.success_rate}%")
print(f"平均处理时间: {stats.avg_time}s")

分布式配置

from dolphin import DistributedParser

# 配置分布式解析
parser = DistributedParser(
workers=[
"http://worker1:8080",
"http://worker2:8080",
"http://worker3:8080"
],
load_balancer="round_robin", # round_robin/least_connections
health_check_interval=10
)

# 自动负载均衡
result = parser.parse("large_document.pdf")

📊 性能指标

指标性能
吞吐量100-500 文档/分钟
延迟P50: 2s, P99: 10s
CPU使用率60-80%
内存占用2-4GB
可用性99.9%

💡 最佳实践

  1. 合理配置资源

    # 根据文档大小调整资源
    小文档(< 10MB): 1CPU, 2GB内存
    中等文档(10-50MB): 2CPU, 4GB内存
    大文档(> 50MB): 4CPU, 8GB内存
  2. 使用缓存

    # 启用缓存避免重复解析
    client = DolphinParser(enable_cache=True)
  3. 监控告警

    # 配置告警规则
    - 解析失败率 > 5%
    - 平均延迟 > 30s
    - CPU使用率 > 90%
  4. 优雅降级

    try:
    result = client.parse(file_path)
    except Exception:
    # 降级到基础解析
    result = basic_parse(file_path)

📚 资源链接

⚠️ 注意事项

  • 生产环境建议部署3个以上节点
  • 定期清理缓存避免磁盘占满
  • 监控内存使用,避免OOM
  • 大文件建议使用流式处理
  • 配置合理的超时时间

🆚 适用场景

选择 Dolphin 当:

  • 生产环境部署
  • 需要高可用性
  • 大规模文档处理
  • 需要监控和告警
  • 分布式架构

选择其他工具当:

  • 开发测试环境 → 轻量级工具
  • 单机使用 → 本地工具
  • 特殊格式 → 专用工具

🔄 更新日志

  • 2024.06: v2.1 - 性能优化
  • 2024.03: v2.0 - 分布式支持
  • 2023.12: v1.5 - 流式处理
  • 2023.09: v1.0 - 首次发布