微软出品MarkItDown:文档批量转Markdown,AI预处理利器
做RAG(检索增强生成)或者微调的朋友肯定遇到过这个场景:手里一堆Word、PDF、PPT,想喂给LLM,但模型只吃纯文本或Markdown。以前要么手动复制粘贴,要么写一堆脚本分别解析不同格式,坑踩一个又一个。
微软最近开源了一个工具叫MarkItDown,号称能把各种办公文档一键转成Markdown。今天就用几分钟帮你判断它值不值得放进你的工具箱。
它解决了什么问题
简单说:把不同格式的文档统一成Markdown。支持以下输入:
- Word(.docx)
- PPT(.pptx)
- Excel(.xlsx)
- PDF(.pdf)
- 图片(带OCR)
- HTML(.html)
- 纯文本 / CSV / JSON / XML
输出只有一个:标准Markdown(.md)。
而且它是库不是命令行工具,方便集成到你的Python数据处理流水线里。
核心功能实测
先装包:
pip install markitdown
来个最简使用:
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("example.docx")
print(result.text_content)
输出直接是Markdown字符串,标题、列表、表格都被保留了。我试了一个带公式的Word文档,数学公式转成了LaTeX行内表达式($...$),虽然不如MathML精确,但至少可读。
PDF转换会更激进——它用pdfminer.six提取文本,图片部分不会自动OCR(需要单独开启)。如果你有大量扫描件,需要额外装 tesseract 并设置环境变量,让MarkItDown调用OCR引擎。这一点官方README写得不够清楚,我踩过坑:不装tesseract的话,图片型PDF直接变成空文本。
亮点:统一接口。无论你丢进去的是PPT还是Excel,调用方式一模一样。Excel每个Sheet会被转换成Markdown表格,第一行自动作为表头。PPT则按幻灯片为单位,标题和正文分开段落。
和同类方案比好在哪
我知道你脑子里蹦出的第一个对比对象是 pandoc。
| 维度 | MarkItDown | pandoc |
|---|---|---|
| 安装复杂度 | pip install,自带依赖 | 需要系统级安装(apt/dnf),HTML转换还要额外装texlive |
| 输出灵活性 | 只输出Markdown | 支持数十种输出格式 |
| API友好性 | Python类,即插即用 | 主要通过命令行调用,Python绑定(pypandoc)有一定学习成本 |
| 对图片OCR | 内置可选 | 需要额外工具链 |
| 速度 | 较快,文档不长时秒级 | 中等,格式转换引擎较重 |
个人看法:如果你只是要把办公文档转成Markdown喂给AI,MarkItDown更轻、更专一。pandoc能做的事太多,但每次配置都得折腾半天。而MarkItDown就是「输入-输出」一条线,没有多余选项。
另一个竞品是python-docx + openpyxl + pdfminer自己拼。但拼出来的代码维护成本高,而且不同库对Markdown格式的约定不同。MarkItDown把格式表统一了:比如列表统一用-,表格用标准分隔线,图片用  base64嵌入(官方说后续会支持配置为文件路径)。
适用场景与局限
适合:
- 数据预处理:给AI模型(如ChatGPT、Claude)提供干净文本。我从Notion导出的几十个Markdown文件,用这个库批量转成统一格式很顺手。
- 搜索索引:Elasticsearch或向量数据库需要纯Markdown文本,可以直接用它解析。
- 自动化工作流:公司内部每周收到的xlsx报表转成Markdown,塞进RAG系统做问答。
不适合:
- 复杂排版保留:比如Word里的文本框、SmartArt、Excel中的合并单元格,转换后会丢失或变形。我对一个含复杂图表的PPT做转换,SmartArt里的文字顺序错乱了。
- 追求精确版面还原:Markdown本身表达能力有限,如果你需要保留字体、字号、颜色,请用Pandoc搭配自定义模板,或者直接用HTML。
- 超大文件:我试过100MB以上的PDF,内存占用飙到2GB+。建议拆分成小文件再处理。
- 中文OCR:默认的tesseract中文识别率不高,尤其繁体字。如果PDF是扫描版且含有大量中文,建议先上专业的OCR工具(如PaddleOCR),再把结果转Markdown。
快速上手步骤
- 安装库:
pip install markitdown(Python 3.10+) - 如需OCR,安装Tesseract并设置路径:
- Windows:下载安装包,添加
C:\Program Files\Tesseract-OCR到PATH - Linux:
sudo apt install tesseract-ocr
- Windows:下载安装包,添加
- 写个批处理脚本:
```python
from pathlib import Path
from markitdown import MarkItDown
md_converter = MarkItDown()
input_folder = Path("./docs")
output_folder = Path("./md_output")
output_folder.mkdir(exist_ok=True)
for file in input_folder.glob("."):
if file.suffix in [".docx", ".pdf", ".pptx", ".xlsx", ".html"]:
result = md_converter.convert(str(file))
out_file = output_folder / f"{file.stem}.md"
out_file.write_text(result.text_content, encoding="utf-8")
print(f"Converted {file.name} -> {out_file.name}")
```
4. 跑起来看看输出,检查表格和列表是否正常。如果是中文PDF,建议先用OCR提取文本,再用MarkItDown结构化。
五分钟内就能判断:你的项目里它能不能用——能就加个依赖,不能就换方案。简单干脆,这才是工具该有的样子。