我的新开源Markify!专为 LLM 优化的开源文档解析神器,轻松破解 PDF 难题!融合MinerU和markitdown!

不论是在 RAG 应用,还是当下时髦的 Deep Research 应用中,多格式文件的解析始终是一大挑战,尤其是 PDF 文件,由于其复杂的结构和多样的排版方式,很多工具在解析时效果参差不齐。虽然市面上有不少 PDF 解析工具,但高质量且统一的解决方案却少之又少。之前我们已通过《破解 PDF 解析难题:RAG 中高效解析复杂 PDF 的最佳选择》和《微软开源的 Markitdown 可将任意文件转换为 Markdown 格式,PDF 解析咋样?》详细评测过现有工具。比如,微软的 markitdown1 很好地解决了各类格式转换为 Markdown 的问题,但在 PDF 解析上仍显不足。

2024 年,一款全新的 PDF 解析工具 MinerU2 闪亮登场,在 GitHub 上已获得 27.7K 关注,迅速成为文档处理领域的明星。MinerU 是一款开源且功能强大的文档数据提取工具,专注于将 PDF 等复杂文档转换为机器可读的格式,非常适用于学术研究、技术写作和大模型训练等场景。然而,其采用的 AGPL v3 授权具有传染性,直接集成会迫使项目整体开源,这在商业项目中往往难以接受。

为了解决这一困局,我正式推出 Markify3 ------ 一款融合了微软 markitdown 和 MinerU 优势的工具。Markify 不仅能将 PDF、Word、PPT、Excel、图片、音频、网页、CSV、JSON、XML 甚至 ZIP 压缩包等多种文件统一转换为 Markdown 格式,还借助 MinerU 实现了高效准确的 PDF 解析,并通过开发 HTTP 服务巧妙绕开 AGPL 传染问题,从而无缝集成于各类项目中。

本文首先介绍 Markify 的功能与转换效果展示,然后详细说明其如何与 LlamaIndex 无缝接入,最后提供快速安装和测试的指导。

1. Markify 简介

Markify 为多种文件格式提供统一解析框架,特别是在 PDF 解析上拥有三种模式以满足不同场景的需求:

  • 快速模式(simple) 基于pdfminer(markitdown 内置的 pdf 解析器),专注于高效文本提取,适合对文本要求较低的场景。
  • 高级模式(advanced) 结合 MinerU 的深度解析,不仅能精准提取文本,还能识别并转换复杂表格和图像,还将图像自动转换为 Markdown 中的网络引用形式,例如:
