0

MarkItDown:轻量级 Python 文件转 Markdown 工具

MarkItDown 是一个轻量级 Python 工具包,可将 PDF、Word、Excel、PowerPoint、图片、音频等多种文件格式转换为 Markdown 格式,专为大语言模型和文本分析管道设计。该工具能够保留文档的重要结构和内容,包括标题、列表、表格、链接等元素。

PyPI

核心功能与支持的格式

MarkItDown 支持将多种文件类型转换为 Markdown,主要功能包括:

  • 文档格式:支持 PDF、Word、Excel、PowerPoint、EPubs 等文档文件的转换。
  • 图片处理:提取图片的 EXIF 元数据,并支持 OCR 识别图片中的文字。
  • 音频处理:支持 WAV 和 MP3 文件的语音转录,提取 EXIF 元数据。
  • 网页与文本:支持 HTML 页面、CSV、JSON、XML 等文本格式的转换。
  • 压缩包:可遍历 ZIP 文件内容并逐一转换。
  • 视频平台:支持 YouTube 视频转写的获取。

为什么选择 Markdown

Markdown 格式接近纯文本,标记和格式化元素极少,但能清晰表达文档结构。主流大语言模型如 OpenAI 的 GPT-4o 原生支持 Markdown,能够自然理解并生成 Markdown 内容。此外,Markdown 的约定在 token 使用方面也具有高效优势。

前置要求与虚拟环境

MarkItDown 需要 Python 3.10 或更高版本。为规避依赖冲突,建议使用虚拟环境:

标准 Python 虚拟环境

使用以下命令创建并激活:

python -m venv .venv
source .venv/bin/activate

使用 uv 创建

uv venv --python=3.12 .venv
source .venv/bin/activate

使用 Anaconda

conda create -n markitdown python=3.12
conda activate markitdown

安装方式

Pip 安装

通过 pip 安装所有可选依赖:

pip install 'markitdown[all]'

或从源码安装:

git clone git@github.com:microsoft/markitdown.git
cd markitdown
pip install -e 'packages/markitdown[all]'

命令行使用

基本转换

将文件转换为 Markdown 并输出到标准输出:

markitdown path-to-file.pdf > document.md

使用 -o 参数指定输出文件:

markitdown path-to-file.pdf -o document.md

通过管道传递内容:

cat path-to-file.pdf | markitdown

可选依赖

MarkItDown 支持多种可选依赖以激活特定文件格式:

  • [all]:安装所有可选依赖。
  • [pptx]:PowerPoint 文件依赖。
  • [docx]:Word 文件依赖。
  • [xlsx]:Excel 文件依赖。
  • [xls]:旧版 Excel 文件依赖。
  • [pdf]:PDF 文件依赖。
  • [outlook]:Outlook 邮件依赖。
  • [audio-transcription]:WAV 和 MP3 音频转录依赖。
  • [youtube-transcription]:YouTube 视频转写获取依赖。

例如,仅安装 PDF、DOCX 和 PPTX 依赖:

pip install 'markitdown[pdf, docx, pptx]'

插件系统

MarkItDown 支持第三方插件,默认处于禁用状态:

  • 查看已安装插件:markitdown –list-plugins
  • 启用插件:markitdown –use-plugins path-to-file.pdf
  • 在 GitHub 搜索标签 #markitdown-plugin 查找可用插件
  • 插件开发参考:packages/markitdown-sample-plugin

MarkItDown OCR 插件

p>该插件为 PDF、DOCX、PPTX 和 XLSX 转换器添加 OCR 功能,通过集成大语言模型视觉功能提取嵌入图片中的文字。安装步骤如下:

pip install markitdown-ocr
pip install openai

使用示例:

from markitdown import MarkItDown
from openai import OpenAI
md = MarkItDown( enable_plugins=True, llm_client=OpenAI(), llm_model="gpt-4o", )
result = md.convert("document_with_images.pdf")
print(result.text_content)

Azure Document Intelligence

使用 Microsoft Document Intelligence 进行转换:

markitdown path-to-file.pdf -o document.md -d -e "<document_intelligence_endpoint>"

Python API 使用

基本示例

from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
result = md.convert("test.xlsx")
print(result.text_content)

启用插件

md = MarkItDown(enable_plugins=True)

接入大语言模型

from markitdown import MarkItDown
from openai import OpenAI
client = OpenAI()
md = MarkItDown(llm_client=client, llm_model="gpt-4o", llm_prompt="optional custom prompt")
result = md.convert("example.jpg")
print(result.text_content)

Docker 使用

docker build -t markitdown:latest .
docker run --rm -i markitdown:latest < ~/your-file.pdf > output.md

版本变更注意

0.0.1 到 0.1.0 重要变更

  • 依赖现在按功能组组织,向后兼容需使用:pip install ‘markitdown[all]’
  • convert_stream() 现在需要二进制文件对象(如 io.BytesIO),不再接受文本文件对象
  • DocumentConverter 类接口从文件路径改为读取文件流,不再创建临时文件

贡献指南

参与方式

项目欢迎所有贡献和建议:查看 Issues 或帮助评审 Pull Requests。部分 Issue 标注为 “open for contribution” 或 “open for reviewing” 以方便社区参与。

运行测试

cd packages/markitdown
pip install hatch
hatch shell
hatch test

提交 PR 前运行 pre-commit 检查:

pre-commit run --all-files

MarkItDown 通过轻量级设计和多格式支持,为大语言模型应用提供了便捷的文件转换方案,特别适合需要批量处理文档并进行文本分析的场景。

0 评论
最旧
最新 最多投票
0
希望看到您的想法,请您发表评论x