iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0
AI Engineering

從零打造 RAG 系統:檢索、生成與落地全紀錄系列 第 5

[Day 05] 資料蒐集與清洗:處理非結構化文件(PDF/HTML/Markdown)

  • 分享至 

  • xImage
  •  

前言

從今天開始,我們正式進入 RAG 系統的 Indexing 階段,第一步:把散落各處、格式各異的原始資料,整理成乾淨、可用的文字內容。

常見文件格式與挑戰

格式 常見問題
PDF 排版複雜、表格容易解析錯亂、掃描檔需要 OCR
HTML 夾雜大量標籤、廣告、導覽列等雜訊
Markdown 相對乾淨,但仍需處理程式碼區塊、圖片連結等特殊語法
Word/Docx 格式標籤多,需要專用解析套件

實作:解析不同格式的文件

PDF 解析

from pypdf import PdfReader

def load_pdf(path):
    reader = PdfReader(path)
    text = ""
    for page in reader.pages:
        text += page.extract_text() + "\n"
    return text

PDF 常見的坑:多欄排版會導致文字順序錯亂、表格會被拆成散亂的文字片段。如果知識庫裡有大量表格資料,可以考慮用專門的表格解析工具(如 camelotpdfplumber)另外處理。

HTML 解析

from bs4 import BeautifulSoup

def load_html(html_content):
    soup = BeautifulSoup(html_content, "html.parser")
    # 移除不需要的標籤
    for tag in soup(["script", "style", "nav", "footer"]):
        tag.decompose()
    return soup.get_text(separator="\n", strip=True)

Markdown 解析

Markdown 相對單純,通常可以直接讀取純文字,但要注意是否要保留標題結構(後續 Chunking 時,標題資訊其實是很有價值的 Metadata)。

清洗的通用原則

不論來源格式為何,清洗階段建議處理:

  1. 移除雜訊:多餘空白、重複的頁首頁尾、廣告文字
  2. 統一編碼:確保所有文字都是 UTF-8,避免亂碼
  3. 保留結構資訊:標題層級、段落分隔,這些之後在 Chunking 與 Metadata 設計時會用到
  4. 記錄來源資訊:每份文件的原始檔名、URL、更新日期,作為之後的 Metadata

小結

資料前處理是最不起眼、卻最花時間的一步,業界常說「Garbage in, garbage out」,這句話在 RAG 系統裡格外真實——如果 Indexing 階段就把資料處理得亂七八糟,後面再怎麼優化檢索演算法,效果都有限。明天我們要進入 Chunking 策略的比較,這是決定檢索品質的關鍵一步。


上一篇
[Day 04] 專案規劃:這次要解決什麼問題?資料從哪來?
下一篇
[Day 06] Chunking 策略比較:固定長度 vs 語意切分 vs 遞迴切分
系列文
從零打造 RAG 系統:檢索、生成與落地全紀錄9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言