microsoft/markitdown

GitHub: microsoft/markitdown

微软开源的轻量级Python工具,将PDF、Office文档、图片、音频等多种格式转换为Markdown,专为LLM和文本分析管道优化。

Stars: 89130 | Forks: 5229

# MarkItDown [![PyPI](https://img.shields.io/pypi/v/markitdown.svg)](https://pypi.org/project/markitdown/) ![PyPI - Downloads](https://img.shields.io/pypi/dd/markitdown) [![Built by AutoGen Team](https://img.shields.io/badge/Built%20by-AutoGen%20Team-blue)](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, 多模态, 大语言模型, 开源库, 搜索引擎爬虫, 数据预处理, 文件转换, 文本提取, 文档处理, 无后门, 语音转文字, 请求拦截, 调试插件, 逆向工具