為什么你的RAG效果差?可能PDF沒準備好!
將 PDF 轉成文本這件事,過去是“能做到”,現在是“輕松做到”。
最近我搭建了一個圖數據庫(Graph Data Store),用于 RAG 系統 —— 換句話說,我們做了一個 GraphRAG。
為什么用 GraphRAG?
相比常見的向量數據庫支持的 RAG,Graph RAG 有個巨大優勢 —— 推理能力更強。比如:
問題 A:「XYZ 公司去年 CFO 是誰?」這種問題,向量搜索就能搞定,因為年報里通常直接寫了。
但換成這樣:
問題 B:「XYZ 公司有哪兩位董事是同一所學校畢業的?」如果年報沒有直接提學校名,向量搜索就“廢了”。GraphRAG 就能玩得轉,因為它能推理出隱含關系。
但問題來了 —— 怎么構建這個圖?
我最近寫了一篇文章專門講這個問題。但如果我們再往前一步想:怎么從 PDF 里提取信息來構建知識圖譜?
這篇文章就來講這個過程。
如何把 PDF 轉成結構化富文本?
所有的工程步驟都從一件事開始:把 PDF 變成文本數據。
但問題是 —— 年報不是普通 PDF,它們包含大量圖表、表格、結構化數據。這些內容都非常關鍵。
大多數 Python 開發者用過 PDF 解析庫,比如:
???PyPDF2?
?? —— 超老牌,能用,但很簡陋。
????PyMuPDF4LLM?
?? —— 能直接把 PDF 轉成 Markdown 格式。
????Docling?
?? —— IBM Deep Search 出品,提取效果驚艷。
????Marker?
?? —— 另一個很新的工具,表現也不錯。
我們依次測了一下這幾個工具的效果。
? 各工具提取效果對比
?PyPDF2:純文本提取,沒有任何結構。段落、標題、表格、列表,全都混成一堆。
?PyMuPDF4LLM:能轉成 markdown,有結構信息,LangChain 等框架支持,但表格效果拉胯。
?Docling:表現最強!能保留標題層級、表格結構、甚至給圖片加占位符。
?Marker:也不錯,但整體信息保留度不如 Docling。
所以最后我們選了 Docling 作為主工具。
?? Docling 的問題:太慢了!
我們做了一個實驗,把年報里包含文字、表格、圖片的混合段落提取出來,放在不同頁數的 PDF 中,測試不同工具的處理速度。
結果如下:
?Docling:每頁大概 4 秒?Marker:每頁大概 8 秒?PyPDF2:飛快,但結構信息很少
如果你要處理幾十份報告(比如 50 份,每份 300 頁),那就意味著:
300頁×50份×4秒÷3600秒≈17小時
這還可以接受。但如果擴展到 S&P500 所有公司的 30 年年報 —— 就得處理上百萬頁。
靠單機做是不現實的,所以我們選擇了:
云服務 + 并行處理
我們用云服務搭了一個轉換服務,可以并行處理 PDF,提取結構化 Markdown,然后自動更新 GraphDB。
這個架構可以很好地擴展,未來接更多數據沒問題。
最終結論
工具 | 結構信息 | 表格提取 | 速度 |
PyPDF2 | 差 | 差 | 非常快 |
PyMuPDF4LLM | 中等 | 差 | 中等 |
Marker | 中等 | 中等 | 慢 |
Docling | 最佳 | 最佳 | 慢 |
所以,我們最后選擇:
?結構提取用 Docling?大規模處理時,用云服務并行跑?如果你對速度極度敏感,PyPDF2 還是最快的選擇
總結
PDF 轉 Markdown 的工具這些年進步巨大,但 表格提取仍然是個挑戰。
我們比較了四個開源工具,最后用 markdown 構建了圖譜,并在 GraphRAG 系統中實現了應用。
Docling 是效果最好的提取工具,但速度較慢 —— 所以我們搭了云服務來處理。
這就是我們在從 PDF 到智能圖譜路上的第一步!
本文轉載自???AI大模型觀察站???,作者:AI大模型觀察站
