markitdown 20+ 格式一条命令转 Markdown:把 PPT、PDF 喂进 LLM 前的文档转换
【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown
手头 200 份 PPT、300 份 PDF 要进知识库,模型读不懂二进制,复制粘贴又丢结构。markitdown 是微软开源的 Python 工具,把 PDF、PPT、Word、Excel、图片、音频等 20 多种格式统一转成干净的 Markdown 文档转换工具,本地离线就能跑。读完这篇,你能在 30 秒装完它,一条命令转单文件,再跑通目录级批量转换和 LLM 增强工作流。
30 秒装完 markitdown:第一条命令就出 Markdown
要求 Python 3.10+,建议装在虚拟环境里。
python -m venv .venv && source .venv/bin/activate pip install 'markitdown[all]'只想装某几个格式?把all换成 extras 组合,比如pip install 'markitdown[pdf,docx,pptx]'就只装 PDF、Word、PPT 的依赖。
对任意文件跑第一条转换命令:
markitdown report.pdf -o report.md cat report.pdf | markitdown > report.md看不到输出时,用版本号确认装好了:
markitdown --version不想装 Python 环境的话,项目自带 Dockerfile,docker run --rm -i markitdown:latest < report.pdf > out.md即可,适合 CI。
能力总览:markitdown 覆盖哪些格式转换
markitdown 内置 18 个转换器,加上插件能到 20 多种格式,全部本地运行,不上传文件。
| 能力 | 说明 | 典型用法 |
|---|---|---|
| 格式覆盖 | PDF、PPTX、DOCX、XLSX/XLS、EPUB、CSV/JSON、HTML、ZIP、图片、音频、Outlook、YouTube 字幕 | markitdown file.pdf -o out.md |
| 结构保真 | 标题转#级标题、表格转 Markdown 表格、列表保留有序/无序 | 输出可直接按标题给 RAG 切片 |
| 多模态 | 图片默认提取 EXIF,接 LLM 可生成图片描述;音频可语音转写 | MarkItDown(llm_client=...) |
| 可扩展 | 第三方插件走 entry point 注册,Azure Document Intelligence / Content Understanding 做云增强 | markitdown -p启用插件 |
这张测试样例图就是走 LLM 图片描述通道的输入,接上模型后描述会写进输出。
三个真实场景:单文件、批量目录、接 LLM
场景一:单份 PDF 转成可检索的 Markdown
测试集里有一份带图论文 PDF,适合验证结构保真:
markitdown packages/markitdown/tests/test_files/test.pdf -o ./out/test.md输出里标题层级、段落和图片说明都保留,多栏排版偶尔段落顺序小错位,做检索语料够用。
场景二:批量转换一个目录的 PPTX
不用写脚本,一个 for 循环把整个目录转完:
mkdir -p ./out for f in ./presentations/*.pptx; do markitdown "$f" -o "./out/$(basename "${f%.pptx}").md" done坏文件会单独报错但不中断循环,最后挑出缺失的输出补处理即可。
场景三:接 LLM 给图片写描述,或用 OCR 插件
PPT 里大量示意图,接上 LLM 客户端后图片会被自动描述并写进输出:
from openai import OpenAI from markitdown import MarkItDown md = MarkItDown(llm_client=OpenAI(), llm_model="gpt-4o", llm_prompt="用中文描述图表内容,包含关键数字") print(md.convert("weekly.pptx").markdown)没有 LLM 预算时,走仓库内的 OCR 插件包:安装后markitdown -p启用,用 LLM Vision 给文档里的嵌入图片做识别,写法和上面对齐。
底层怎么走:从内容探测到统一输出
- 用 magika 对输入做内容探测,不只看扩展名,再叠加你给的
-x扩展名、-mMIME、-c字符集提示 - 按优先级匹配转换器,专用格式(0.0)先于通用兜底(10.0)逐个尝试,实现都在 converters/
- 所有格式统一产出
DocumentConverterResult,result.markdown直接取用
扩展走 entry point 注册,markitdown --list-plugins查看已装插件,-p启用,参考 sample-plugin 示例。
踩坑快问快答
Q:转换时报缺少依赖?是MissingDependencyException,对应格式的 extras 没装。按报错补装,如pip install 'markitdown[pdf]',或一步到位[all]。
Q:文本类文件转出来乱码?传字符集提示:markitdown -c UTF-8 file.txt。仍乱码就用file命令确认源文件真实编码再传对应的-c值。
Q:扫描件 PDF 转出来是空的?纯扫描件没有文字层,内置转换器提不到字。装 markitdown-ocr 插件用 LLM Vision 做识别,或--use-docintel走 Azure 云端布局分析。
Q:输出适合给人直接看吗?它面向 LLM 和文本管线,结构对但排版不求漂亮。要出版级排版的高保真文档,那不是它的主场。
Q:处理不可信输入要注意什么?markitdown 以当前进程权限做 I/O,和open()权限相当。别把陌生用户给的 URL 直接喂给convert(),改用更窄的convert_local(),并对文件路径和 URI 做校验。
挑一份手头的 PPT 或 PDF,pip install 'markitdown[all]'后跑一条markitdown,30 秒就能看出输出里的标题和表格是否对味。对味了再上批量循环和 LLM 增强。
【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考