MarkItDown:一条命令把 PDF、Word、PPT 批量转成 LLM 能读的 Markdown
MarkItDown一条命令把 PDF、Word、PPT 批量转成 LLM 能读的 Markdown【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdownMarkItDown 是一个把 PDF、Word、Excel、PPT 等文件转成 Markdown 的工具输出保留标题、表格、列表结构能直接喂给 LLM 语料库或检索索引。如果你在做文本分析流水线或 RAG 数据准备它可以当地道的统一预处理入口。 装好两条命令拿到第一份 MarkdownPython 3.10 起步全量装好直接转pip install markitdown[all] markitdown your-file.pdf -o document.md第二条命令是最常用的姿势给一个文件拿一份.md。不加-o时结果打到 stdout可以重定向或进管道。如果只用少数几种格式把[all]换成markitdown[pdf,docx]这样的组装得快还省磁盘。如果报错先看对应格式的 extras 组装没装——绝大多数不支持该格式其实是缺可选依赖。 30 秒核对能力边界先筛一下它适不适合你的场景类别状态PDF、DOCX、PPTX、XLSX/XLS、EPUB、HTML、CSV/JSON/XML、ZIP、.msg、.ipynb内置开箱即用需对应 extras 组JPG/PNG 图片内置但没配 LLM 时只输出 EXIF 元数据MP3/WAV/M4A 音频内置依赖本地语音识别依赖YouTube、Wikipedia、RSS、Bing 搜索页内置需要联网扫描件整页无文本层需另装markitdown-ocr并传 LLM 客户端RTF 等老格式默认不支持可用插件机制扩展图片这行多说一句。仓库测试目录里的test_llm.jpg就是为这个功能准备的样本一句英文指令加一个红圆、一个蓝方传了 LLM 时模型被要求读指令并描述画面不传时同一张图只剩几行 EXIF 元数据。⚙️ 打开调度器看文件是怎么被分给对转换器的MarkItDown 最有辨识度的不是转换器数量而是路由机制。converters/目录每种格式一个独立解析器里的解析器可能同时认领一个文件谁先上手由注册顺序和优先级决定。让调度器逐个认领一条流背后的协商顺序类比前台分诊台文件流被递给各个窗口每个窗口看一眼说这是我的吗不是就回卷流再递下一个# _markitdown.py 路由循环简化版 for guess in stream_info_guesses: # 猜测来源扩展名、内容嗅探结果 for reg in sorted(self._converters, keylambda x: x.priority): if reg.converter.accepts(file_stream, guess): # 各转换器自荐我接不接 res reg.converter.convert(file_stream, guess) if res is not None: return res # 命中即返回guess 列表不只有扩展名还会用magika嗅探内容反推真实格式。比如测试样本test.jpg是 JPEG 文件内容却是论文首页——嗅探识别出它是图片由图像转换器接走这意味着你不用自己维护扩展名 → 解析器的 if/else 表错名文件、无扩展名文件调度器自己会协商。插队到最前面优先级 -1.0 怎么替换内置转换器优先级机制像加急通道插件把自己的转换器用更小的优先级值注册排序算法就把它排到内置转换器前面# markitdown-ocr 插件的注册逻辑简化 PRIORITY_OCR_ENHANCED -1.0 # 内置转换器是 0.0通用兜底格式是 10.0 markitdown.register_converter( PdfConverterWithOCR(ocr_serviceocr_service), priorityPRIORITY_OCR_ENHANCED, )OCR 插件读的和图像描述同一组llm_client/llm_model参数注册后以 -1.0 排在队列最前。注意不传llm_client时它会正常加载但静默跳过 OCR、回退到内置行为这正是后文坑位的来源。这意味着你不用改内置转换器一行代码只靠注册顺序就换了行为。 走查一批供应商单据的入库流水线场景某供应链公司采购主管老周要把 37 份供应商发票PDF、12 份框架协议DOCX、5 份对账单XLSX灌进新上的文档检索系统。验收标准每份原件对应一个 Markdown 文件Excel 里的表格能按列名检索单文件转换报错不阻塞整批。把原件放进统一目录先建好输出目录mkdir -p md_out # 54 份 PDF、DOCX、XLSX 都丢进 inbox/ 目录批量转换每份原件产出一个 Markdown。for 循环遇到单文件失败不会停正好满足报错不阻塞整批for f in inbox/*; do markitdown $f -o md_out/$(basename ${f%.*}).md done两条命令做验收抽查ls md_out | wc -l # 应该是 54一原件一文件 grep -l GRAND TOTAL md_out/*.md # 金额字段可检索如果发票里有扫描件把循环体换成带 LLM 客户端的 Python 调用提取出的文字会自动包在*[Image OCR]...[End OCR]*标记里from markitdown import MarkItDown from openai import OpenAI md MarkItDown(enable_pluginsTrue, llm_clientOpenAI(), llm_modelgpt-4o) print(md.convert(invoice_scan.pdf).markdown)如果场景只是处理单个文件把 for 循环换成cat your-file.pdf | markitdown -x pdf out.md管道输入加扩展名提示目录操作都可以省掉。️ 发布前先过一遍坑位清单缺可选依赖报no converter attempted a conversion或模块缺失 → 该格式的 extras 组没装 →pip install markitdown[pdf,docx]补装缺的那组。OCR 插件的 CLI 参数是假的插件 README 里写着--llm-client openai --llm-model gpt-4o用法 → 当前 CLI 源码__main__.py只注册了-p/--use-plugins两个--llm-*参数并不存在 → LLM 参数只能走 Python API 传命令行能力以源码为准。OCR 静默回退转换成功但输出里没有 OCR 标记也没有报错 → 没传llm_client/llm_model插件加载了但 OCR 被跳过 →pip install openai后在 Python API 里把两个参数补上。输出别直接当排版稿多栏、公式密集的文档转换后顺序会乱 → 输出定位是机器读的文本 → 当最终交付物之前人工抽查一遍。convert() 会接远程地址服务里对convert()传 URL 会发起网络请求 → 该函数本身接受 http/https URI → 处理不可信输入改用convert_local()。pip install markitdown[all]装好拿手边一份发票试markitdown your-file.pdf -o out.md看一眼输出就知道流水线的入口能不能交给它。【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考