MarkItDown 是一款轻量级的 Python 工具,用于将各种文件转换为 Markdown,用于大型语言模型(LLM)及相关文本分析管道。为此,它最类似于 textract,但更注重保留重要的文档结构和内容(包括:标题、列表、表格、链接等)。虽然输出通常相当简洁且用户友好,但它是为文本分析工具设计的——对于高保真文档转换来说,可能不是最适合人类消费的选择。

下载地址:GitHub - microsoft/markitdown: Python tool for converting files and office documents to Markdown. · GitHub

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

  • PDF
  • 幻灯塔
  • 真是太棒了
  • Excel
  • 图像(EXIF 元数据和 OCR)
  • 音频(EXIF元数据和语音转录)
  • HTML
  • 基于文本的格式(CSV、JSON、XML)
  • ZIP 文件(内容可循环)
  • YouTube网址
  • EPub

为什么选择Markdown?

Markdown 非常接近纯文本,标记和格式极少,但仍然如此 提供了一种表示重要文档结构的方式。主流大型语言模型,例如 OpenAI的GPT-4o能够“”Markdown,并且经常将Markdown融入他们的 无需提示的回复。这表明他们接受了大量 用Markdown格式的文本,并且要理解它。作为附带福利,Markdown 约定 同时也非常高效地使用令牌。

前提条件

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

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

python -m venv .venv
source .venv/bin/activate

如果使用 ,你可以创建一个包含以下内容的虚拟环境:uv

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,你可以创建一个包含以下功能的虚拟环境:

conda create -n markitdown python=3.12
conda activate markitdown

安装

安装 MarkItDown 

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]Installs dependencies for Azure Document Intelligence
  • [az-content-understanding]Installs dependencies for Azure Content Understanding
  • [audio-transcription]安装 wav 和 mp3 文件音频转录的依赖
  • [youtube-transcription]安装依赖以获取YouTube视频转录

插件

MarkItDown 还支持第三方插件。插件默认是禁用的。列出已安装的插件:

markitdown --list-plugins

启用插件请使用:

markitdown --use-plugins path-to-file.pdf

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

markitdown-ocr 插件

该插件为 PDF、DOCX、PPTX 和 XLSX 转换器增加了 OCR 支持,利用 LLM Vision 从嵌入图像中提取文本——这与 MarkItDown 已用于图像描述的模式相同。不需要新的机器学习库或二进制依赖。markitdown-ocrllm_clientllm_model

安装:

pip install markitdown-ocr
pip install openai  # or any OpenAI-compatible client

使用情况:

传递同样的,你会用来描述图片:llm_clientllm_model

from markitdown import MarkItDown
from openai import OpenAI

md = MarkItDown(
    enable_plugins=True,
    llm_client=OpenAI(),
    llm_model="gpt-4o",
)
result = md.convert("document_with_images.pdf")
print(result.text_content)

如果没有,插件仍然会加载,但OCR会被静默跳过,改用标准内置转换器。llm_client

详见 packages/markitdown-ocr/README.md 获取详细文档。

Azure Content Understanding

Azure 内容理解提供更高质量的转换,支持结构化字段提取(YAML 前置信息)、多模态支持(文档、图片、音频、视频)和可配置分析器。

安装:pip install 'markitdown[az-content-understanding]'

何时使用内容理解

当您需要超出内置或文档智能转换器所能提供的功能时,内容理解是理想的:

  • 音频和视频文件——视频只能选择CU,音频则是更高质量的云选项。内置转换器不支持视频,仅支持基础音频转录。
  • 结构化字段提取——预构建定制的分析器提取以YAML前条序列化的领域特定字段(发票金额、收据日期、合同条款)。无论是内置集成还是Doc Intel集成,都不会暴露字段。
  • 更高质量的文档提取——基于云的布局分析和OCR技术,适用于扫描PDF、复杂表格和多页文档。
  • 所有模式的单一 API ——One 通过自动分析器处理文档、图片、音频和视频。cu_endpoint
能力 内置转换器 Azure 文档智能 Azure Content Understanding
文档转换 离线、格式特定提取 云层布局提取 云多模态提取
结构化场 不可用 这种集成不会暴露 分析场中的YAML前件
定制分析仪 不可用 此集成中不可配置 支持cu_analyzer_id
音频与视频 基础音频,无视频 不支持。 音频和视频分析仪
费用 仅本地计算 可计费的Azure API 调用 可计费的Azure API 调用

