跳转至

Python SDK

本地 Python SDK

mineru.parser 提供无状态的 parseparse_asyncMinerUParser 和统一的 ParseResult,不会建立文档库。PDF 页范围默认全部,page_range="1-3" 使用从 1 开始的页码。

from pathlib import Path
from mineru.parser import parse, ParseResult

result = parse("document.pdf", tier="flash", ocr_mode="txt", page_range="1-3")
Path("document.md").write_text(result.markdown(), encoding="utf-8")
Path("document.json").write_text(result.to_json(), encoding="utf-8")
restored = ParseResult.from_json(result.to_json())
assert restored.to_dict() == result.to_dict()

原生文档调用 parse("report.docx", tier="flash");不传 PDF 专用页范围。PDF/图片的高质量解析可使用 tier="standard"tier="advanced",需要准备对应运行环境和模型。

异步入口接受同样的解析选项:

import asyncio
from mineru.parser import parse_async

result = asyncio.run(parse_async("report.docx", tier="flash"))
print(result.markdown())

在已有事件循环中直接 await parse_async(...)。异步接口不保证所有引擎采用相同的执行机制。

连接自部署 V1 API

先在服务环境启动:

mineru-kit api-server --host 127.0.0.1 --port 8000 --tier standard

Python 客户端负责能力发现、文件提交、任务轮询和结果下载:

from mineru.parser import MinerUApiParser

parser = MinerUApiParser(
    api_url="http://127.0.0.1:8000",
    api_key="",
    tier="standard",
    include_images=True,
)
result = parser.parse("document.pdf", page_range="1-3")
print(result.markdown())

api_url/v1 之前的服务根地址。API Key 从配置或环境读取时,使用 MINERU_API_KEY;不要把密钥写入源码。连接其他机器意味着文件可能上传到该服务。WebUI 可连接同一地址:

mineru-kit webui --api-url http://127.0.0.1:8000

批量处理与实例复用

批量处理时复用同一个 MinerUApiParser 实例,不要每个文件新建一个;每次调用各自开合 HTTP 会话,无需显式释放资源。HTTP 层以任务状态和逐文件 error 表达失败;Python SDK 会将 failed/canceled 终态(以及网络/HTTP 错误)转换为异常,因此批处理应逐文件捕获、记录汇总,并按明确的策略退出:

import sys
from pathlib import Path
from mineru.parser import MinerUApiParser

pdfs = sorted(Path("./documents").glob("*.pdf"))
if not pdfs:
    sys.exit("./documents 下没有输入文件")

output_dir = Path("out")
output_dir.mkdir(parents=True, exist_ok=True)

parser = MinerUApiParser(api_url="http://127.0.0.1:8000", tier="standard", include_images=True)
failures: list[tuple[str, str]] = []
for pdf in pdfs:
    try:
        result = parser.parse(str(pdf))
        (output_dir / f"{pdf.stem}.md").write_text(result.markdown(), encoding="utf-8")
    except Exception as exc:  # 终态任务失败与传输错误都会抛出异常
        failures.append((pdf.name, str(exc)))
        print(f"failed: {pdf.name}: {exc}")

if failures:
    sys.exit(f"{len(failures)}/{len(pdfs)} 个文件失败")

关注吞吐时检查服务日志和 GET /v1/usage。档位选择见档位与运行环境,底层请求周期见 V1 HTTP API 完整示例

不使用 SDK 的 HTTP 调用

上传 → 任务 → 轮询 → 下载的闭环也可以直接用 HTTP 调用完成。V1 HTTP API 完整示例 提供了完整的 curl 示例,覆盖完成上传、终态处理(含 partial)、客户端超时后继续轮询和产物下载。

4.0 V1 服务不提供旧 /file_parse/tasks 路由。既有客户端迁移见迁移指南,Python 渲染与结果保存见输出格式