MarkItDown将文档转换为Markdown的工具

MarkItDown

[!提示]
MarkItDown 现在提供 MCP(模型上下文协议)服务器,可与 Claude Desktop 等 LLM 应用程序集成。更多信息请参阅 markitdown-mcp

[!重要]
0.0.1 到 0.1.0 之间的重大变更:

  • 依赖项现在被组织成可选功能组(详见下文)。使用 pip install 'markitdown[all]' 可实现向后兼容。
  • convert_stream() 现在需要一个二进制文件类对象(例如,以二进制模式打开的文件或 io.BytesIO 对象)。这与之前的版本相比是一个重大变更,之前版本也接受文本文件类对象,例如 io.StringIO。
  • DocumentConverter 类接口已更改为从文件类流读取,而不是从文件路径读取。 不再创建临时文件。如果您是插件或自定义 DocumentConverter 的维护者,则可能需要更新代码。否则,如果仅使用 MarkItDown 类或命令行界面(如这些示例中所示),则无需进行任何更改。

MarkItDown 是一个轻量级的 Python 实用程序,用于将各种文件转换为 Markdown,以便用于 LLM 和相关的文本分析流程。为此,它与 textract 最为相似,但更侧重于将重要的文档结构和内容保留为 Markdown 格式(包括:标题、列表、表格、链接等)。虽然输出通常相当美观且人性化,但它旨在供文本分析工具使用——对于供人类使用的高保真文档转换,可能并非最佳选择。

MarkItDown 目前支持以下格式的转换:

  • PDF
  • PowerPoint
  • Word
  • Excel
  • Images (EXIF metadata and OCR)
  • Audio (EXIF metadata and speech transcription)
  • HTML
  • Text-based formats (CSV, JSON, XML)
  • ZIP files (iterates over contents)
  • Youtube URLs
  • EPubs
  • ... and more!

为什么选择 Markdown?

Markdown 与纯文本极其接近,标记和格式极少,但仍能
够表示重要的文档结构。主流的法学硕士(LLM),例如 OpenAI 的 GPT-4o,本身就“会说”Markdown,并且经常在回复中主动加入 Markdown。这表明他们已经接受过大量 Markdown 格式文本的训练,并且能够很好地理解这些文本。此外,Markdown 的约定也非常高效地使用 token。

先决条件

MarkItDown 需要 Python 3.10 或更高版本。建议使用虚拟环境以避免依赖项冲突。

在标准 Python 安装中,您可以使用以下命令创建并激活虚拟环境:

bash 复制代码
python -m venv .venv
source .venv/bin/activate

如果使用“uv”,您可以使用以下命令创建虚拟环境:

bash 复制代码
uv venv --python=3.12 .venv
source .venv/bin/activate
# NOTE: Be sure to use 'uv pip install' rather than just 'pip install' to install packages in this virtual environment

如果您使用的是 Anaconda,则可以使用以下命令创建虚拟环境:

bash 复制代码
conda create -n markitdown python=3.12
conda activate markitdown

安装

要安装 MarkItDown,请使用 pip 命令:pip install 'markitdown[all]'。或者,您也可以从源代码安装:

bash 复制代码
git clone git@github.com:microsoft/markitdown.git
cd markitdown
pip install -e 'packages/markitdown[all]'

用法

Command-Line

bash 复制代码
markitdown path-to-file.pdf > document.md

Or use -o to specify the output file:

bash 复制代码
markitdown path-to-file.pdf -o document.md

You can also pipe content:

bash 复制代码
cat path-to-file.pdf | markitdown

可选依赖项

MarkItDown 提供用于激活各种文件格式的可选依赖项。在本文档前面,我们使用 [all] 选项安装了所有可选依赖项。但是,您也可以单独安装它们以获得更好的控制。例如:

bash 复制代码
pip install 'markitdown[pdf, docx, pptx]'

仅安装 PDF、DOCX 和 PPTX 文件的依赖项。

目前,以下可选依赖项可用:

  • [all] 安装所有可选依赖项
  • [pptx] 安装 PowerPoint 文件的依赖项
  • [docx] 安装 Word 文件的依赖项
  • [xlsx] 安装 Excel 文件的依赖项
  • [xls] 安装旧版 Excel 文件的依赖项
  • [pdf] 安装 PDF 文件的依赖项
  • [outlook] 安装 Outlook 邮件的依赖项
  • [az-doc-intel] 安装 Azure 文档智能的依赖项
  • [audio-transcription] 安装 wav 和 mp3 文件的音频转录依赖项
  • [youtube-transcription] 安装用于获取 YouTube 视频转录的依赖项

