链载Ai

标题: 微软开源的 Markitdown 可将任意文件转换为 Markdown 格式,PDF 解析咋样? [打印本页]

作者: 链载Ai    时间: 4 小时前
标题: 微软开源的 Markitdown 可将任意文件转换为 Markdown 格式,PDF 解析咋样?

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

1. 简介

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

介绍完毕,开始测试

2. 安装

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

pip install markitdown

3. 简单使用

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

markitdown path-to-file.pdf > document.md
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 (https://www.lianzai.com/) Powered by Discuz! X3.5