RAG 資料前處理實戰:PDF、表格、掃描檔清理的完整流程與 checklist
RAG 答非所問,十之七八不是模型的錯,是餵進去的資料在轉換時就壞了。PDF 版面被拆散、合併儲存格丟失欄位對應、掃描檔 OCR 把公差認錯——這三種髒資料,是企業導入 RAG 最常靜默翻車的地方。這篇拆解一套可複用的前處理管線,附上線前清理 checklist。
الكاتب
Tenten AI 研究團隊
AI 基礎設施
تاريخ النشر
30 ديسمبر 2025
مدة القراءة
7 分鐘

上週一個製造業客戶把他們的知識庫丟給我們,說「RAG 我們自己接好了,但答案常常亂講,你們幫忙看看」。我們抽了三十題實測,錯的十九題裡,有十六題的根因不在模型,也不在檢索演算法。是資料。切進去的那段文字,本身就是壞的——一張被 PDF 拆成上下兩半的規格表、一段 OCR 把「0.05mm」認成「0.O5rnrn」的公差說明、一份三層合併儲存格的價目表被壓成一條沒有欄位對應的亂碼。
模型只是忠實地把爛材料唸出來而已。
RAG 資料前處理,到底在處理什麼
RAG 資料前處理,指的是在文件進入切塊(chunking)與向量化之前,把原始檔案還原成「語義完整、結構正確、可被檢索單元獨立理解」的乾淨文字的一整套工程流程。它處理的不是內容對不對,而是內容有沒有在轉換過程中被破壞。這一層做壞了,後面調再多 embedding 模型、加再多 rerank 都是補破網。
企業卡關的髒資料,九成集中在三種:版面複雜的 PDF、合併儲存格的表格、掃描檔 OCR。以下逐一拆。
PDF:先分辨「數位版」還是「掃描版」
第一件事永遠是判型。用 pdfplumber 或 PyMuPDF 抽一頁文字,抽得出來就是數位版(text-based),抽出來是空的就是掃描版(image-based),得走 OCR。這兩條路的處理完全不同,混在一起做是最常見的第一個雷。
數位版 PDF 的真正難點是版面順序。雙欄排版、頁首頁尾、側邊註解,直接用 extract_text() 抽出來的閱讀順序常常是錯的——左欄第一行接右欄第一行,語義整個斷裂。我們的做法是用版面分析(layout detection)先切出文字區塊,依座標重排閱讀動線,再把頁首、頁尾、頁碼、浮水印這些重複雜訊用規則過濾掉。表格區域要獨立標記出來,不能當一般段落抽,否則數字會黏成一團。
表格:合併儲存格是語義殺手
表格是 RAG 最容易靜默出錯的地方,因為它抽得出東西,只是抽錯了。最毒的是合併儲存格。人眼看是「華東區 / 一級城市 / 單價 120」,抽成純文字後變成「華東區 空 空 一級城市 120」,下游完全不知道 120 屬於誰。
處理原則有三個。第一,合併儲存格要做向前填充(forward fill),把被合併掉的值補回每一格,還原成規整的二維表。第二,不要把表格轉成失去結構的純文字,轉成 Markdown 表格或帶欄位名的鍵值對,讓每一列自己就能講清楚「這是什麼」。第三,大表要連表頭一起切塊——一張兩百列的表切成十塊,每一塊都得帶上欄位標題,否則第七塊的數字沒有任何欄位脈絡,檢索到了也是廢的。
掃描檔 OCR:垃圾進,垃圾出
掃描檔是三者裡最花力氣的。OCR 出來的文字必然有錯,關鍵是控制錯誤率而不是幻想零錯誤。前置的影像處理往往比換更貴的 OCR 引擎更有效:去歪斜(deskew)、二值化、去雜點、提高解析度到 300 DPI 以上,這幾步能把辨識率拉高一大截。中文文件務必指定正確語言包,繁中、簡中、日文混排要分別設定,不然「繁體 + 英數」的公差、料號會錯得很難看。
OCR 之後一定要有一層信心分數過濾與後處理:低於閾值的字段標記出來人工複查,用領域字典(料號格式、單位、專有名詞)做規則校正。這一步不能省。我們踩過的雷是——某醫療客戶的掃描病歷,OCR 把劑量單位「mg」認成「mq」,模型照樣自信地回答,沒有任何人發現,直到上線抽查才抓到。
三種髒資料的處理對照
| 資料型態 | 核心風險 | 主要工具 | 關鍵處理動作 | 驗收指標 |
|---|---|---|---|---|
| 數位版 PDF | 閱讀順序錯亂、雜訊混入 | pdfplumber、PyMuPDF、版面分析 | 區塊重排、去頁首頁尾、表格獨立標記 | 抽出文字與原文順序一致 |
| 複雜表格 | 合併儲存格丟失對應 | 表格解析、pandas | 向前填充、轉 Markdown/鍵值對、表頭隨切塊 | 每列可獨立理解欄位 |
| 掃描檔 OCR | 字元辨識錯誤靜默傳播 | 影像預處理、OCR 引擎、字典校正 | 去歪斜二值化、語言包指定、信心分數過濾 | 抽樣字元錯誤率低於閾值 |
一套可複用的前處理管線
把上面串起來,就是一條標準流水線,每個新文件都走同一條:
- 判型:數位版走文字抽取,掃描版走 OCR,分流不混做。
- 抽取:數位版做版面重排,掃描版做影像預處理後辨識。
- 表格分離:表格區域獨立處理,合併儲存格填充、轉結構化格式。
- 清洗:去除頁首頁尾、多餘空白、亂碼、控制字元;統一單位與全半形。
- 品質閘門:OCR 信心分數、表格欄位完整性、空塊比例,任一不過就退回人工。
- 結構化切塊:依語義邊界切,表格帶表頭,長段落保留標題階層。
上線前的清理 checklist
- 每種文件格式都抽樣人工比對過原文,順序與數字無誤。
- 掃描檔 OCR 錯誤率量測過,低信心字段有標記與複查機制。
- 所有表格的合併儲存格已還原,切塊後每列仍帶欄位脈絡。
- 頁首、頁尾、頁碼、浮水印等重複雜訊已過濾。
- 單位、料號、專有名詞經領域字典校正,全半形統一。
- 有一組固定的回歸測試題,每次更新資料都重跑,防止靜默劣化。
這份 checklist 我們每個 RAG 案子都在用,而且刻意放在「模型還沒選」之前。因為在現場踩久了會發現一件事:大多數 RAG 專案不是輸在模型,是輸在沒人願意花兩週把髒資料弄乾淨。這活不性感,Demo 上也看不出來,但它決定了系統上線後有沒有人敢用。我們接手救火的案子,超過一半的修復工作,最後都落在這一層。

تدفقات عمل الذكاء الاصطناعي،
مدمجة في عملياتك
نندمج داخل فريقك عبر FDE وFDM لبناء وكلاء وتدفقات عمل الذكاء الاصطناعي التي يعتمد عليها فريقك يوميًا — جاهزة خلال أسابيع، لا أرباع سنة.