MarkItDown:一条命令把 PDF、Word 等 10 余种格式转成 Markdown 的完整入门指南
【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown
MarkItDown 是微软 AutoGen 团队出品的 Python 文档转换工具,能把 PDF、Word、Excel、PPT、图片、音频、网页等 10 余种格式转成结构化 Markdown,保留标题、列表、表格和链接。如果你需要把办公文档喂给 LLM、做全文检索或文本分析,读完本文你可以用 3 步装好并跑通转换,并清楚哪些格式需要额外安装哪些依赖。
快速上手:3 步跑通第一次文档转换
- 准备 Python 3.10 及以上环境,建一个虚拟环境;
- 安装并执行转换:
pip install 'markitdown[all]' markitdown report.pdf -o report.md- 打开
report.md检查产出。
预期结果:得到带 Markdown 语法的正文,标题、表格、列表都保留了原有结构。
💡 提示:文件也可以走标准输入,例如cat report.pdf | markitdown;想用容器,可用仓库自带的 Dockerfile 构建镜像后执行docker run --rm -i markitdown:latest < report.pdf > out.md。想从源码安装,则克隆仓库(https://gitcode.com/GitHub_Trending/ma/markitdown )后执行pip install -e packages/markitdown[all]。
能转换什么:12 类格式与对应依赖
| 格式 | 转换内容 | 安装方式 |
|---|---|---|
| 文本与表格 | markitdown[pdf] | |
| Word(.docx) | 标题、列表、表格 | markitdown[docx] |
| Excel(.xlsx/.xls) | 工作表转 Markdown 表格 | markitdown[xlsx]/[xls] |
| PowerPoint(.pptx) | 幻灯片文字 | markitdown[pptx] |
| Outlook 邮件(.msg) | 邮件正文 | markitdown[outlook] |
| 图片 | EXIF 元数据,可接 LLM 描述 | 内置 |
| 音频 | EXIF 元数据,wav/mp3 语音转写 | markitdown[audio-transcription] |
| HTML / RSS / 网页 | 结构化正文 | 内置 |
| CSV / JSON / XML | 文本格式直接转写 | 内置 |
| EPUB | 书籍正文 | 内置 |
| ZIP | 逐个遍历包内文件 | 内置 |
| YouTube 链接 | 抓取视频转写 | markitdown[youtube-transcription] |
Office 三件套:结构保留是重点
Word、Excel、PPT 是日常最高频的输入。转换时标题层级、项目符号列表、表格边框内容都会映射为对应 Markdown 语法,Excel 的每个工作表都会单独输出。调用方式就是上面那条markitdown命令,或在 Python 里md.convert("report.xlsx")。
注意:MarkItDown 的产出面向文本分析和 LLM 消费,排版可读性通常够用,但不要拿它替代面向人类阅读的高保真排版转换。
图片、音频等非文本格式
图片默认输出 EXIF 元数据;如果你传入llm_client和llm_model(目前作用于图片和 PPTX 中的图片),它会改由大模型生成图片描述。音频支持 wav/mp3 的语音转写,需要安装[audio-transcription]依赖。ZIP 则会被逐个解包转换,适合处理批量压缩包。
可扩展:插件与云端增强
插件默认关闭。用markitdown --list-plugins查看已装插件,加-p参数启用。官方markitdown-ocr插件用 LLM Vision 对 PDF、DOCX、PPTX、XLSX 中嵌入图片里的文字做 OCR,复用同一套llm_client/llm_model配置。云端方面:-d可接 Azure Document Intelligence,--use-cu可接 Azure Content Understanding,后者能抽取结构化字段(输出为 YAML front matter)并覆盖视频场景。
💡 提示:OCR 插件若没有传入llm_client,会静默跳过 OCR 并回退到内置转换器,不会报错,排查时先确认这个配置。
实战演示:两个高频用法
场景一:论文 PDF 批量转 Markdown 入库
背景:你有一批论文 PDF,要放进检索或问答管线。
- 确认装了
[pdf]依赖; - 执行
markitdown paper.pdf -o paper.md; - 检查产出中的标题层级与表格。
预期结果:摘要、章节标题、正文段落都成为规范的 Markdown,可直接交给下游工具批量处理。
图:这类论文首页经转换后,标题、作者列表与正文段落结构都会保留在 Markdown 中。
场景二:让 LLM 替图片写描述
背景:PPT 或截图里的关键信息是图像,纯文本提取拿不到。
- 安装 OpenAI 客户端(或任意兼容客户端);
- 用下面方式初始化并转换图片:
from markitdown import MarkItDown from openai import OpenAI md = MarkItDown(llm_client=OpenAI(), llm_model="gpt-4o") print(md.convert("test_llm.jpg").text_content)- 查看打印结果。
预期结果:输出不再是 EXIF 数据,而是 LLM 生成的图片内容描述,图片里的文字与图形语义进入了文本管线。
图:仓库自带的 LLM 描述测试图,图中的文字指令与几何图形都会被模型读进输出。
避坑调优:3 个常见现象的解法
- 现象:装了 markitdown 却转换 PDF 报缺依赖。原因:基础包不含全部格式的可选依赖。解法:按格式安装 extras,如
pip install 'markitdown[pdf, docx, pptx]'。 - 现象:从标准输入读取时提示无法识别格式。原因:没有文件名可供推断格式。解法:用
-x pdf或-m application/pdf给出扩展名/MIME 提示。 - 现象:服务端部署时担心读到任意文件或 URI。原因:
convert()会处理本地文件、远程 URI 和字节流,且以当前进程权限做 I/O。解法:⚠️ 先做输入清洗,并改调最窄的接口:只读本地文件用convert_local(),自控网络请求用convert_response(),纯流式用convert_stream()。
横向对比:MarkItDown、Pandoc 与 textract 怎么选
| 维度 | MarkItDown | Pandoc | textract |
|---|---|---|---|
| 定位 | 文件转 Markdown,面向 LLM 与文本分析 | 通用文档转换,输出格式多 | 文本提取,主要产出纯文本 |
| 媒体处理 | 图片元数据/LLM 描述、音频转写、OCR 插件 | 非重点 | 非重点 |
| 调用方式 | Python API + CLI + Docker + 插件 | 以 CLI 为主 | Python 库 |
| 结构保留 | 标题、列表、表格、链接 | 保留文档结构 | 基础文本 |
结论:把文档交给 LLM 或检索系统选 MarkItDown;需要在多种出版格式间互相转换选 Pandoc;只想快速提取纯文本,textract 足够。
资源索引
- 官方文档:仓库根目录
README.md,含全部 CLI 参数与云端服务配置说明 - 核心源码:
packages/markitdown/src/markitdown/,各格式转换器位于其converters/子目录 - OCR 插件:
packages/markitdown-ocr/;插件开发示例:packages/markitdown-sample-plugin/ - 社区:项目 Issues 页面可反馈问题;第三方插件可在代码托管平台搜索
#markitdown-plugin标签
MarkItDown 的边界很清楚:离线转换免费且快,但输出服务于文本分析而非高保真排版,视频文件则必须走 Azure Content Understanding 云端路线。建议从pip install 'markitdown[all]'加一条markitdown命令起步,按实际处理的格式再收敛依赖,够用且不臃肿。
【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考