markitdown 完整教程:5 步把 PDF、Word、EPUB 转成 LLM 能用的 Markdown
【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown
markitdown 是一个 Python 文件转 Markdown 转换工具,一条命令把 PDF、Word、PPT、Excel、EPUB、图片、音频转成保留标题和表格的结构化 Markdown。本文带你装好它、跑通第一条命令,再按你的真实任务挑出该用的命令。
它到底解决什么问题
一句话定位:把各种文档"压"成给大模型和文本流水线消费的 Markdown,而不是给人看的排版页面。
✅适合干:文档要进 RAG 问答、建知识库;批量整理 Office 文件;文件不能出本地的离线转换(默认路径全程不经过任何服务器)。
❌别指望它:像素级排版还原。官方定位写得很清楚,输出是"给文本分析工具消费的",不适合二次出版。
⚠️要额外注意:扫描版 PDF。内置转换器只读文字层,读不到页面里的图,需要加 OCR 插件或接云端端点(见后文)。
最小可运行闭环:装好、跑一条、看产出
第一步,安装。需要 Python 3.10+,[all]一次装齐所有格式支持:
pip install "markitdown[all]"只想要某几种格式可以按需装,比如pip install "markitdown[pdf,docx]"。想从源码跑:
git clone https://gitcode.com/GitHub_Trending/ma/markitdown pip install -e "packages/markitdown[all]"第二步,跑第一条命令。任何受支持的文件都是"文件名进、Markdown 出":
markitdown book.epub -o book.md-o指定输出文件;不加时结果直接打印到终端,适合快速预览。
第三步,看产出。打开book.md你会发现正文前多了几行加粗字段——markitdown 会解析 EPUB 的 content.opf,把书名、作者、出版社自动带出来。转 PDF、Word 也一样,标题、列表、表格会变成对应的 Markdown 结构,而不是糊成一大段。
按你的真实任务挑用法
把 PDF 论文喂进大模型
- 任务场景:GPT-4o 这类模型原生"说" Markdown,token 消耗低,"文档 → Markdown"是喂料的标准动作。下面这张是项目测试素材里的一页学术论文:
- 命令:
markitdown paper.pdf -o paper.md(也支持管道:cat paper.pdf | markitdown) - 你会得到:标题、作者行、摘要、正文段落都变成结构化文本,可以直接切片喂给 RAG。注意前提是带文字层的数字 PDF,纯扫描件见下节。
把表格和幻灯片转成可检索文本
- 任务场景:会议纪要、财务报表要批量进文本库做全文检索。
- 命令:命令不变,换文件名即可,如
markitdown report.docx -o report.md - 你会得到:Excel 变成 Markdown 表格;PPT 按幻灯片切分;Word 保留标题层级,文档里的公式转成 LaTeX 写法。
把图片和音频提取成信息
- 任务场景:图片要留档元数据,录音要转文字。下图就是项目里专门测"LLM 生成图片描述"的样本素材:
- 命令:
markitdown photo.jpg(图片);音频需装pip install "markitdown[audio-transcription]"后markitdown meeting.wav;YouTube 链接可直接传(需[youtube-transcription]依赖) - 你会得到:图片输出 EXIF 字段(设备、拍摄时间、坐标),并可用
llm_client参数让 LLM 顺手生成一句描述;wav/mp3 输出转写文本。
批量转一整目录的文件 🔁
- 任务场景:没有专门的目录模式,套一层循环就行:
for f in *.pdf; do markitdown "$f" -o "out/${f%.pdf}.md" done- 命令:上面的 for 循环,
${f%.pdf}负责把扩展名换成 .md - 你会得到:整个目录一次转完,产出和单个文件完全一致。自动化流程建议改用 Python API:
from markitdown import MarkItDown,然后MarkItDown().convert("data.xlsx").markdown;服务端环境优先用convert_local(),只处理本地文件,比默认入口convert()更安全。
速查:常用参数与横向对比
| 参数 | 作用 |
|---|---|
-o | 指定输出文件,不加则打印到终端 |
-x | 提示文件扩展名(读 stdin 时有用) |
-m/-c | 提示 MIME 类型 / 文件编码 |
-p | 启用第三方插件(--list-plugins可先查看已装插件) |
-d/--use-cu | 改用 Azure Document Intelligence / Content Understanding 提取(付费云 API) |
--keep-data-uris | 输出中保留 base64 内嵌图片,默认会截断 |
和同类方案横向比一下:
| 维度 | markitdown | 在线转换工具 | 手动复制粘贴 |
|---|---|---|---|
| 处理位置 | 完全本地 ✅ | 上传第三方服务器 | 本地 |
| 结构保留 | 标题、表格、列表、链接 | 基础格式 | 容易断裂 |
| 元数据 | EPUB 等自动带出 | 大多丢失 | 没有 |
| 依赖 / 成本 | Python 3.10+,免费离线 | 浏览器 + 网络,看平台收费 | 无 |
| 批量能力 | 一条循环搞定 | 逐个上传 | 不可行 |
它不擅长什么
- 扫描版 PDF 转出空内容:现象是纯图片页面转出来什么都没有;原因是内置转换器只读文字层;出路是装 markitdown-ocr 插件 配 LLM 客户端(
enable_plugins=True, llm_client=...),或接-d/--use-cu云端端点。 - 版式还原得不够精细:现象是输出"能看但不像原文件";原因是它按文本分析需求取舍,不是排版引擎;出路是出版级需求换专业排版工具,别拿它硬扛。
- 视频完全转不了:现象是内置转换器没有视频支持;出路是接 Azure Content Understanding 端点,它是视频的唯一选项。
- 服务端处理陌生文件有风险:现象是它按当前进程权限做 I/O,能访问什么就读什么;原因是设计如此;出路是输入先做校验,并优先调
convert_local()/convert_stream()这类最窄入口(见 核心源码)。 - 音频、视频等高级依赖默认没装:现象是某些格式报缺少依赖;原因是可选依赖按格式拆分;出路是按需加
pip install "markitdown[audio-transcription]"这类 extras。
一句话选型建议
本地、离线、要结构化 Markdown 进大模型——默认就选 markitdown:装[all]覆盖绝大多数场景;要处理扫描件再加 OCR 插件,要出版级版式再换专业工具,别一步到位硬扛。
【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考