mcpField
M
markitdown

markitdown

github.com/jablonkai文档处理450 次安装今天更新
代码仓库

关于 markitdown

markitdown 是一项文档转换技能,可将文件和 URL 转为适用于大模型工作流的结构化 Markdown。它保留标题、表格和幻灯片备注等内容,但不对纯图像内容进行 OCR。

主要功能

  1. 01将文档和 URL 转为 Markdown
  2. 02保留标题、表格和列表
  3. 03批量转换目录中的文件
  4. 04使用可选格式转换器
  5. 05提供 Python API

适用场景

  1. 01将数字文档整理为大模型输入
  2. 02转换包含多种支持文件的目录
  3. 03提取办公文档中的表格和备注

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jablonkai/skills --skill markitdown

安装后在 Claude Code 中输入/markitdown确认已加载。

附带文件references/python-api.mdscripts/batch_convert.sh

详细介绍

markitdown

使用 Microsoft 的 markitdown 将文档转换为整洁的 Markdown。 它会保留结构——标题、表格、列表、链接、幻灯片备注、工作表名称——而不是抓取成一整段文本,因此很适合作为大模型的输入。

它会提取文件中已有的文本。它不会进行 OCR:扫描版 PDF 和照片的转换结果为空(见下文“仅含图像的内容”)。

设置

markitdown --version   # expect 0.1.x or later

如果未安装,请将其作为隔离工具安装。它需要 Python 3.10+:

uv tool install "markitdown[all]"      # preferred
pipx install "markitdown[all]"         # alternative

不要在 macOS 系统 Python(3.9)上直接运行 pip install:pip 会悄悄解析到古老的 markitdown 0.0.1a1,它没有 [all] 扩展,也没有可用的 CLI。如果安装报告中出现 0.0.1a1 或“does not provide the extra 'all'”,说明解释器版本太旧——请使用 uv tool install 或 uv venv -p 3.12。

[all] 会安装所有可选转换器。精简安装可以选择额外组件:pdf、docx、pptx、xlsx、xls、outlook、audio-transcription、youtube-transcription、az-doc-intel、az-content-understanding。MissingDependencyException 会指出缺少的额外组件。

如果环境禁止全局安装,请使用临时 venv,并直接调用 <venv>/bin/markitdown。

单个文件

markitdown report.pdf -o report.md      # write to a file
markitdown report.pdf                    # stdout — good for piping into a prompt
curl -sL "$URL" | markitdown -x html     # stdin: add -x/-m hints for reliable detection

实用标志(完整列表:markitdown --help):

标志用途
-o FILE输出到文件,而不是 stdout
-x EXT / -m MIME / -c CHARSET格式提示——主要用于 stdin
--keep-data-uris保留内联 base64 图像(默认会截断)
-p / --list-plugins使用 / 列出已安装的第三方插件
-d -e URLAzure Document Intelligence(云端 OCR)——参见参考资料
--use-cu --cu-endpoint URLAzure Content Understanding——参见参考资料

文件缺失和格式不受支持时,退出状态为非零;但仅含图像的内容即使输出为空,退出状态也会是 0——因此务必检查结果是否为空白。

批量转换

转换目录时,请使用随附脚本,而不是自己编写循环:

bash <skill-dir>/scripts/batch_convert.sh SRC_DIR [OUT_DIR]
# MARKITDOWN=/path/to/markitdown   if it isn't on PATH
# EXTENSIONS="pdf docx"             to narrow the file types

它会递归处理,将目录树映射到 OUT_DIR(或将文件写在各自的源文件旁),并将输出命名为 <file>.<ext>.md,以避免 report.pdf 和 report.docx 发生冲突;重新运行时会跳过已是最新的输出,最后还会生成摘要,标出 EMPTY(需要 OCR)、FAILED(附带错误)和 LEGACY(.doc/.ppt)文件。请将这些标记的文件反馈给用户——这些文件需要进一步决定如何处理。如果用户想采用不同的命名方案(例如 report.md),请修改脚本中的 dest= 行,而不是重写脚本。

哪些格式转换效果好

输入结果
.docx标题、列表、表格、链接——如果表格的第一行未标记为 Word 标题行,就会生成一个空的 | | | 表头,实际表头则成为第一行数据;如果表格很重要,请手动修正
.pptx每张幻灯片对应一个章节(``),演讲者备注位于 ### Notes: 下方
.xlsx / .xls每个工作表对应一个 ## SheetName 章节和一张表格
PDF(数字版)文本和通过 pdfplumber 还原的表格;复杂的多列布局可能会错乱
HTML、RSS/Atom、Wikipedia、Bing 结果主要内容为 Markdown
CSV / JSON / XML / .ipynb表格 / 文本 / notebook 单元格
EPUB、Outlook .msg章节 / 标题和正文
ZIP每个受支持的文件成员,分别置于 ## File: name 下
音频(.wav .mp3 .m4a .mp4)元数据和通过 Google 免费 Web Speech API 生成的转录文本——会上传音频,需要网络
YouTube URL标题、说明,以及可用时的转录文本
图像(.jpg .png)仅 EXIF 元数据(需要 exiftool)和可选的大模型图注——不进行 OCR

不支持旧版 .doc / .ppt(UnsupportedFormatException)。请先转换: 在 macOS 上运行 textutil -convert docx memo.doc,或者使用 LibreOffice 运行 soffice --headless --convert-to docx memo.doc,然后再运行 markitdown。

纯图像内容(扫描件、照片)

当 PDF 或图像转换后输出为空或几乎为空时,文字是像素,而不是字符。请直接告知用户,然后选择一种方式:

  1. 自行读取。 如果你能查看图像和 PDF(例如使用 Read 工具),请打开文件并转录内容——对于少量页面,这通常是最快的方式。说明这是你转录的内容,而不是 markitdown 的输出。
  2. 本地 OCR,如果已安装:对 PDF 执行 ocrmypdf scan.pdf out.pdf,然后用 markitdown 处理 out.pdf;图像则执行 tesseract scan.png - 。
  3. 云端 OCR:Azure Document Intelligence(-d -e ...)——会将文档发送到 Azure;只有在获得用户同意后才能使用。

切勿把空的 .md 文件当作转换成功的结果交给用户。

Python API

from markitdown import MarkItDown

md = MarkItDown()
result = md.convert("report.pdf")   # path, URL, or binary file-like object
text = result.markdown              # the Markdown string (alias: .text_content)
title = result.title                # may be None

有关流、错误处理、大模型图像说明、Azure 和插件的信息,请阅读 references/python-api.md。

交付结果前

  • 查看输出。 使用 head 查看或直接阅读。检查表格是否正常显示、文本是否乱码或为空;如果有这些情况,请告知用户。
  • 隐私。 离线转换会在本地进行;音频转录、YouTube、大模型说明和 Azure 会将内容发送到外部。使用这些方式处理敏感文件前,请先征求用户同意;密钥(OPENAI_API_KEY、Azure 凭据)应保存在环境中,切勿写入代码。
  • 大型输出。 较长的 PDF 可能生成数 MB 的 Markdown。请写入文件,并阅读或 grep 所需部分,而不是将全部内容都输出到对话中。

评论

支持 Markdown