MinerU PDF 转 Markdown
按下面流程执行,默认只处理单个 PDF;批量处理时循环调用同一命令。
依赖与前置条件
- •确保 MinerU API 服务可用。
- •服务端安装/启动参考
env_install/mineru_server_deploy.md。 - •客户端通常只需 SSH 端口转发到本机
18543,不需要重复安装 MinerU。 - •使用
python3运行脚本;requests需要已安装。
输入约定
- •必要输入:
pdf_path: 待转换 PDF 路径(绝对路径或相对路径均可)。 - •可选输入:
output_base: 输出根目录,默认example_data/md_with_images。api_url: API 地址,默认http://localhost:18543/file_parse。
标准执行流程
- •将
pdf_path拆成:input_base: PDF 所在目录。pdf_file_name: PDF 文件名。 - •可选:先计算标准化文件名,预估输出目录名。
python3 scripts/pdf_name_utils.py --pdf-file-name "<pdf_file_name>"
- •执行转换。
python3 scripts/mineru_pdf2md.py \ --input-base "<input_base>" \ --pdf-file-name "<pdf_file_name>" \ --output-base "<output_base>" \ --api-url "http://localhost:18543/file_parse"
- •检查输出目录
<output_base>/<normalized_pdf_name>/是否包含:<normalized_pdf_name>.mdcontent_list.jsonimages/(若原文含图)
输出结构说明(示例:Palimpzest)
以目录 example_data/md_with_images/Palimpzest_Liu_et_al_2024_A_Declarative_System_for_Optimizing_AI_Workloads/ 为例,输出结构如下:
Palimpzest_Liu_et_al_2024_A_Declarative_System_for_Optimizing_AI_Workloads/
├── Palimpzest_Liu_et_al_2024_A_Declarative_System_for_Optimizing_AI_Workloads.md
├── content_list.json
└── images/
├── <hash>.jpg
└── ...
- •
<normalized_name>.md: 主阅读文件,包含正文、标题、列表、图片引用、部分 HTML 表格。 图片以引用。 该示例中 Markdown 共引用 10 张图片。 - •
content_list.json: 结构化解析结果,顶层是list[object],按版面阅读顺序排列。 该示例共 315 条,包含 4 类type:text210 条discarded89 条image10 条table6 条 - •
images/: 保存服务端返回并解码后的图片文件。 该示例目录中共有 16 张图片,其中: 10 张对应image类型(通常在 Markdown 中被引用) 6 张对应table类型(常用于表格原图,不一定在 Markdown 中直接引用)
content_list.json 字段约定
- •
通用字段:
type: 块类型,取值通常为text/discarded/image/table。bbox: 版面坐标,格式[x0, y0, x1, y1],(x0,y0)是左上角坐标,(x1,y1)是右上角坐标。page_idx: 页码,从0开始。 - •
text: 字段通常为type,text,bbox,page_idx,部分条目有text_level(如标题层级)。 - •
discarded: 字段通常为type,text,bbox,page_idx,表示被识别但未纳入主正文的内容(如页眉页脚、侧边文字等)。 - •
image: 字段通常为type,img_path,image_caption,image_footnote,bbox,page_idx。img_path是相对当前输出目录的路径(如images/<hash>.jpg)。image_caption/image_footnote为字符串列表,可能为空列表。 - •
table: 字段通常为type,img_path,table_caption,table_body,table_footnote,bbox,page_idx。table_body是 HTML table 字符串,可直接渲染或二次转换。img_path对应表格截图,常用于回溯版面或做 OCR 复核。
下游消费建议
- •默认优先读取
<normalized_name>.md作为全文语义输入。 - •需要页码定位、版面坐标、结构化筛选时,再读取
content_list.json。 - •需要图表溯源时,用
content_list.json的img_path去images/取图,不要假设images/内文件都会出现在 Markdown 引用中。
批量处理模板
对一个目录内多个 PDF 批量处理时,循环调用脚本,不改脚本逻辑。
for f in /path/to/pdfs/*.pdf; do
python3 scripts/mineru_pdf2md.py \
--input-base "$(dirname "$f")" \
--pdf-file-name "$(basename "$f")" \
--output-base "/path/to/output" \
--api-url "http://localhost:18543/file_parse"
done
常见问题处理
- •连接失败(Connection refused / timeout):
先确认 API 进程是否运行,或 SSH 转发是否将远端
18543映射到本地18543。 - •
python3: No module named requests: 在当前环境安装requests后重试。 - •输出缺少图片目录:
通常表示文档无可导出图片,或服务端未返回
images字段;优先检查content_list.json和服务日志。