CLI:

markitdown path-to-file.pdf --use-cu --cu-endpoint "<content_understanding_endpoint>"

Python API:

from markitdown import MarkItDown

# Zero-config — auto-selects analyzer per file type
md = MarkItDown(cu_endpoint="<content_understanding_endpoint>")
result = md.convert("report.pdf")   # documents → prebuilt-documentSearch
result = md.convert("meeting.mp4")  # video → prebuilt-videoSearch
result = md.convert("call.wav")     # audio → prebuilt-audioSearch
print(result.markdown)

使用自定义分析仪(用于域特定场提取):

md = MarkItDown(
    cu_endpoint="<content_understanding_endpoint>",
    cu_analyzer_id="my-invoice-analyzer",
)
result = md.convert("invoice.pdf")
print(result.markdown)
# Output includes YAML front matter with extracted fields:
# ---
# contentType: document
# fields:
#   VendorName: CONTOSO LTD.
#   InvoiceDate: '2019-11-15'
# ---
# <!-- page 1 -->
# ...

当 设置好时,转换器会自动根据分析仪的模态将其映射到兼容的文件类型。不兼容的类型(例如带有文档分析器的音频文件)会自动路由到默认的预构建分析器。cu_analyzer_id

费用说明:每个CU路由格式的调用都是可计费的AzureAPI调用。用于限制哪些格式可以路由到CU:convert()cu_file_types

from markitdown.converters import ContentUnderstandingFileType

md = MarkItDown(
    cu_endpoint="<content_understanding_endpoint>",
    cu_file_types=[ContentUnderstandingFileType.PDF],  # only PDFs use CU
)

关于Azure内容理解的更多信息请见此处

Azure 文档智能

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

markitdown path-to-file.pdf -o document.md -d -e "<document_intelligence_endpoint>"

关于如何设置Azure文档智能资源的更多信息,可以在这里找到。

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 中的文档智能转换:

from markitdown import MarkItDown

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

要使用大型语言模型进行图像描述(目前仅适用于pptx和图像文件),请提供和:llm_clientllm_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机器人会自动判断你是否需要提供 需要适当装饰PR(例如状态检查、评论)。只需按照说明操作 由机器人提供。你只需在所有仓库中使用我们的CLA完成一次操作。

该项目已采用Microsoft开源行为准则。 更多信息请参阅行为准则常见问题解答或 如有任何额外问题或意见,请联系 opencode@microsoft.com

如何贡献

你可以通过关注问题或协助审查个人报告来帮助。欢迎任何问题或公关,但我们也将部分内容标记为“开放投稿”和“开放审核”,以促进社区贡献。当然,这些只是建议,欢迎你以任何方式贡献。

全部 尤其需要社区的帮助
议题 所有问题 开放讨论的问题
个人最佳纪录 所有个人最佳 PR已开放审核

运行测试与检查

  • 进入 MarkItDown 套餐:

    cd packages/markitdown
  • 在你的环境中安装并运行测试:hatch

    pip install hatch  # Other ways of installing hatch: https://hatch.pypa.io/dev/install/
    hatch shell
    hatch test

    (另类)使用安装所有依赖的开发容器:

    # Reopen the project in Devcontainer and run:
    hatch test
  • 提交PR前先进行预提交检查:pre-commit run --all-files

安全考量

MarkItDown 使用当前进程的权限执行 I/O。比如,它会访问进程本身能够访问的资源。open()requests.get()

净化你的输入:请不要直接将不受信任的输入传递给MarkItDown。如果输入的任何部分可能被不受信任的用户或系统控制,如托管或服务器端应用,必须在调用MarkItDown前进行验证和限制。根据你的环境,这可能包括限制文件路径、限制URI方案和网络目的地,以及阻止访问私有地址、环回地址、链路本地地址或元数据服务地址。

只需调用您需要的转换方法:优先选择最窄的转换API,符合你的使用场景。MarkItDown 的方法有意为宽松,可以处理本地文件、远程 URI 和字节流。如果你的应用只需要读取本地文件,那就打电话吧。如果你需要更多控制 URI 获取,可以调用自己并将响应对象传递给 。为了最大化控制,打开一个流到你想转换的输入,并调用 。convert()convert_local()requests.get()convert_response()convert_stream()

贡献第三方插件

你也可以通过创建和分享第三方插件来贡献力量。详情请参见。packages/markitdown-sample-plugin

商标

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