任何文档理解 AI 管道的第一步都是将原始文档转换为机器可读的文本。这个看似简单的任务充满了挑战:具有复杂布局的 PDF、无可提取文本的扫描文档、包含合并单元格的 Excel 文件、包含嵌入图片的 PowerPoint 演示文稿。MarkItDown,微软的开源文档转换工具,正面应对这些挑战,将多种文档格式转换为干净、LLM 友好的 Markdown。
MarkItDown 由微软开发,旨在解决一个实际问题:如何将企业文档的广阔世界——PDF 报告、Word 文档、PowerPoint 演示文稿、Excel 电子表格、扫描图片——输入 AI 系统进行处理。答案是将所有内容转换为 Markdown,这种格式既能保留文档结构(标题、列表、表格、强调),又能足够轻量以最大化 LLM 上下文窗口中的可用内容。
该工具已迅速成为 AI 文档处理栈中必不可少的组件,用于 RAG 管道、文档问答系统、内容迁移工作流以及任何需要将多种文档格式统一为一致的、AI 可读格式的场景。
MarkItDown 的文档处理管道是如何工作的?
MarkItDown 对每种文档类型应用特定格式的解析策略。
graph LR
A[输入文档] --> B{格式检测}
B --> C[PDF\n布局分析 + 文本提取]
B --> D[DOCX\nXML 解析,结构保留]
B --> E[PPTX\n逐幻灯片提取]
B --> F[XLSX\n单元格感知表格提取]
B --> G[图片\nOCR 文字识别]
B --> H[HTML\n基于 DOM 的干净提取]
C --> I[Markdown 输出\n结构化文本]
D --> I
E --> I
F --> I
G --> I
H --> I
每个格式处理器都针对其特定的文档类型进行了优化,应用最合适的解析策略来提取干净、结构化的文本。
MarkItDown 支持哪些文档格式?
MarkItDown 支持企业环境中所有常见的文档格式。
| 格式 | 扩展名 | 解析策略 | 输出质量 |
|---|---|---|---|
| 文本提取 + 布局分析 | 优秀(数字版),良好(扫描版 + OCR) | ||
| Word | .docx | XML 文档解析 | 优秀(完整结构保留) |
| PowerPoint | .pptx | 逐幻灯片提取 | 优秀(备注、文本、幻灯片顺序) |
| Excel | .xlsx | 单元格感知表格解析 | 优秀(处理合并单元格) |
| 图片 | .png, .jpg, .tiff | OCR(Tesseract) | 良好(取决于图片质量) |
| HTML | .html, .htm | DOM 遍历、标签剥离 | 优秀 |
| CSV | .csv | 分隔符解析 | 优秀 |
| JSON | .json | 结构保留转换 | 良好 |
| ZIP | .zip | 递归提取 | 取决于格式 |
每种格式都产生一致结构化的 Markdown 输出,实现统一的下游处理。
MarkItDown 如何处理有挑战性的文档特性?
不同类型的文档呈现特定的挑战,MarkItDown 通过专门的处理来应对。
| 挑战 | 解决方案 | 格式 |
|---|---|---|
| PDF 多列布局 | 布局分析、阅读顺序检测 | |
| 扫描文档(纯图片 PDF) | OCR 引擎集成 | PDF、图片 |
| 合并的 Excel 单元格 | 单元格扩展、行/列跟踪 | XLSX |
| 嵌入文字图片 | 图片文字的 OCR 提取 | 所有格式 |
| 复杂表格 | 逐单元格提取、表头检测 | PDF、DOCX、XLSX |
| 幻灯片备注 | 与幻灯片内容分开提取 | PPTX |
目标是生成准确表示原始文档内容和结构的 Markdown。
如何在 Python 和 CLI 中使用 MarkItDown?
MarkItDown 提供了用于程序化使用的 Python API 和用于快速转换的 CLI。
| 接口 | 命令 / 代码 | 用例 |
|---|---|---|
| Python API | MarkItDown().convert("document.pdf") | 程序化管道 |
| CLI | markitdown document.pdf > output.md | 快速转换 |
| 批处理 | 使用 Python API 循环 | 大量文档集合 |
| API 集成 | 作为库导入 | RAG 管道集成 |
Python API 是生产使用的主要接口,提供对转换选项和错误处理的完全控制。
常见问题
什么是 MarkItDown? MarkItDown 是微软的开源 Python 工具,用于将各种文档格式转换为干净的 Markdown。它支持 PDF、DOCX、PPTX、Excel(XLSX)、图片(通过 OCR)、CSV、JSON、XML、HTML、EPUB 和 ZIP 文件。主要用例是为 LLM 处理、RAG 管道和 AI 驱动的文档分析准备文档,在这些场景中干净的文本提取至关重要。
为什么 Markdown 是文档转换的目标格式? 选择 Markdown 作为目标格式是因为它能够以轻量级、LLM 友好的格式保留文档结构(标题、列表、表格、强调)。与原始文本不同,Markdown 保留了 LLM 可以理解的语义结构。与 PDF 或 DOCX 不同,Markdown 对分词友好,避免了消耗上下文窗口的格式化开销。它在结构保留和令牌效率之间达到了最佳平衡。
MarkItDown 如何处理文档中的图片? MarkItDown 通过多种策略处理图片:从图片元数据(替代文本、标题)提取文本、针对扫描文档和包含文字的图片进行 OCR(光学字符识别),以及配置了视觉能力 LLM 时的 AI 驱动图片描述。提取的图片内容作为描述性文本包含在 Markdown 输出中。
MarkItDown 与其他文档转换器相比如何? 与 Pandoc 等通用文档转换器相比,MarkItDown 更加专注和明确。它专门针对生成 LLM 友好的输出进行了优化,具有更清晰的格式、更好的表格处理和集成的 OCR。它在格式多样性(Pandoc 支持数百种格式)方面做出取舍,以换取在 AI 就绪 Markdown 这一特定场景中的优越输出质量。
MarkItDown 可以集成到自动化管道中吗? 是的,MarkItDown 专为程序化使用而设计。它提供了用于批处理的 Python API、用于脚本的 CLI,并且可以集成到 CI/CD 管道、文档处理工作流和 RAG 摄入系统中。该库优雅地处理错误,记录特定文件的问题而不是使整个批次失败。
延伸阅读
- MarkItDown GitHub 仓库 – 源代码、文档和示例
- MarkItDown Python 包 – 用于快速安装的 PyPI 包
- LLM 文档处理指南 – 微软的 AI 文档处理指南
- Tesseract OCR 文档 – MarkItDown 用于图片文字提取的 OCR 引擎
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!