markitdown 实测:一行命令把办公文档转成 Markdown,RAG 文档预处理省下一整天
2026/8/28 9:56:14 网站建设 项目流程

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 环境
Python3.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。

踩坑与注意事项

  1. 转 PDF 报 MissingDependencyException:原因是核心包刻意不带格式解析器,每个格式都要装对应依赖组。绕法:pip install 'markitdown[pdf,docx,pptx]'按需补齐,别等报错再装。
  2. 管道输入时识别错格式或转换失败:stdin 没有扩展名可看,纯靠内容检测不一定靠得住。绕法:加-x .pdf给个扩展名提示,MIME 类型和字符集也可以用-m-c显式指定。
  3. 扫描件 PDF 转出来几乎没内容:内置转换只提取文本层,纯扫描页没有文本层可提。绕法:接 Azure Document Intelligence(-d -e <endpoint>),或装 markitdown-ocr 插件并传入llm_client,用视觉模型读图里的字;没传llm_client时插件会静默跳过 OCR。
  4. 大批量转换时内存和权限要注意:官方已给 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询