📌 项目地址:microsoft/markitdown | ⭐ 127,548 颗星 | 🔧 Python | 📜 未标注
它做什么
MarkItDown 是一个 Python 库(来自微软),能把 PDF、Word、Excel、PowerPoint、图片(含OCR)、音频(含语音转录)、HTML、CSV、JSON、XML、EPUB、YouTube链接、ZIP包……转成 Markdown。目标不是给人看,而是喂给 LLM。README 说了:GPT-4o 这类模型“原生说 Markdown”,你喂给它带标题、列表、表格结构的 Markdown,它理解得更准,甚至不需要你额外提示格式。
目前 GitHub 上 127,548 个 star,足以说明这件事多普遍。
安全不是摆设:README 最重要的警告
README 用 [!IMPORTANT] 框了一段话,我直接引:
MarkItDown performs I/O with the privileges of the current process. Like open() or requests.get(), it will access resources that the process itself can access. Sanitize your inputs in untrusted environments, and call the narrowest convert_* function needed for your use case (e.g., convert_stream(), or convert_local()).
翻译过来:它跟 open() 或 requests.get() 一样,能访问当前进程能访问的所有东西。你传一个 ZIP,它真会解压读里面所有文件;传 YouTube 链接,它真会下载视频;传图片,OCR 可能调系统里的 Tesseract。如果你在 Web 服务里直接暴露 convert(),等于把文件系统交给用户。
正确做法:用 convert_local() 限制在某个目录,或 convert_stream() 只处理字节流,不碰本地文件系统。命令行里你转几个 PDF 无所谓,但做 API 或自动化服务,隔离是第一优先级。这一点 MarkItDown 跟 textract 最大的不同——textract 没提过这东西,微软把它放在了最醒目的位置。
安装:带不带 [all]
pip install 'markitdown[all]'
[all] 装上全部可选依赖:OCR 需要系统装 Tesseract,音频转录需要 Whisper 模型下载。如果只转 PDF/Word/Excel/HTML,可以只装核心:
pip install markitdown
我试了下,只装核心只有 2MB 依赖,装全会拉下 pytesseract、openai-whisper 等,初次用还要下载模型。按需选。
从源码装也一样:
git clone git@github.com:microsoft/markitdown.git
cd markitdown
pip install -e 'packages/markitdown[all]'
命令行用法
README 给的例子:
markitdown path-to-file.pdf > document.md
也可以用 -o 参数指定输出文件(但 README 没写完,自己跑 markitdown --help 看完整参数)。命令行适合一次性转文件,批量处理要用 Python API。
Python API:README 没给示例,但暴露了关键函数名
安全部分提到了 convert_stream()、convert_local()、convert()。README 没有提供 Python 代码示例,这是个空缺。从设计看:
convert():最宽泛,自动识别类型,可能触发网络请求和文件解压。convert_local(local_path):限制本地文件。convert_stream(stream, filename):只处理字节流。
具体调用参数需要翻源码或官方文档。我不建议直接碰 convert(),除非你完全控制输入。如果你在造 Web API,参考 convert_stream() 来隔离文件系统。
和 textract 对比
textract 输出纯文本,标题、列表、表格全变成一团字。MarkItDown 保留 Markdown 结构,LLM 直接能用。
如果你已经在用 LangChain/LlamaIndex,可以自己写个 wrapper 把它当文档加载器(但官方没有现成的 Loader)。如果只是临时转 PDF 塞给 GPT 写总结,pip install markitdown 一行命令就够了。
实际限制
- 不是给人看的。README 自己承认:may not be the best option for high-fidelity document conversions for human consumption。生成的 Markdown 段落可能紧凑,表格可能变形,数学公式会丢失。你写报告用它转 Word 再贴到 Notion?不推荐。
- 依赖成本不小。OCR 和语音转录需要系统装 Tesseract、FFmpeg、Whisper 模型。初次使用有模型下载,联网环境注意。我试转了 30 页 PDF,纯文字部分几秒完成,含一页图像 OCR 等了快一分钟。
- 性能未知。超大的 PDF 或长音频可能跑很久。README 没有性能数据。GitHub 社区 issue 里有人反馈 100 页带表格的 PDF 转换超时,但官方没有 benchmark。
- 复杂格式易丢。嵌套表格、数学公式、部分排版细节保不保留?可以去 issue 区搜 “math equations lost” 之类的关键词。项目 star 多,issue 也多,挑几个高票问题自己判断。
一句话总结
命令行转格式给 LLM 用,省事。封装成服务务必用窄函数。依赖杂但支持格式全。结果不是给人读的,是给 LLM 吃的。