AI 开源雷达 #002|微软开源 MarkItDown:20+ 文档一键转 Markdown,实测用数据说话
AI 开源雷达 #002|微软开源 MarkItDown:20+ 文档一键转 Markdown,实测用数据说话
先部署、再实测、后下结论。这篇不读 README,直接上数据。
MarkItDown 一句话概览
微软 AutoGen 团队开源的 Python 工具(GitHub 16 万 Star,MIT 协议)。核心就一个函数:convert(任意格式) → 干净 Markdown。
支持 20+ 格式:PDF(含扫描件 OCR)、Word、PPT、Excel、EPUB、HTML、CSV、JSON、XML、图片、音频转写、ZIP 批量、YouTube 字幕。
为什么值得关注
当前 AI 内容管线最大的断层不是模型能力不够,是文档格式的割裂。
PDF 一个库、Word 一个库、PPT 又一个库——每家写一套转换代码,每套都有边缘 case 要处理。更麻烦的是,不同格式的输出质量不一致,后续的总结、切片、向量化每层都要做格式适配。
MarkItDown 做的是一件很朴素的事:把格式差异挡在管线最前面,后面全部走 Markdown。 不是新概念,但微软用一个 16 万 Star 的开源项目把它做到了可工程化。
核心能力
- 一套 API 通吃 20+ 格式:
md.convert("文件.pdf")和md.convert("文件.pptx")的调用完全一致 - 输出规范性:标题层级、列表结构、表格格式、链接全部保留,不是粗暴抽文本
- 可扩展:支持外接 LLM(GPT-4o)做图片描述,支持插件式注册自定义转换器
- 工程化好:PyPI 周下载量 150 万,Apple / Canva / Stanford / Zapier 都在用
适飞什么人
需要构建文档预处理管线的人——内容策展、知识库搭建、RAG pipeline、博客自动化发布、Obsidian 知识管理。一句话:只要你有多种格式的文档要统一处理,这就是你可以站在上面的肩膀。
与当前工作流如何结合:实测数据说话
以下所有数据来自实际部署测试,不是 README 复读。
部署环境
本地服务器,Debian 12,Python 3.11。安装命令:
pip3 install markitdown[pdf,pptx,xlsx]
apt install tesseract-ocr tesseract-ocr-chi-sim
pip3 install pytesseract pdf2image
两条 pip 命令 + 一个 apt,五分钟完事。
测试 1:中文文本 PDF(1.2MB 专利说明书)
结果:⭐⭐⭐⭐⭐
52 行输出,13KB 内容。权利要求书、说明书、技术领域的标题层级全部保留,中文段落干净无乱码。连「CN 205751874 U」这样的专利号、附图说明(图1-图4)都准确提取。
结论:文本型 PDF 完全可用,无需额外处理。
测试 2:中文扫描 PDF(1.4MB 专利证书,全图片页面)
结果:⚠️ 需要 OCR 预处理
MarkItDown v0.1.6 不自带扫描件 OCR。识别需要组合工具:
扫描 PDF → pdf2image → pytesseract(chi_sim) → Markdown
实测单页 300 DPI 耗时 9 秒,内存 ~970MB。质量?对专利证书这种带特殊字体(宋体加粗、印章字体)的文档,识别率约 60%——"聚丙烯薄膜电容器"成了"聚两炳淹膜电容器","王天祥"成了"王天和储"。
这不是 MarkItDown 的问题,是 Tesseract 对特殊字体的天花板。日常文档(印刷体、标准宋体)效果会好很多。对高精度 OCR 场景,建议用专用 OCR 服务替代 Tesseract。
测试 3:PPTX(35KB,含中文表格/流程图/图片)
结果:⭐⭐⭐⭐⭐
5 页幻灯片全部正确转换:
- 中文表格 → Markdown 表格(格式工整,没有错位)
- 中文要点 → 列表结构
- 流程图(矩形+箭头)→ 层级文本描述
- 图片 → 占位符

表格和文字内容的保留程度超出预期,PPT 转 Obsidian 笔记这条路通了。
测试 4:XLSX(6KB,含中文数据 2 个 Sheet)
结果:⭐⭐⭐⭐
数据完整转成 Markdown 表格。Sheet 名(销售数据 / 汇总)保留为 H2 标题。实测数据中 10 行中文产品名(智能音箱、学习平板、无线耳机等)全部正确。
⚠️ 注意:Excel 公式(SUM / AVERAGE)转换后显示为 NaN。MarkItDown 读的是值不是公式,这点在意料之中。
测试 5:EPUB
结果:⭐⭐⭐⭐⭐
元数据(标题、作者、语言)全部提取,正文内容干净。测试文件是一段《乡土中国》相关的中文内容,输出无任何编码问题。
测试 6:大文件压力(100MB PDF)
结果:✅ 性能优秀
100MB PDF 完成时间 0.58 秒,峰值内存 357MB,CPU 利用率 183%,无崩溃,无卡顿。对于日常文档(几百 KB 到几十 MB)基本是秒出。
测试汇总
| 测试项 | 文件 | 耗时 | 质量 | 结论 |
|---|---|---|---|---|
| 中文文本 PDF | 1.2MB | 即时 | ⭐⭐⭐⭐⭐ | 无需处理 |
| 中文扫描 PDF | 1.4MB | 9s | ⭐⭐⭐ | 需 OCR 预处理 |
| PPTX | 35KB | 即时 | ⭐⭐⭐⭐⭐ | 直接可用 |
| XLSX | 6KB | 即时 | ⭐⭐⭐⭐ | 公式 NaN 注意 |
| EPUB | 2KB | 即时 | ⭐⭐⭐⭐⭐ | 直接可用 |
| 大文件 | 100MB | 0.58s | — | 性能优秀 |
我的评分
⭐⭐⭐⭐⭐ — 不是"推荐试试",是"建议直接上线"。
文档格式转换是内容管线中最无聊但又不得不做的事。MarkItDown 用一个 convert() 把 20+ 格式的统一入口做到了足够工程化,而且实测下来中文支持、大文件性能都过关。
它解决的不是"什么样的模型最好"的问题,而是"模型读到的数据是不是干净的"的问题。在 RAG、知识库、博客自动化的世界里,数据清洗永远比模型选型更值得花时间。
部署建议
推荐部署。 我已将其定位为内容管线的文档标准化层,并封装为 document-normalizer — 以后任何文档先进 MarkItDown,再交给后端管线。具体集成建议:
- 文本 PDF / Word / PPT / Excel / EPUB → 直接走 MarkItDown,不需要额外处理
- 扫描 PDF → 外接 OCR(Tesseract 或其他专业服务),OCR 结果再走 MarkItDown
- 大文件队列 → 建议在 cron 低负载时段运行,避免内存峰值影响其他服务
- 定期更新 → 微软持续维护,通过 pip 保持版本
安装方式
# 基础安装(推荐)
pip3 install 'markitdown[pdf,docx,pptx,xlsx]'
# 命令行使用
markitdown 文档.pdf -o 输出.md
# Python 调用
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("文档.docx")
print(result.text_content)
GitHub:github.com/microsoft/markitdown
📝 本文所有实测数据基于 v0.1.6,在个人服务器 Debian 12 环境完成。
📮 每周更新,欢迎关注。往期内容
暂无评论
评论已关闭
此文章的评论功能已关闭。