插件

MarkItDown 还支持第三方插件。默认情况下,插件处于禁用状态。要列出已安装的插件,请执行以下操作:

bash 复制代码
markitdown --list-plugins

要启用插件,请使用:

bash 复制代码
markitdown --use-plugins path-to-file.pdf

要查找可用的插件,请在 GitHub 上搜索标签“#markitdown-plugin”。要开发插件,请参阅“packages/markitdown-sample-plugin”。

Azure 文档智能

使用 Microsoft 文档智能进行转换:

bash 复制代码
markitdown path-to-file.pdf -o document.md -d -e "<document_intelligence_endpoint>"

有关如何设置 Azure 文档智能资源的更多信息,请访问此处

Python API

Python 中的基本用法:

python 复制代码
from markitdown import MarkItDown

md = MarkItDown(enable_plugins=False) # Set to True to enable plugins
result = md.convert("test.xlsx")
print(result.text_content)

Python 中的文档智能转换:

python 复制代码
from markitdown import MarkItDown

md = MarkItDown(docintel_endpoint="<document_intelligence_endpoint>")
result = md.convert("test.pdf")
print(result.text_content)

要使用大型语言模型进行图像描述(目前仅适用于 pptx 和图像文件),请提供 llm_clientllm_model

python 复制代码
from markitdown import MarkItDown
from openai import OpenAI

client = OpenAI()
md = MarkItDown(llm_client=client, llm_model="gpt-4o", llm_prompt="optional custom prompt")
result = md.convert("example.jpg")
print(result.text_content)

Docker

sh 复制代码
docker build -t markitdown:latest .
docker run --rm -i markitdown:latest < ~/your-file.pdf > output.md

贡献

本项目欢迎贡献和建议。大多数贡献都要求您同意一份贡献者许可协议 (CLA),该协议声明您有权(并且确实)授予我们使用您贡献的权利。详情请访问 https://cla.opensource.microsoft.com

当您提交拉取请求时,CLA 机器人会自动判断您是否需要提供 CLA,并适当地修饰 PR(例如,状态检查、评论)。只需按照机器人提供的说明操作即可。您只需在所有使用我们 CLA 的仓库中执行一次此操作。

本项目已采用 Microsoft 开源代码行为准则
如需了解更多信息,请参阅 行为准则常见问题解答
联系 opencode@microsoft.com 提出任何其他问题或意见。

如何贡献

您可以通过查看问题或协助审核 PR 来提供帮助。我们欢迎您提交任何问题或 PR,但为了促进社区贡献,我们也将部分问题标记为“开放贡献”和“开放审核”。当然,这些只是建议,欢迎您以任何您喜欢的方式做出贡献。

全部 特别需要社区帮助
问题 所有问题 开放贡献的问题
PR 所有 PR PR 已开放审核

运行测试和检查

  • 导航到 MarkItDown 软件包:
sh 复制代码
cd packages/markitdown
  • 在你的环境中安装 hatch 并运行测试:
sh 复制代码
pip install hatch # 其他安装 hatch 的方法:https://hatch.py​​pa.io/dev/install/
hatch shell
hatch test

(可选)使用已安装所有依赖项的 Devcontainer:

sh 复制代码
# 在 Devcontainer 中重新打开项目并运行:
hatch test
  • 提交 PR 前运行预提交检查:pre-commit run --all-files

贡献第三方插件

您也可以通过创建和共享第三方插件来做出贡献。更多详情,请参阅 packages/markitdown-sample-plugin

商标

本项目可能包含项目、产品或服务的商标或徽标。Microsoft 商标或徽标的授权使用须遵守并遵守
Microsoft 商标和品牌指南
在本项目的修改版本中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 赞助。
任何第三方商标或徽标的使用均须遵守该第三方的政策。

关于项目

MarkItDown 是一个轻量级的 Python 实用程序,用于将各种文件转换为 Markdown,以便用于 LLM 和相关的文本分析流程。
MIT
Python
80,770
4480
277
2024-11-14
2025-09-08

增长趋势 - stars