markitdown 实测:一行命令把办公文档转成 Markdown,RAG 文档预处理省下一整天
【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown
它解决什么问题
你手头有 30 份 PDF 合同、两个 PPT、一堆 Excel,想丢进向量数据库,结果每份文档解析出来都不一样:表格错乱、标题丢失、还有扫描件干脆没文字。这一步需要一个能统一吃下各种格式的入口。markitdown 就是干这个的:微软 AutoGen 团队开源的文档解析工具,一条命令或一个 API 调用,把文件转成 Markdown 输出。
一句话定位:从任意文件到 Markdown
markitdown 是一个轻量的 Python 包加命令行工具,核心就一件事:把 PDF、Word、PPT、Excel、图片、音频、网页这些格式转成 Markdown,专门给 LLM 和文本分析管道用。它的设计思路是"转换器注册表":每种格式一个独立转换器,文件进来后先做格式检测(扩展名、MIME 类型,再用 Google 的 magika 分析二进制内容),按优先级匹配到最合适的转换器执行,最后统一输出 Markdown。
这张图画的就是数据链路:不管你喂什么文件进来,中间统一过检测、匹配、转换三步,出口只有一种格式。
⚡ 它能帮你做什么
批量把 PDF 转成可检索文本
内置 PDF 转换器完全本地解析,不用联网,表格会尽量还原成 Markdown 表格。合同、论文这种批量场景直接套 shell 循环:
for f in ./contracts/*.pdf; do markitdown "$f" -o "${f%.pdf}.md" done这段就是把 contracts 目录下每个 PDF 转成同名 .md 文件。运行后你会看到每个 PDF 旁边多一个 Markdown 文件,标题层级、表格、甚至分页标记都保留着,可以直接丢进分片逻辑。下面这张论文首页就是典型的输入样例:
把 Word、PPT、Excel 一次转完
Office 三件套各有一个专属转换器:Word 走 mammoth 保结构,PPT 按幻灯片输出,Excel 直接变 Markdown 表格。注意这几家都要装对应的可选依赖组(见下节安装部分)。
markitdown report.docx > report.md markitdown data.xlsx -o data.md第一条把 Word 转完直接重定向存盘,第二条用 -o 指定输出文件。跑完你会看到 docx 里的标题、列表、链接原样变成 Markdown 语法,xlsx 里的每个 sheet 变成一张带表头的表格。
图片、音频也能转
图片转换器默认提取 EXIF 元数据;如果你传入 LLM 客户端,它会顺带生成图片描述,这对 PPT 里的插图特别有用:
from markitdown import MarkItDown from openai import OpenAI md = MarkItDown(llm_client=OpenAI(), llm_model="gpt-4o") print(md.convert("diagram.png").markdown)这段做的事就是:给 MarkItDown 挂一个 OpenAI 客户端,转换图片时自动让 LLM 描述图内容。下面是项目测试目录里实际用的那张测试图,转完它,描述就会跟元数据一起出现在输出里:
音频这边装 audio-transcription 组后支持 wav/mp3 转文字,YouTube 链接则能直接拉字幕。
进阶用法:云增强和第三方插件
两条进阶路线。一是接 Azure 文档智能处理扫描件和复杂版面,命令加-d参数并传 endpoint 即可;二是写自己的插件,仓库里就带了一个 RTF 转换的完整示例,装完插件后用下面命令启用:
markitdown --list-plugins markitdown --use-plugins notes.rtf第一条列出已安装的插件,第二条带插件跑转换。插件默认是关的,不传--use-plugins就不会加载,不会干扰内置逻辑。
安装与运行(markitdown 安装步骤)
环境要求先看清楚,再决定装哪组依赖:
| 项目 | 要求 / 说明 |
|---|---|
| 操作系统 | Windows / macOS / Linux 均可,取决于 Python 环境 |
| Python | 3.10 及以上 |
| 可选依赖组 | pdf、docx、pptx、xlsx、xls、outlook、audio-transcription、az-doc-intel 等,按需单独安装 |
最省事的方式是一次装全:
pip install 'markitdown[all]' markitdown report.pdf -o report.md第一行安装完整功能版,第二行就是 CLI 的最小用法。如果走 Python API,最小可运行示例是:
from markitdown import MarkItDown md = MarkItDown() print(md.convert("report.pdf").markdown)跑完你会在终端看到整份文档的 Markdown 文本,标题用#、表格用竖线,和手写 Markdown 没区别。
markitdown 和 pandoc、textract 怎么选
常被拿来对比的就是 textract 和 pandoc。textract 目标也是"任意文件转文本",但输出基本是纯文本,表格、层级这类结构大多丢掉了;只要文字内容、不在乎排版的话它够用,要喂 LLM 还是 markitdown 更合适。pandoc 强在文档格式互转和面向人的高保真输出,但每种格式基本要配一个二进制后端,部署负担重一些;你要做漂亮的格式转换就选它。一句话:给 LLM 和文本管道供料、要结构、要省事,选 markitdown;给人看的成品文档转换,选 pandoc。
踩坑与注意事项
- 转 PDF 报 MissingDependencyException:原因是核心包刻意不带格式解析器,每个格式都要装对应依赖组。绕法:
pip install 'markitdown[pdf,docx,pptx]'按需补齐,别等报错再装。 - 管道输入时识别错格式或转换失败:stdin 没有扩展名可看,纯靠内容检测不一定靠得住。绕法:加
-x .pdf给个扩展名提示,MIME 类型和字符集也可以用-m、-c显式指定。 - 扫描件 PDF 转出来几乎没内容:内置转换只提取文本层,纯扫描页没有文本层可提。绕法:接 Azure Document Intelligence(
-d -e <endpoint>),或装 markitdown-ocr 插件并传入llm_client,用视觉模型读图里的字;没传llm_client时插件会静默跳过 OCR。 - 大批量转换时内存和权限要注意:官方已给 PDF 转换器做了逐页释放的内存优化,但你自己把上百个大文件一次性读进内存列表还是会爆。绕法:顺序处理、边转边写盘、及时释放;另外转换是以当前进程权限做 I/O 的,处理不可信来源的文件前要先做输入校验,并优先调用
convert_stream()、convert_local()这类最小范围的接口,别直接暴露 URL 入口。
项目地址与下一步
源码仓库可以用下面命令拉下来,装成可编辑模式方便调试:
git clone https://gitcode.com/GitHub_Trending/ma/markitdown cd markitdown pip install -e 'packages/markitdown[all]'官方文档就是仓库根目录的 README.md,安装、可选依赖、Azure 集成都有完整说明。想深入的话,建议按这个顺序看:packages/markitdown/src/markitdown/converters/里每个文件就是一个格式的转换器,是理解行为差异最快的入口;packages/markitdown/src/markitdown/_markitdown.py里能看到转换器注册、优先级调度和格式检测的完整流程;packages/markitdown-sample-plugin/是一个 50 行左右的插件最小实现,想扩格式可以直接抄它的骨架。
输出只是 Markdown,但它后面接的是分片、向量化、检索这一整条管道——把文档解析这一步跑通之后,剩下的都是纯文本处理。
【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考