游乐游手机版
首页/AI热点日报/热点详情

微软开源 Markitdown PDF 转 Markdown 解析效果如何

类型:热点整理2026-06-28
在 RAG 应用中,处理多样化文件格式是一项常见且充满挑战的任务,其中 PDF 文件的解析尤其让开发者感到棘手。近期,微软开源了 Markitdown 这一 Markdown 转换工具,号称能将任意文件转换为 Markdown 格式。短短数日便飙升至 23K 星标,它究竟有何过人之处?其 PDF 解

在 RAG 应用中,处理多样化文件格式是一项常见且充满挑战的任务,其中 PDF 文件的解析尤其让开发者感到棘手。近期,微软开源了 Markitdown 这一 Markdown 转换工具,号称能将任意文件转换为 Markdown 格式。短短数日便飙升至 23K 星标,它究竟有何过人之处?其 PDF 解析能力到底如何?本文将深入探讨该工具的性能与潜力。

1. 简介

Markitdown 不仅支持将微软自家的 Office 文件格式转换为 Markdown,其他常见的 PDF、HTML 格式同样可以处理,甚至还能直接处理 Audio 音频文件,自动将其转写为文本。对于图像类文件,则可配置大模型自动生成描述文本。

  • PDF
  • PowerPoint
  • Word
  • Excel
  • Images
  • Audio
  • HTML
  • 各种其他基于文本的格式 (csv, json, xml, 等等)
  • ZIP 压缩包 (自动遍历内容)

介绍完毕,开始实测。

2. 安装

安装过程非常简便,只需执行下方命令即可完成。

pip install markitdown

3. 简单使用

使用方法同样简单,既支持命令行调用,也支持 Python API 集成。

  • 命令行方式
markitdown path-to-file.pdf > document.md
  • API 方式
from markitdown import MarkItDown
from openai import OpenAI

client = OpenAI()
md = MarkItDown(llm_client=client, llm_model="gpt-4o")
result = md.convert("exmaple.pdf")
print(result.text_content)

4. 测试 PDF

大家最关心的还是 PDF 文本的转换效果——之前的测评文章已经讨论过,PDF 解析的难点主要在于表格和复杂布局的提取,纯文本提取基本没有问题。那么 markitdown 在表格提取方面的表现如何?我们不妨以《LightRAG》论文为例进行转换测试。

markitdown lightrag.pdf > lightrag.md
  • 原文表格

LightRAG 中包含一个复杂表格,此处不再展示,改用最简单的表格进行对比。

  • 提取后表格

可以说样式完全丢失,连最基本的表格框架都没有保留,更严重的是文字内容的排列顺序也出现了错误。为何效果如此之差?这跟 markitdown 的实现机制有关,下面我们来一探究竟。

5. 一探深浅

markitdown 的代码量非常少,核心实现仅包含两个文件:入口文件 __main__.py 和具体转换逻辑 __markitdown.py。入口代码相当简单,主要负责接收文件并调用 convert 方法。

parser.add_argument("filename", nargs="?") 
args = parser.parse_args() 
if args.filename is None: 
    markitdown = MarkItDown() 
    result = markitdown.convert_stream(sys.stdin.buffer) 
    print(result.text_content) 
else: 
    markitdown = MarkItDown() 
    result = markitdown.convert(args.filename) 
    print(result.text_content)

markitdown 会根据文件的扩展名自动选择合适的转换器。下面重点看一下 PDF 转换器的实现。

class PdfConverter(DocumentConverter):
    """
    Converts PDFs to Markdown. Most style information is ignored, so the results are essentially plain-text.
    """

    def convert(self, local_path, **kwargs) -> Union[None, DocumentConverterResult]:
        # Bail if not a PDF
        extension = kwargs.get("file_extension", "")
        if extension.lower() != ".pdf":
            return None

        return DocumentConverterResult(
            title=None,
            text_content=pdfminer.high_level.extract_text(local_path),
        )

是的,你没有看错:它实际上只是调用了 pdfminer 的提取函数。因此,这个工具的核心目标其实是集成各类开源工具包,统一输出为 Markdown 格式。看了这两个文件你就会明白,对 markitdown 不必抱有过高期望——它并非某个格式的深度解析器,仅仅是一个轻量级的封装器(Wrapper),而非解析器(Parser)。

来源:https://www.53ai.com/news/OpenSourceLLM/2024122013970.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。