MarkItDown文档转md格式工具安装及介绍
MarkItDown 是一款轻量级的 Python 工具,用于将各种文件转换为 Markdown,用于大型语言模型(LLM)及相关文本分析管道。为此,它最类似于 textract,但更注重保留重要的文档结构和内容(包括:标题、列表、表格、链接等)。虽然输出通常相当简洁且用户友好,但它是为文本分析工具设计的——对于高保真文档转换来说,可能不是最适合人类消费的选择。
MarkItDown 目前支持从以下格式转换:
- 幻灯塔
- 真是太棒了
- 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。
如何贡献
你可以通过关注问题或协助审查个人报告来帮助。欢迎任何问题或公关,但我们也将部分内容标记为“开放投稿”和“开放审核”,以促进社区贡献。当然,这些只是建议,欢迎你以任何方式贡献。
运行测试与检查
-
进入 MarkItDown 套餐:
cd packages/markitdown -
在你的环境中安装并运行测试:
hatchpip 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赞助。 任何使用第三方商标或标志均受该第三方政策约束。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)