less 复制代码
![](http://localhost:20926/images/xxxx.jpg)
  • 云端模式(cloud) 正在研发中,未来将为用户提供更多云端解析能力。

2. 转换效果展示

2.1 整体转换效果

在对最近热门论文PIKE-RAG4进行转换时,Markify 对文本内容提取精准,整体排版清晰易读。

2.2 表格提取效果

对于文中的复杂表格,Markify 能够准确识别并转换为 Markdown 表格,展示效果极佳。

2.3 图像提取效果

在图像转换方面,Markify 将图像上传至服务器并嵌入 Markdown 中,使得图文混排效果更为直观美观。

这些案例充分展示了 Markify 在 PDF 解析上的卓越表现,无论是文本、表格还是图像,都能高质量地转换为 Markdown 格式,为后续的模型处理提供了坚实基础。

3. 与 LlamaIndex 的无缝集成

为了进一步简化大模型的数据预处理工作,Markify 同时支持与 LlamaIndex 的集成。LlamaIndex 定义了 BaseReader 接口,用户只需实现该接口即可自定义文件解析器。下面的示例展示了如何利用自定义的 MyFileLoader,通过 Markify API 将 PDF 文件加载到 LlamaIndex 中,就像使用 LlamaParse 一样:

ini 复制代码
class MyFileLoader(BaseReader):
    def __init__(self, conversion_service_url, poll_interval=5, timeout=300, mode='advanced'):
      ...
        self.service_url = conversion_service_url.rstrip('/')
        self.poll_interval = poll_interval
        self.timeout = timeout
        self.mode = mode
    ......

在实际使用时,只需指定.pdf文件由 MyFileLoader 进行处理即可,其他格式的文件也可通过 makify 处理:

ini 复制代码
pdf_loader = MyFileLoader(
    conversion_service_url=settings.markify_api_base,
    poll_interval=5,
    timeout=settings.markify_api_timeout
)
documents = SimpleDirectoryReader(input_files=[file_path], file_extractor={
    ".pdf": pdf_loader,
}).load_data()

通过这种方式,Markify实现了与 LlamaIndex的无缝接入,就像LlamaParser一样高效稳定。完整的 MyFileLoader 实现已在我的知识星球AgenticLM中共享,欢迎有兴趣的朋友加入了解更多细节。

4. 安装与使用指南

为了帮助大家更方便地集成 Markify,我们提供了基于 FastAPI 的 HTTP API 服务,客户端通过 HTTP 调用即可绕过 AGPL 传染,内部项目也无需开源。

4. 1 安装

首先克隆源码:

bash 复制代码
git clone https://github.com/KylinMountain/markify

进入项目目录,并安装依赖:

ini 复制代码
cd markify
conda create --name markify python=3.10
pip install -r requirements.txt

4.2 启动 API 服务

首次启动时,Markify 会自动从 ModelScope 下载 MinerU 的模型文件(若下载较慢,可设置环境变量 MINERU_USE_MODELSCOPE=false 切换至 HuggingFace 下载):

css 复制代码
uvicorn main:app --reload --port 20926

启动后,即可通过浏览器访问http://localhost:20926/docs查看 API 文档,支持上传文档、查询任务状态和下载文件。

4.3 启动 Streamlit 客户端

执行以下命令启动 Streamlit 客户端,浏览器访问http://localhost:8501/即可简单快捷开始转换转换文件:

arduino 复制代码
streamlit run ./client/streamlit_client.p

在 Streamlit 客户端中,选择 PDF 处理模式即可选择上述 3 种模式,右侧显示转换列表,完成即可自行下载转换好的 markdown 文档。

5. 总结

Markify 通过整合 Markitdown 与 MinerU 的优势,提供了一个统一、高质量的文件解析解决方案,尤其在 PDF 解析中表现尤为出色。无论是文本、表格还是图像的提取,Markify 都能满足各种场景的需求。此外,基于 FastAPI 开发的 API 服务设计,使得用户能以 HTTP 调用的方式集成到现有项目中,轻松规避 AGPL 传染问题,并实现与 LlamaIndex 等大模型的无缝对接。

总之,Markify 为 RAG 应用及文档预处理带来了全新的解决思路和更高的解析效率,期待你也来体验和开发这款开源利器,为开源添砖加瓦!

最后,感谢粉丝同学Joshua提交Docker编译和Streamlit。如果对你有用,不烦加星关注哦~

参考资料

1markitdown: github.com/microsoft/m...

2MinerU: github.com/opendatalab...

3Markify : github.com/KylinMounta...

4PIKE-RAG: arxiv.org/pdf/2501.11...

相关推荐
安全指北针2 分钟前
大模型时代,谁在领跑中国AI安全赛道?中国AI安全产品市场分析
人工智能
KaMeidebaby27 分钟前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy61829 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
YueTann31 分钟前
OpenRLHF设计
人工智能
云烟成雨TD33 分钟前
Spring AI 1.x 系列【52】可观测集成 SkyWalking
人工智能·spring·skywalking
云烟成雨TD33 分钟前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
AndrewHZ34 分钟前
【LLM技术全景】规模定律与模型演进:为什么模型越大越强?
人工智能·gpt·深度学习·语言模型·llm·openai·规模定律
galaxylove34 分钟前
Gartner发布创新洞察:AI SOC智能体加速通信运营商安全运营转型
大数据·人工智能·安全
甩手网软件44 分钟前
Shopee2026新规:费率重构与履约收紧下,卖家如何破局?
大数据·人工智能
数据库小学妹1 小时前
AI时代数据库怎么选?多模融合、数据统一存储与选型实战指南
数据库·人工智能·经验分享·ai