從今天開始,我們正式進入 RAG 系統的 Indexing 階段,第一步:把散落各處、格式各異的原始資料,整理成乾淨、可用的文字內容。
| 格式 | 常見問題 |
|---|---|
| 排版複雜、表格容易解析錯亂、掃描檔需要 OCR | |
| HTML | 夾雜大量標籤、廣告、導覽列等雜訊 |
| Markdown | 相對乾淨,但仍需處理程式碼區塊、圖片連結等特殊語法 |
| Word/Docx | 格式標籤多,需要專用解析套件 |
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 常見的坑:多欄排版會導致文字順序錯亂、表格會被拆成散亂的文字片段。如果知識庫裡有大量表格資料,可以考慮用專門的表格解析工具(如 camelot、pdfplumber)另外處理。
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 相對單純,通常可以直接讀取純文字,但要注意是否要保留標題結構(後續 Chunking 時,標題資訊其實是很有價值的 Metadata)。
不論來源格式為何,清洗階段建議處理:
資料前處理是最不起眼、卻最花時間的一步,業界常說「Garbage in, garbage out」,這句話在 RAG 系統裡格外真實——如果 Indexing 階段就把資料處理得亂七八糟,後面再怎麼優化檢索演算法,效果都有限。明天我們要進入 Chunking 策略的比較,這是決定檢索品質的關鍵一步。