返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

微软开源的 Markitdown 可将任意文件转换为 Markdown 格式,PDF 解析咋样?

[复制链接]
链载Ai 显示全部楼层 发表于 2 小时前 |阅读模式 打印 上一主题 下一主题

在 RAG 应用中,处理多样化的文件格式是一项常见且挑战性的任务,尤其是 PDF 文件的解析一直让开发者头疼。市面上虽然有不少 PDF 解析工具,但效果参差不齐,详情可参考上一篇《破解PDF解析难题:RAG中高效解析复杂PDF的最佳选择》。近日,微软开源了 Markitdown,宣称能够将任意文件转换为 Markdown 格式,何德何能短短数日就飙升到 23K 星星?其 PDF 解析能力究竟如何,本文将深入探讨这一工具的性能和潜力。

1. 简介

Markitdown 除了支持转换微软自家的 Office 文件格式,其他常见的 PDF、HTML 格式都可以处理,甚至还能够处理 Audio 文件,自动转译为文本。图像类的文件,可以配置大模型自动生成描述文本。

  • PDF
  • PowerPoint
  • Word
  • Excel
  • Images
  • Audio
  • HTML
  • 各种其他基于文本的格式 (csv, json, xml, etc.)
  • ZIP files (iterates over contents)

介绍完毕,开始测试

2. 安装

安装很简单,执行如下命令即可。

pip install markitdown

3. 简单使用

使用起来也很简单,使用命令或者 API。

  • 命令
markitdown path-to-file.pdf > document.md
  • API
frommarkitdownimportMarkItDown
fromopenaiimportOpenAI

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 里有一个复杂表格,这里就不演示了,使用最简单的表格。

  • 提取后表格

可以说完全丢弃 Style,连表格的样式都没有,最重要的是文字的顺序也没有排对。为什么这么差?这和 markitdown 的实现有关,让我们扒一扒咋实现的

5. 一探深浅

markitdown 的代码非常少,核心代码就两个文件:入口文件__main__.py和具体实现__markitdown.py。 入口代码很简单,就是接收文件然后调用 convert。

parser.add_argument("filename",nargs="?")args=parser.parse_args()ifargs.filenameisNone: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 的转换器。

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

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

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

是的,你没看错,它其实只是调用 pdfminer 来提取。所以这个工具的目的是集成开源工具包,统一 Markdown 文件转换。从两个文件的实现就知道了。所以对于 Markitdown 不要抱有它解析某某文件是不是更厉害?它只是一个 Wrapper 而不是 Parser。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