microsoft/markitdown
GitHub: microsoft/markitdown
微软开源的轻量级Python工具,将PDF、Office文档、图片、音频等多种格式转换为Markdown,专为LLM和文本分析管道优化。
Stars: 89130 | Forks: 5229
# MarkItDown
[](https://pypi.org/project/markitdown/)

[](https://github.com/microsoft/autogen)
MarkItDown 是一个轻量级的 Python 实用工具,用于将各种文件转换为 Markdown,以便与 LLMs 及相关的文本分析管道配合使用。为此,它与 [textract](https://github.com/deanmalmgren/textract) 最具可比性,但侧重于将重要的文档结构和内容保留为 Markdown(包括:标题、列表、表格、链接等)。虽然输出通常相当美观且对人类友好,但它的设计初衷是供文本分析工具使用——对于面向人类的高保真文档转换,它可能不是最佳选择。
MarkItDown 目前支持从以下格式进行转换:
- PDF
- PowerPoint
- Word
- Excel
- 图像(EXIF 元数据和 OCR)
- 音频(EXIF 元数据和语音转录)
- HTML
- 基于文本的格式(CSV, JSON, XML)
- ZIP 文件(遍历内容)
- Youtube URLs
- EPubs
- ... 以及更多!
## 为什么选择 Markdown?
Markdown 非常接近纯文本,只有极少的标记或格式,但仍然
提供了一种表示重要文档结构的方式。主流 LLMs,例如
OpenAI 的 GPT-4o,原生“_说_”Markdown,并且经常在未被提示的情况下将 Markdown 纳入其
响应中。这表明它们是在大量的
Markdown 格式文本上训练的,并且很好地理解它。作为一个附带的好处,Markdown 约定
也具有极高的 token 效率。
## 前置条件
MarkItDown 需要 Python 3.10 或更高版本。建议使用虚拟环境以避免依赖冲突。
使用标准的 Python 安装,您可以使用以下命令创建并激活虚拟环境:
```
python -m venv .venv
source .venv/bin/activate
```
如果使用 `uv`,您可以使用以下命令创建虚拟环境:
```
uv venv --python=3.12 .venv
source .venv/bin/activate
# 注意:请务必使用 'uv pip install' 而非仅仅 'pip install' 来在此 virtual environment 中安装 packages
```
如果您正在使用 Anaconda,您可以使用以下命令创建虚拟环境:
```
conda create -n markitdown python=3.12
conda activate markitdown
```
## 安装
要安装 MarkItDown,请使用 pip:`pip install 'markitdown[all]'`。或者,您可以从源码安装:
```
git clone git@github.com:microsoft/markitdown.git
cd markitdown
pip install -e 'packages/markitdown[all]'
```
## 用法
### 命令行
```
markitdown path-to-file.pdf > document.md
```
或者使用 `-o` 指定输出文件:
```
markitdown path-to-file.pdf -o document.md
```
您也可以通过管道传递内容:
```
cat path-to-file.pdf | markitdown
```
### 可选依赖项
MarkItDown 具有用于激活各种文件格式的可选依赖项。在本文档前面,我们使用 `[all]` 选项安装了所有可选依赖项。但是,您也可以单独安装它们以进行更多控制。例如:
```
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 Document Intelligence 的依赖项
* `[audio-transcription]` 安装 wav 和 mp3 文件音频转录的依赖项
* `[youtube-transcription]` 安装获取 YouTube 视频转录的依赖项
### 插件
MarkItDown 还支持第三方插件。默认情况下插件是禁用的。要列出已安装的插件:
```
markitdown --list-plugins
```
要启用插件,请使用:
```
markitdown --use-plugins path-to-file.pdf
```
要查找可用的插件,请在 GitHub 上搜索标签 `#markitdown-plugin`。要开发插件,请参阅 `packages/markitdown-sample-plugin`。
### Azure Document Intelligence
使用 Microsoft Document Intelligence 进行转换:
```
markitdown path-to-file.pdf -o document.md -d -e ""
```
关于如何设置 Azure Document Intelligence 资源的更多信息可以在[这里](https://learn.microsoft.com/en-us/azure/ai-services/document-intelligence/how-to-guides/create-document-intelligence-resource?view=doc-intel-4.0.0)找到
### Python API
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 中的 Document Intelligence 转换:
```
from markitdown import MarkItDown
md = MarkItDown(docintel_endpoint="")
result = md.convert("test.pdf")
print(result.text_content)
```
要使用 Large Language Models 进行图像描述(目前仅支持 pptx 和图像文件),请提供 `llm_client` 和 `llm_model`:
```
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
```
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 开源行为准则](https://opensource.microsoft.com/codeofconduct/)。
有关更多信息,请参阅[行为准则常见问题解答](https://opensource.microsoft.com/codeofconduct/faq/)或
联系 [opencode@microsoft.com](mailto:opencode@microsoft.com) 提出任何其他问题或评论。
### 如何贡献
您可以通过查看问题或帮助审查 PR 来提供帮助。欢迎任何问题或 PR,但我们也标记了一些为“开放贡献”和“开放审查”,以帮助促进社区贡献。当然,这些只是建议,欢迎您以任何您喜欢的方式做出贡献。
| | 所有 | 特别需要社区帮助 |
| ---------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Issues** | [所有 Issues](https://github.com/microsoft/markitdown/issues) | [开放贡献的 Issues](https://github.com/microsoft/markitdown/issues?q=is%3Aissue+is%3Aopen+label%3A%22open+for+contribution%22) |
| **PRs** | [所有 PRs](https://github.com/microsoft/markitdown/pulls) | [开放审查的 PRs](https://github.com/microsoft/markitdown/pulls?q=is%3Apr+is%3Aopen+label%3A%22open+for+reviewing%22) |
### 运行测试和检查
- 导航到 MarkItDown 包:
cd packages/markitdown
- 在您的环境中安装 `hatch` 并运行测试:
pip install hatch # 其他安装 hatch 的方法:https://hatch.pypa.io/dev/install/
hatch shell
hatch test
(替代方案)使用已安装所有依赖项的 Devcontainer:
# 在 Devcontainer 中重新打开项目并运行:
hatch test
- 在提交 PR 之前运行预提交检查:`pre-commit run --all-files`
### 贡献第三方插件
您也可以通过创建和共享第三方插件来做出贡献。有关更多详细信息,请参阅 `packages/markitdown-sample-plugin`。
## 商标
本项目可能包含项目、产品或服务的商标或徽标。Microsoft
商标或徽标的授权使用受
[Microsoft 商标与品牌指南](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general) 的约束,并且必须遵循该指南。
在本项目的修改版本中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 的赞助。
任何第三方商标或徽标的使用均受这些第三方政策的约束。标签:AutoGen, DLL 劫持, ETL, Excel转Markdown, JavaCC, LLM工具, Markdown, Microsoft, OCR, PDF转换, Petitpotam, PPT转Markdown, Python, RAG, Token优化, Word转Markdown, 多模态, 大语言模型, 开源库, 搜索引擎爬虫, 数据预处理, 文件转换, 文本提取, 文档处理, 无后门, 语音转文字, 请求拦截, 调试插件, 逆向工具