用MarkItDown把办公文档转成Markdown,给AI喂数据省一半时间
这两天GitHub上冒出一个微软开源的Python库——MarkItDown,一天就涨了13万星。我看了一下,它不是那种花里胡哨的新框架,就是解决一个实实在在的痛点:把PDF、Word、PPT、Excel这些办公文件转成Markdown格式。
为什么这玩意儿突然火了?因为做AI应用的人太多了。你要给大模型搞RAG,或者微调,第一步就是把非结构化文档清洗成干净文本。以前大家要么用Pandoc硬扛,要么自己写解析脚本。MarkItDown的出现,至少让你不用在格式迁移上重复造轮子。
它到底能处理哪些格式?
官方列了一大堆:PDF、.docx、.pptx、.xlsx、.html、csv、json、xml,甚至图片(通过OCR和EXIF提取文字)。它背后用的是Python生态里成熟的库,比如python-pptx、python-docx、PyMuPDF(fitz)。
最让我觉得实用的是它对Office文档的排版保留。我用一张带表格的Word文档试了一下,转出来的Markdown保留了表格结构,标题层级也对了。
核心用法:5行代码搞定
from markitdown import MarkItDown
# 初始化(默认无LLM功能,纯本地解析)
md = MarkItDown()
# 转换文档
result = md.convert("example.docx")
print(result.text_content) # 这就是Markdown字符串
就这么简单。它还支持从URL下载转换:
result = md.convert("https://example.com/report.docx")
如果你有OpenAI或Azure的API Key,它还能对图片调用GPT-4o做描述。不过我觉得99%的场景用本地模式就够了,没必要为了图片描述多花token。
和Pandoc比怎么样?
Pandoc是老牌文档转换工具,支持格式极多,但有两个问题:
- 对Office支持差。Pandoc转.docx需要LibreOffice或者WPS后台,还得装一堆依赖。MarkItDown直接Python原生处理,无需外部程序。
- 中文排版有时会乱。我用Pandoc转带中文的PPT,表格经常错位。MarkItDown对中文支持更好(我自己测了两份中文PPT,标题、分段都没问题)。
缺点也很明显:MarkItDown目前只输出Markdown,不能反过来把Markdown转成其他格式。Pandoc是双向的。所以如果你需要文档格式互转(比如Markdown→PDF),MarkItDown不合适。
适用场景与局限
适合的场景:
- 做RAG系统的文档预处理(把一堆杂乱的PDF/Word变成结构化文本)
- 数据清洗,把Excel表格变成Markdown表格供AI阅读
- 快速将会议纪要、技术报告转为轻量文档
不适合的场景:
- 需要完美还原原格式(比如带复杂形状的PPT,它只能提取文字)
- 大批量PDF扫描件(它用PyMuPDF提取文字,如果PDF是图片扫描的,需要OCR插件,速度慢)
- 生产环境高并发(目前是单线程库,并行转换需自己加锁)
另外有个坑:它对加密或受保护的Office文件会直接报错,需要解密后才能用。
快速上手步骤
- 安装:
pip install markitdown - 准备一个测试文件(比如test.docx)
- 写上面那5行代码跑一下
- 看看输出的Markdown里标题、列表、表格是否保留
我建议你把转换后的Markdown扔进Obsidian或任意Markdown编辑器里看一眼,确认排版符合预期。如果原文档里有复杂的公式(比如LaTeX),当前版本会把它当普通文本处理,不会转成数学格式。
我的看法
MarkItDown不是万能工具,但在办公文档→Markdown这个细分方向上,它是目前Python生态里最省心的方案。尤其是团队在做AI应用开发,需要批量清洗公司内部文档时,用它替代自写解析脚本,能省一半的工期。
如果你只是偶尔转一个PDF,那用在线工具也行。但如果你每天要处理上百份文档,MarkItDown值得写进你的预处理流水线。
