公司动态

MarkItDown:微软开源的文档转 Markdown 神器,一个命令告别 PDF、Word、Excel 格式地狱

📅 2026/8/19 19:33:17
MarkItDown:微软开源的文档转 Markdown 神器,一个命令告别 PDF、Word、Excel 格式地狱
MarkItDown微软开源的文档转 Markdown 神器一个命令告别 PDF、Word、Excel 格式地狱【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown你是不是也经历过这样的场景上午刚把 20 份 PDF 报告里的数据手动敲进表格下午又要从 Word 合同里一段段复制文字晚上还要把 PPT 里的要点整理成笔记——每换一种格式就是一次新的复制—粘贴—排版循环一天下来光是折腾格式就耗掉了大半天。这种重复劳动的尽头其实有一条捷径MarkItDown微软开源的多格式文档转 Markdown 工具让你用一条命令把 PDF、Word、Excel、PPT、图片甚至音频全部变成干净统一的 Markdown直接喂给 LLM 或放进知识库从此把时间还给真正重要的事。一句话说清 MarkItDown 是什么如果把各种办公文档比作各说各话的方言MarkItDown 就是那个通晓所有方言的同声传译它把二十多种文件格式统一翻译成 Markdown 这一门普通话。和传统的转换工具比如 textract相比它的核心追求不是把文字抠出来而是完整保留文档结构——标题层级、列表、表格、链接、图片位置一个都不丢并且输出对 LLM 极其友好主流大模型原生说Markdowntoken 开销还低。它是微软为 LLM 文本分析管线专门设计的轻量工具定位是给机器读顺带也给人看着舒服。项目采用模块化设计每种格式一个专属转换器全部位于packages/markitdown/src/markitdown/converters/目录下_pdf_converter.py、_docx_converter.py、_xlsx_converter.py、_pptx_converter.py、_image_converter.py……加新格式只需新增一个文件。MarkItDown 三个让人眼前一亮的核心能力能力一格式识别不问文件名只看内容二十多种格式一把梭很多转换工具靠扩展名猜格式文件后缀一旦写错就抓瞎。MarkItDown 内置了 Google 的 Magika 文件识别引擎不看后缀、直接嗅探文件内容判断真实格式相关逻辑在_markitdown.py的_get_stream_info_guesses方法里。它能转换的远不止 Office 三件套文档类PDF、Word、PowerPoint、Excel新旧 xls/xlsx、EPub、Outlook 邮件.msg、纯文本、CSV/JSON/XML网页与媒体类HTML、RSS、Wikipedia 词条、YouTube 链接、ZIP 压缩包自动遍历内部文件图像与音频图片提取 EXIF 元数据 智能描述音频MP3/WAV自动转写文字换句话说你只要把文件丢给它它自己会判断这到底是什么、该怎么转。能力二LLM 加持的图片理解与 OCR扫描件也能读出字普通转换器遇到图片型内容直接放弃MarkItDown 却把它变成强项。给MarkItDown传入llm_client和llm_model后它会把图片以 base64 形式发给多模态大模型生成描述源码见_image_converter.pyPPT 里的插图、报告里的配图都会变成可检索的文字说明更进一步官方还发布了markitdown-ocr插件给 PDF、DOCX、PPTX、XLSX 里的嵌入式图片做LLM Vision OCR连整页扫描的 PDF 也能自动识别并转回 Markdown全程复用你已有的 OpenAI 兼容客户端无需安装任何重型 OCR 库。装上它纸质扫描件就不再是只能看不能搜的摆设。能力三企业级扩展——插件体系与 Azure 云服务双保险开箱即用之外MarkItDown 留了两条往上走的通道第三方插件体系插件默认关闭用markitdown --use-plugins 文件开启--list-plugins查看已装插件。想支持一种新格式参考packages/markitdown-sample-plugin实现一个DocumentConverter子类并注册即可几十行代码搞定。Azure 云服务接入 Azure Content Understanding 后转换质量再上一个台阶——支持音视频、可自定义 analyzer还能把发票金额、合同条款等结构化字段提取成 YAML front matter直接给下游程序消费。五步实操从安装到跑通你的第一次转换下面我们用一个小目标串起全部流程5 分钟内把你手头任意一个 PDF/DOCX/XLSX 变成干净的 Markdown 文件。第 1 步建好隔离环境推荐python -m venv .venv source .venv/bin/activate用虚拟环境避免依赖冲突这是官方文档首推的做法。第 2 步安装完整版pip install markitdown[all][all]一次装齐所有格式的依赖。如果你只想用某几类也可以按需安装比如pip install markitdown[pdf,docx]。第 3 步命令行转换一秒钟出结果# 转单个文件输出到 stdout markitdown 你的文档.pdf # 指定输出文件 markitdown 报告.docx -o 转换结果.md # 管道输入也支持 cat 数据表.xlsx | markitdown第 4 步用 Python API 拿结果from markitdown import MarkItDown md MarkItDown() result md.convert(年度报告.pdf) print(result.text_content) # 转换后的 Markdown 全文第 5 步验证效果打开生成的.md文件你会看到标题层级、列表、表格都以标准 Markdown 呈现——这既是给人看的也是可以直接塞进向量库做大模型 RAG 检索的原料。实战案例用 30 行代码批量转换一整个文件夹的发票现在到了最有价值的环节。假设你的公司财务每天要处理大量不同格式的发票PDF 扫描件、Excel 清单、Word 说明我们要做的是遍历整个目录把每种格式都转成 Markdown并按文件名落盘为后续提取金额、日期等结构化信息打好基础。import os from pathlib import Path from markitdown import MarkItDown md MarkItDown() # 初始化转换器 def batch_convert(folder: str) - int: 把 folder 目录下所有支持的文档批量转为 .md 文件 count 0 for path in Path(folder).iterdir(): # 跳过目录和已转换过的文件 if path.is_dir() or path.suffix.lower() .md: continue try: # 一行核心代码任意格式 - Markdown result md.convert(str(path)) # 同名输出如 invoice.pdf - invoice.md out path.with_suffix(.md) out.write_text(result.text_content, encodingutf-8) count 1 print(f[OK] {path.name} - {out.name}) except Exception as e: # 单个失败不影响整体流程打印后继续 print(f[FAIL] {path.name}: {e}) return count if __name__ __main__: total batch_convert(/path/to/invoices) print(f共转换 {total} 个文件全部完成)跑完这个脚本原本散落在 PDF、Excel、Word 里的发票信息全部变成统一格式的 Markdown。接下来无论是做关键词检索、喂给 LLM 做自动记账还是建立可搜索的财务知识库都变得水到渠成。用 MarkItDown 转换一张扫描发票的效果示例项目自带测试数据packages/markitdown/tests/test_files/expected_outputs/RECEIPT-2024-TXN-98765_retail_purchase.md中保留了完整的表格、金额、优惠信息足以说明它对手写体以外的版式还原能力。三个让资深用户少踩坑的进阶技巧技巧一按需安装依赖别一上来就[all][all]很省事但也把pptx、docx、pdf、xls、outlook、音频转写、Azure 客户端等全部依赖装进环境。在服务端或 CI 里请按实际格式精确安装比如pip install markitdown[pdf,docx,xlsx]环境更干净、构建更快。技巧二扫描件转不出字八成是没配 LLM很多用户抱怨扫描版 PDF 转出来是空的——因为纯文本提取对图片型页面本就无能为力。正确做法是安装 OCR 插件并传入视觉模型pip install markitdown-ocr openaifrom markitdown import MarkItDown from openai import OpenAI md MarkItDown( enable_pluginsTrue, # 开启插件默认关闭 llm_clientOpenAI(), # 复用你已有的 OpenAI 兼容客户端 llm_modelgpt-4o, # 使用支持视觉的模型 ) result md.convert(扫描件.pdf) print(result.text_content)注意enable_pluginsTrue不能省插件默认不加载漏了llm_client时插件会静默跳过 OCR输出里自然找不到文字。技巧三注意安全边界别把不可信文件直接丢给convert()官方 README 顶部就有一条重要安全提示MarkItDown 会以当前进程的权限执行 I/Oconvert()方法刻意设计得很宽容能处理本地路径、远程 URL、字节流。如果你的应用只允许读本地文件请调用更窄的convert_local()需要控制远程抓取就用convert_response()。在服务端接收用户上传的场景务必先校验路径、限制 URI 协议再交给它处理。结语从今天起把格式转换这件小事彻底自动化MarkItDown 的价值一句话就能说清它把你每天花在搬格式上的时间压缩成一条命令。本地离线可用、LLM 友好、支持插件扩展还有 Azure 云服务做企业级兜底——无论你是想给 RAG 知识库准备语料的数据工程师还是整天和多种文档打交道的办公族都值得花五分钟装上试试pip install markitdown[all] markitdown 你的第一份文档.pdf -o 第一份成果.md想深入源码或贡献新格式转换器可以 clone 仓库到本地探索packages/markitdown/src/markitdown/converters/下的实现官方欢迎一切 Issue 和 PR。把重复劳动交给工具把创造力留给自己——这就是 MarkItDown 想帮你实现的事。【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考