文件理解流程:OCR、版面解析與模型各自負責什麼
把整份 PDF 丟給視覺模型不是最好的做法。分工的流程更準也更便宜。
文件理解的常見誤區是「有視覺模型就不需要 OCR 了」。實際上分工流程在準確率與成本上通常都更好。
四階段流程
- 判斷文件型別:原生 PDF 直接抽文字,掃描件才走 OCR。
- 版面解析:辨識標題、段落、表格、圖片的區塊與閱讀順序。
- 分區處理:文字區塊走 OCR 或直接抽取;表格用表格專用模型;圖表交給視覺模型描述。
- 重組:依閱讀順序合併成結構化文件(Markdown 或 JSON)。
原生 PDF 不要 OCR
import fitz # PyMuPDF
doc = fitz.open(path)
page = doc[0]
text = page.get_text('text')
if len(text.strip()) > 50:
use_native_text() # 有內嵌文字層,直接用,準確率 100%
else:
use_ocr() # 掃描件這個判斷能省下大量成本與錯誤。原生 PDF 的文字層是精確的,任何 OCR 都只會讓它變差。
閱讀順序是最常見的錯誤來源
雙欄排版的文件,若沒有正確的版面解析,抽出來的文字會左右兩欄交錯,語意完全錯亂。這種錯誤在下游很難察覺,因為文字看起來都是合法的。
表格單獨處理
表格轉純文字幾乎不可讀。建議轉成 Markdown 表格保留結構,或直接展開成敘述句。若要進 RAG,敘述句的檢索效果通常更好。
每一階段都要保留頁碼與座標。使用者問「這個數字出自哪裡」時,你要能指回原始文件的位置。