一键把 PDF、Word、Excel 全转成干净 Markdown ,微软开源 MarkItDown,格式统一的神器
刚说完Markdown 格式是AI的世界语言,没想到又发现了一个宝藏工具,
微软开源神器 MarkItDown,现在在GitHub上已经 107k star 了
这东西本质上就是个轻量级 Python 工具,只干一件事:
把所有你能想到的文件格式,统统转成干干净净、结构清晰的 Markdown。
它不是那种粗暴地把文字扒出来就完事了。标题、列表、表格、链接,该有的结构它都会尽量保留。转出来的 Markdown 大模型直接就能读懂,关键是省 token,喂进去不心疼。
它能处理哪些格式,说实话,看完支持列表之后我第一个反应是:这覆盖得也太全了。
Office 全家桶:Word(.docx)、PowerPoint(.pptx)、Excel(.xlsx / .xls)
图片:JPG、PNG 等,支持 OCR 文字提取,还能读出 EXIF 元数据
音频:MP3、WAV,可以直接语音转文字加上元数据提取
网页和数据文件:HTML、CSV、JSON、XML
其他:EPUB 电子书、Jupyter Notebook(.ipynb)
ZIP 压缩包:它会自动递归把里面所有支持的文件全转一遍
还有一个让我没想到的:直接丢 YouTube 链接也能转,应该是自动抓字幕加转录
安装
装起来没啥门槛,win+R 输入cmd进入命令行界面,一行命令完事:
pip install markitdown[all] -i https://mirrors.aliyun.com/pypi/simple
这个 [all] 会把 PDF、Office、图片 OCR、音频转录的依赖全装上。第一次装可能会慢一点,后面就飞快了。
命令执行成功后,应该如下图:应该看到Sucessfully installed 字样
pip install markitdown[pdf,docx,pptx]
备注:pip 是Python自带的(Python 3.4 以上默认内置),如果你电脑没有pip命令,那么按照下Python ,
去 python.org 下载安装包。建议装Python3.10及以上的才能获取最新版的markitdown
一定勾选 “Add Python to PATH”
这个选项,勾上之后就自动带了 pip,路径也帮你配好了。
macOS 上也可以直接用 Homebrew:brewinstallpython
转换
markitdown 文档.pdf -o 输出.md
处理扫描件和图片,OCR 这块有坑
最开始的文档都没啥问题,Word、Excel 转得挺干净的。直到我开始处理一堆扫描件 PDF 和手机拍的截图,问题来了:文字识别各种乱码,表格直接面目全非。
搞了半天才弄明白,MarkItDown 的 OCR 不是传统的 Tesseract。它是把图片抽出来,送给 GPT-4o、Claude、Gemini 这些视觉模型去做”看图识字”。所以用什么模型,精度差距非常夸张——GPT-4o 能做到 95% 以上,小模型可能只有 60%。
最大的坑是:OCR 默认是不开的。 你得手动配。正确姿势是这样的:
pip install markitdown[all] markitdown-ocrpip install openai 或者 anthropic、google-generativeai
from markitdown import MarkItDownfrom openai import OpenAImd = MarkItDown( enable_plugins=True, 这个很关键,不开等于白装 llm_client=OpenAI(), llm_model="gpt-4o" # 精度优先就选 gpt-4o 或 claude-3-5-sonnet)result = md.convert("scan.pdf")print(result.text_content)
搞明白这个之后,我总结了几条提升精度的经验,按效果排序:
-
选对模型是最大的变量。 复杂表格和公式用 gpt-4o 或 claude-3-5-sonnet,简单纯文本可以用 4o-mini 搭配 Ollama 本地跑。
-
自定义 Prompt 效果很明显。 默认的 Prompt 偏通用,如果你明确告诉它”这是表格文档,转成标准 Markdown 网格表格”,识别质量能上一个档次。
-
图像预处理救活了不少低质量扫描件。 在送进 MarkItDown 之前,用 OpenCV 做个放大、二值化、去噪处理,扫出来的老合同和倾斜照片效果提升巨大。
-
转完之后再让 LLM 做一次 cleanup。 就一句话:”Fix any OCR errors in this text, standardize formatting, output clean Markdown only”。相当于二次校对,能把漏网之鱼捞出来。
批量处理知识库,这才是正经用法
我整测试整理了一个个人知识库,里面 PDF 和 Word 混在一起,几十个文件。写了个脚本一跑,全自动搞定:
from markitdown import MarkItDownfrom pathlib import Pathmd = MarkItDown()source_dir = Path("./原始文档")output_dir = Path("./知识库")output_dir.mkdir(exist_ok=True)for file in source_dir.glob("**/*"): if file.suffix in [".pdf", ".docx", ".pptx", ".xlsx"]: result = md.convert(str(file)) out_path = output_dir / (file.stem + ".md") out_path.write_text(result.text_content, encoding="utf-8") print(f"{file.name} → {out_path.name}")
跑完之后整个知识库的格式就统一了,接下来不管是用 RAG 框架建索引还是直接喂给 Agent 用,都顺滑多了。
还有一个细节值得提:MarkItDown 提供了 MCP 服务器。如果你用 Claude Desktop,可以直接通过 MCP 集成进去,让 AI 实时读取文件内容。这个对于做 Agent 开发的场景特别实用,省去了很多中间环节。
最后说两句
折腾文档格式这件事,我前后试了不少方案,MarkItDown 是目前用下来最省心的。它不是什么一劳永逸的银弹,但至少在”把乱七八糟的格式统一成大模型能吃的东西”这件事上,它完成得相当干净。
如果你是搞知识库、做 RAG、或者日常需要把文档喂给 AI 处理,值得花十分钟装一个试试。
GitHub 地址:https://github.com/microsoft/markitdown