
从扫描版 PDF 到 Markdown 只要 3 步MarkItDown 文档转换与 LLM OCR 实战【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown你拿到一份客户寄来的扫描版报告点开发现选不中任何文字——每页都是一张图片手工转录 50 页基本不现实。MarkItDown 是一个把文件和办公文档转换为 Markdown 的 Python 工具它把带文字层的文档直接转成 Markdown图片里的文字则交给接入的视觉大模型LLM指能看懂图像的生成式模型识别再把结果写回正文。先看清能力边界MarkItDown 能做什么、不做什么能做的边界在哪PDF、DOCX、PPTX、XLSX、HTML、EPUB、音频WAV/MP3/M4A 转录、图片转 Markdown图片文字识别不走本地 OCR 引擎依赖你接入的 LLM 的视觉能力命令行一行完成转换Python API 几行搞定XLSX 里的嵌入图片追加在表格后的 Images in this sheet 小节不会插进表格行内扫描版 PDF无可提取文字的页自动检测按 300 DPI 渲染整页发给 LLMpdfplumber 打不开的损坏 PDF 会用 PyMuPDF 逐页渲染重试能否恢复看文件损坏程度项目自己的测试就用这种图校验图片描述能力接入 LLM 后这张图的描述里应该出现红色圆形、蓝色方形和字符串 5bda1dd6 这些要素——测试文件test_module_misc.py断言的正是这些词。如何安装一条命令转文档一条命令装 OCR 插件pip install markitdown[all] markitdown invoice.pdf -o invoice.md第一行装主包第二行把 PDF 转成invoice.md。需要 OCR 能力再加装markitdown-ocr要改插件源码就 clone 仓库到packages/markitdown-ocr下开发。LLM 相关功能不用写复杂配置任选一个 OpenAI 兼容客户端比如官方的openai.OpenAI()配上支持视觉输入的模型名如gpt-4o传给构造函数即可写法见下一节。典型任务3 行代码让扫描版医疗报告输出 Markdown目标从一份纯图片的扫描版 PDF 里提取全部文字。素材用项目自带的测试文件packages/markitdown/tests/test_files/MEDRPT-2024-PAT-3847_medical_report_scan.pdf每页都是图像没有字符。操作装好markitdown-ocr后Python 里这样写from markitdown import MarkItDown from openai import OpenAI md MarkItDown(enable_pluginsTrue, llm_clientOpenAI(), llm_modelgpt-4o) print(md.convert(MEDRPT-2024-PAT-3847_medical_report_scan.pdf).text_content)实际输出插件把文档里的嵌入图片逐张发给 LLM返回的文字按阅读顺序插回原位每段用*[Image OCR]和[End OCR]*包裹周围原有的标题、段落、文字位置不受影响。对照项目里同一文件的期望输出expected_outputs/MEDRPT-2024-PAT-3847_medical_report_scan.md就能核对识别质量。顺带一提有文字层的普通 PDF 不会调用 LLM内置转换器直接提字符。比如movie-theater-booking-2024.pdf的订单表在输出里是标准 Markdown 表格一行不丢。关键决策点三条路线怎么取舍文档有没有文字层决定要不要花 LLM 的钱。先跑一次不带llm_client的普通转换看输出是否已够完整。够完整就不用开插件只有扫描版、图片版才值得为每页图片付一次视觉模型调用。没有现成 LLM 客户端就考虑云端端点。命令行提供--use-docintel配--endpoint和--use-cu配--cu-endpoint两条云端提取路线和自接 LLM 客户端是三选一不是叠加关系。PPTX 的描述优先于 OCR。对 PowerPoint配置了 LLM 后先向模型要图片描述拿不到描述才退回 OCR。想要纯文字识别效果时可以通过llm_prompt参数覆盖默认提示词把要求写死成只提取文字保留原有版式与顺序不要添加评论。避坑OCR 文本缺失等 3 个常见故障现象转换正常跑完Markdown 里图片位置没有任何文字也没有报错。原因llm_client或llm_model漏传了一个插件照样加载但 OCR 被静默跳过回退到内置转换器。处理两个参数必须成对传给MarkItDown()再跑一次markitdown --list-plugins确认输出里出现ocr。现象输出缺少部分图片的文字控制台出现警告。原因某次 LLM API 调用失败密钥无效、配额耗尽、模型不支持视觉输入。插件只把错误记为警告并继续转换不会中断。处理核对密钥和配额换用支持图像输入的模型被跳过的图片文字需要重跑补齐。现象输出里本该有的 base64 内嵌图片数据不见了。原因data URIbase64 编码的内嵌资源默认会被截断以控制输出体积。处理命令行加--keep-data-uris保留完整内容。深入入口两处源码、一个测试文件LLM 调用的完整链路图片编码为 base64 data URI、拼提示词、解析响应都在 OCR 服务里packages/markitdown-ocr/src/markitdown_ocr/_ocr_service.py插件如何以 priority -1.0 注册并替换内置转换器、LLM 参数如何透传看注册入口packages/markitdown-ocr/src/markitdown_ocr/_plugin.pyLLM 集成的端到端断言含用 mock 客户端验证llm_prompt是否真的传给了 APIpackages/markitdown/tests/test_module_misc.pyMarkItDown 的定位很克制一个把文件转成 Markdown 文本的本地工具文字层交给内置解析器图片层交给你接的视觉模型存储、服务和编辑它一概不管。【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考