在日常工作中,我们经常需要处理各种格式的文档,比如 PDF、Word、Excel、PPT 等等。如果你想把这些文档交给 AI 工具读取并处理,为了提升 AI 工具的读取质量,可以把这些文档转换成 Markdown 格式。
最近开源界新出了个文档转换 MarkItDown 工具,绝对是个不错的选择。
MarkItDown 是微软推出的一个轻量级 Python 工具,专门用于将各种文件格式转换为 Markdown。它的设计初衷是为了配合大语言模型(LLM)和文本分析工具使用,所以在转换过程中会尽量保留文档的重要结构,比如标题、列表、表格、链接等等。虽然输出的 Markdown 通常也很适合人类阅读,但它主要还是面向机器处理的。
MarkItDown 支持的文件格式非常广泛,几乎涵盖了日常工作中遇到的所有文档类型:
办公文档: PDF、Word 文档(.docx)、PowerPoint 演示文稿(.pptx)、Excel 表格(.xlsx/.xls)
网页和文本: HTML 网页、纯文本文件、CSV 数据文件、JSON 文件、XML 文件
多媒体内容: 图片文件(JPEG、PNG、GIF 等,通过 OCR 识别文字)、音频文件(MP3、WAV 等,转录为文字)、YouTube 视频(提取字幕和转录)
压缩文件: ZIP 压缩包(提取并转换内部文件)
电子书: EPub 格式电子书
邮件: Outlook 邮件文件(.msg)
代码文件: 各种编程语言的源代码文件,保持语法高亮和格式
这些格式基本上涵盖了我们日常能遇到的大部分文件类型。
你可能会问,为什么要转换成 Markdown 格式呢?原因很简单:Markdown 非常接近纯文本,标记语法极其简洁,但同时又能表示重要的文档结构。更重要的是,像 GPT-4 这样的主流大语言模型天生就"理解"Markdown,它们在训练时接触了大量的 Markdown 文本,所以处理起来特别得心应手。另外,Markdown 格式在 token 使用上也很高效,这对于有 token 限制的模型接口来说是个不小的优势。
核心优势:
适用场景:
MarkItDown 对运行环境有明确的要求:
Python 版本: 需要 Python 3.10 或更高版本,建议使用虚拟环境避免依赖冲突。
多种环境支持: 支持标准 Python、uv 和 Anaconda 等多种 Python 环境管理工具:
# 标准 Python
python -m venv .venv
source .venv/bin/activate
# 使用 uv
uv venv --python=3.12 .venv
source .venv/bin/activate
# 使用 Anaconda
conda create -n markitdown python=3.12
conda activate markitdown
源码安装: 除了 pip 安装,还可以从源码安装获得最新功能:
git clone git@github.com:microsoft/markitdown.git
cd markitdown
pip install -e 'packages/markitdown[all]'
安装 MarkItDown 很简单,首先确保你的 Python 版本在 3.10 以上,然后运行:
pip install 'markitdown[all]'
这个命令会安装所有可选依赖,让你能处理各种文件格式。如果你只需要处理特定格式,也可以选择性安装,比如:
pip install 'markitdown[pdf, docx, pptx]'
使用起来也很直观。命令行方式最简单:
# 直接转换并输出到终端
markitdown document.pdf
# 保存到文件
markitdown document.pdf -o output.md
# 通过管道处理
cat document.pdf | markitdown
批量处理功能: MarkItDown 支持一次处理多个文件:
# 处理多个文件并合并输出
markitdown file1.pdf file2.docx file3.pptx -o combined.md
# 处理整个目录
find ./documents -name "*.pdf" | xargs markitdown
# 使用通配符批量处理
markitdown *.pdf -o all_pdfs.md
高级命令行选项:
# 启用插件支持
markitdown document.pdf --use-plugins
# 查看所有可用插件
markitdown --list-plugins
# 使用Azure Document Intelligence
markitdown complex_document.pdf -d -e "<your_endpoint>" -o output.md
# 详细输出模式
markitdown document.pdf --verbose
如果你想在 Python 代码中使用,也很方便:
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("document.pdf")
print(result.text_content)
流式处理: 对于大文件,推荐使用流式处理:
with open("large_document.pdf", "rb") as f:
result = md.convert_stream(f, file_extension=".pdf")
print(result.text_content)
批量处理示例:
import os
from pathlib import Path
from markitdown import MarkItDown
md = MarkItDown()
# 批量处理目录中的所有PDF文件
doc_dir = Path("./documents")
for pdf_file in doc_dir.glob("*.pdf"):
result = md.convert(str(pdf_file))
output_file = pdf_file.with_suffix(".md")
with open(output_file, "w", encoding="utf-8") as f:
f.write(result.text_content)
print(f"转换完成: {pdf_file} -> {output_file}")
自定义配置:
# 启用Azure Document Intelligence
md = MarkItDown(
use_azure_doc_intel=True,
azure_doc_intel_endpoint="your_endpoint",
azure_doc_intel_key="your_key"
)
# 启用插件支持
md = MarkItDown(enable_plugins=True)
# 处理结果包含更多信息
result = md.convert("document.pdf")
print(f"标题: {result.title}")
print(f"内容: {result.text_content}")
print(f"元数据: {result.metadata}")
MarkItDown 最强大的特性之一就是其插件系统。通过插件,你可以轻松扩展工具的功能,支持更多文件格式。
创建自定义插件的步骤:
DocumentConverter
类,实现 accepts()
和 convert()
方法。accepts()
方法用于判断是否能处理特定文件,convert()
方法负责实际的转换工作。register_converters()
函数,并设置 __plugin_interface_version__ = 1
。这个函数会在 MarkItDown 实例创建时被调用。pyproject.toml
文件中添加插件入口点配置,让 MarkItDown 能够自动发现你的插件。使用插件:
安装插件后,可以通过命令行的 --use-plugins
参数启用,或在 Python 代码中设置 enable_plugins=True
。使用 markitdown --list-plugins
命令可以查看所有可用的插件。
MarkItDown 还提供了 MCP(Model Context Protocol)服务器包,让你能够将文档转换功能集成到更大的系统中。
MCP 服务器特性:
http:
、https:
、file:
和 data:
等多种 URI 格式。快速启动 MCP 服务器:
# STDIO 模式(默认)
markitdown-mcp
# HTTP 模式
markitdown-mcp --http --host 127.0.0.1 --port 3001
# Docker 部署
docker build -t markitdown-mcp:latest .
docker run -it --rm markitdown-mcp:latest
安全考虑: MCP 服务器不支持身份验证,建议在生产环境中绑定到 localhost,并通过防火墙或代理进行访问控制。
MarkItDown 作为微软推出的开源文档转换工具,在 AI 时代显得格外有价值。从最新的 0.1.0 版本可以看出,微软对这个项目投入了大量精力,不断优化性能和扩展功能。
最后觉得本文写的不错的话,可以关注我,我会继续更新更多 AI 相关内容。