如果四庫全書有搜尋引擎:古籍檢索的關鍵字技術與知識管理
目錄學:最早的「倒排索引」
《漢書·藝文志》是中國现存最早的系統性圖書目錄之一,它把當時的書分成六略三十八種,每種之下列出書名、篇卷、作者,偶爾加一句小注。到了《隋書·經籍志》,確立了經、史、子、集四部分類,這個框架一直沿用到《四庫全書總目》。
用現代術語說,四部分類就是一套「分類索引」:你先知道要找的東西大概屬於哪一類,再逐層縮小範圍。「經部」底下分易、書、詩、禮、春秋等,「史部」底下分正史、編年、紀事本末、別史、雜史等。這套層級結構的意義,在於把「全域搜索」轉化為「分區掃描」,大幅降低查找成本。
而《四庫全書總目提要》更接近今天的「摘要+標籤」。每一本書都有一段提要,說明作者生平、成書背景、內容大要、版本源流、歷代評價。如果你把每則提要視為一筆「文件記錄」,把其中的關鍵詞抽出來,那就是一份現成的元資料(metadata)庫。今天的圖書館自動化系統,做的事情其實和紀昀差不多,只是換成了資料庫欄位。
類書:古代的「關鍵字聚合頁」
如果說目錄解決「找書」,那麼類書解決「找資料」。類書是把群書中的材料按主題重新剪裁、分類編排的工具書,代表作品有《藝文類聚》《太平御覽》《永樂大典》《古今圖書集成》。
以《太平御覽》為例,全書一千卷,分五十五部、五千三百多個子目,每個子目底下羅列相關的經史原文、詩賦、典故。你想查「雨」,不必翻遍所有書,直接找到「天部·雨」,相關材料就集中在那裡。這不就是今天的「關鍵字聚合頁」嗎?輸入一個詞,系統把散落在各處的片段聚合成一個主題頁。
更有趣的是,類書的編纂者其實在做「人工分詞與主題標註」。他們得判斷某段文字該歸入哪個子目,這需要語義理解,也需要一致性控制,否則同一則材料會被重複收錄或漏收。這種工作量和今天訓練語言模型標註資料集,本質上是一回事,只是古人用毛筆,我們用標註平台。
韻書、檢字法與索引的誕生
真正接近「按字查詢」的工具,是韻書與字書。《切韻》《廣韻》《集韻》按韻部排列漢字,等於是用「讀音」當索引鍵;《說文解字》按部首排列,等於是用「字形」當索引鍵。到了明清,出現了更實用的檢字工具,例如《字彙》確立了214部首,成為後世字典的標準架構。
別小看部首檢字,它其實是一套「可預測的雜湊函數」:無論你認不認識這個字,只要數出部首筆畫,就能在固定位置附近找到它。這種「不依賴記憶、只依賴規則」的設計,正是檢索系統的核心精神。今天我們用注音、拼音、倉頡、筆畫輸入法,思路完全一脈相承。
所以,如果真的要給四庫全書裝搜尋引擎,古人其實已經替我們準備好了三套基礎設施:目錄(分類索引)、類書(主題聚合)、韻書字書(字詞索引)。缺的只是電子化與自動化。
三、假想架構:把四庫全書搬進搜尋引擎
現在進入腦洞的核心:假設我們真的把七億字的《四庫全書》丟進一台伺服器,要讓它像 Google 一樣好用,會遇到哪些技術關卡?答案可能比你想的更棘手,因為古籍的「語言特性」對現代搜尋技術極不友善。
分詞:從「之乎者也」到中文分詞難題
英文檢索相對簡單,因為單詞之間有空格。中文沒有空格,所以搜尋引擎第一步必須「分詞」,也就是判斷一句話該切成哪些詞。現代中文分詞已經有成熟方案,但碰到古籍,問題立刻放大。
第一,古文有大量單音節詞。現代漢語說「學習」,古文可能只說「學」;「知道」在古文裡可能是「知」或「識」。分詞器如果按現代語料訓練,很容易把古文切錯。
第二,古文有大量典故與縮寫。「尸位素餐」「期期艾艾」這類成語,拆開就失去意義;人名、地名、官職名又常與普通詞彙重疊,例如「司馬」是官職也是姓氏,「江東」是地名也可能是泛指。
第三,古文沒有標點。許多古籍原文是白文,後人加註加點,斷句不同,句意可能完全相反。搜尋引擎若不能正確斷句,索引就會錯位元,你搜「不亦說乎」可能只找到半句。
解決方案是什麼?可以借鏡現代搜尋引擎的「詞典+統計+規則」混合策略:建立古籍專用詞典(收錄人名、地名、官名、典故),用統計模型輔助未知詞識別,再用句法規則處理固定結構(如「……者,……也」)。更進一步,還可以做「字級索引」與「詞級索引」雙軌並行,讓使用者既能查精確詞組,也能查單字共現。
異體字、避諱與通假:古人的「錯字」怎麼救
如果分詞是第一道關卡,異體字就是第二道,而且更讓人頭痛。
古籍裡同一個字常有不同寫法:峰與峯、群與羣、裡與裏、跡與蹟。這些是異體字。還有一批是避諱造成的改字,例如避皇帝名諱,把「玄」寫成「元」、把「弘」缺筆;避家諱、避聖諱也常見。再加上通假字,例如「說」通「悅」、「知」通「智」,同一個概念可能對應好幾種字形。
對搜尋引擎來說,這意味著什麼?意味著你搜「高峯」,系統必須也回傳「高峰」;你搜「玄燁」,得考慮某些文獻寫成「元燁」。如果沒有做字形正規化,召回率會低得可憐。
技術上可以建立「異體字對照表」,把不同字形映射到同一個標準字形(類似 Unicode 的異體字認同)。避諱字則需要建立「諱字—本字」對照庫,並結合時代判斷,因為同一個字在不同朝代可能避不同的諱。通假字更難,因為它依賴語境,往往需要人工標註與辭書輔助。
這裡有個有趣的類比:現代搜尋引擎處理錯別字與同義詞,靠的是拼寫糾正與查詢擴展;古人處理異體字與通假,靠的是小學功夫與版本校勘。兩者其實在做同一件事,把「使用者說的話」對齊到「資料庫裡的寫法」。差別只在於,一個用演算法,一個用訓詁。
排序:誰該排在搜尋結果第一頁
假設分詞與字形問題都解決了,接下來是排序。你搜「江南 水利」,可能命中上千條結果,誰排第一?
現代搜尋引擎常考慮幾個因素:關鍵詞出現頻率、出現位置(標題比正文重要)、文件權威性、連結分析、使用者行為。搬到古籍上,可以類比為:詞頻(這個詞在這段文字裡出現幾次)、位置(是否在篇名、卷首、提要中)、權威性(是否出自正史、是否為名家著作)、引用關係(這段文字被後世引用多少次)。
更有意思的是「時效性」在古籍檢索裡該怎麼定義。現代搜尋偏愛新內容,但古籍檢索往往偏愛「版本較早」「校勘較精」的本子。也就是說,排序權重不是「越新越好」,而是「越可靠越好」。這就需要引入版本學的判斷,例如以宋元刻本為優、以殿本為參考、以校勘記修正錯訛。
如果真要做得講究,還可以設計「語境排序」:當使用者搜「江南水利」,系統優先回傳奏摺、地方志、河渠書這類「主題相符」的文獻,而不是恰好出現這兩個詞的詩詞。這就涉及主題模型與分類標籤的結合,等於是把四庫的分類體系數位化,變成排序訊號的一部分。
四、從檢索到知識管理:古籍的「知識圖譜」
檢索解決「找到」,知識管理解決「理解」。如果四庫全書有了搜尋引擎,下一步一定是把它變成知識圖譜:人物、地點、事件、官職、著作之間互相關聯,讓使用者能沿著關係網探索,而不是只拿到一堆孤立段落。
實體抽取:人物、地名、官職
知識圖譜的第一步是實體識別。古籍裡的人名極難辨認:有本名、字、號、諡號、別稱、官稱,例如蘇軾可以叫蘇子瞻、蘇東坡、蘇文忠、端明殿學士。同一個人,在不同文獻裡可能有五六種稱呼;而同一個稱呼,也可能指不同的人。
地名同樣麻煩。古地名常因朝代更迭而改變,同一個「江州」在不同時期指不同地方;還有「古稱」與「今名」並用,甚至同一個地方在兩份文獻裡寫法不同。官職名也有簡稱、別稱、合稱的問題。
要解決這些,需要建立權威檔(authority file),也就是「標準名稱—別名—關係」的對照資料庫。這正是現代圖書館在做的事,也是知識圖譜的基礎。有了權威檔,系統才能回答「蘇東坡寫過哪些水利相關文章」這種跨文獻、跨名稱的查詢。
引文網絡:誰引用過誰
古籍之間有大量引用、轉抄、註釋、駁斥的關係。如果能自動識別「某書引用了某書」「某段話出自某篇」,就能建立引文網絡,進一步計算文獻的影響力。
這件事在古代叫「輯佚」與「校勘」,今天叫「引用分析」。技術上可以用文本比對與序列比對,找出相似段落,再人工確認。一旦網絡建立起來,檢索體驗會完全不同:你查一句話,系統不只給你原文,還告訴你「這句話被哪十本書引用過、哪個版本的文字有異文、後世註家怎麼解釋」。
這就是從「關鍵字檢索」升級到「知識導航」。使用者不再只是輸入關鍵字、拿回列表,而是沿著節點與邊走,像在圖書館裡有人替你拉出一整條線索。
版本比對與「差異檢視」
古籍還有一個現代文件少見的問題:版本差異。同一本書,宋刻本、明抄本、清殿本可能字句不同。搜尋引擎如果只索引一個版本,使用者可能查不到另一個版本裡的關鍵字。
理想的做法是「多版本平行索引」,並提供類似程式碼 diff 的「差異檢視」功能:選兩個版本,系統標出增刪改易之處。這對研究者極有價值,也讓檢索從「找字」變成「找異文」。
講到這裡可以發現,古籍搜尋引擎真正困難的地方,不在於資料量,而在於「語言的歷史層次」。同一個字、同一個人、同一本書,都帶著時間的褶皺。技術要做的,是把這些褶皺攤平,讓使用者能平滑地查詢。
五、搜尋引擎的另一面:權力、偏誤與「被消失」的書
談到這裡,必須踩一下煞車。搜尋引擎從來不只是中性工具,它決定什麼被看見、什麼被排在後面、什麼根本不存在於索引裡。《四庫全書》本身就是最好的例子。
乾隆編書的同時,也在「刪書」。凡被判定為違礙的著作,或全毀、或抽毀、或刪改。也就是說,我們今天看到的四庫,是一個經過政治篩選的知識庫。如果這套書真的接上搜尋引擎,那麼搜尋結果的「召回率」從一開始就被歷史決定了:有些書不是找不到,而是從來沒被收進去。
這提醒我們,任何知識管理系統都包含三個層次的偏誤:收錄偏誤(哪些資料進了庫)、標註偏誤(分類與關鍵詞怎麼給)、排序偏誤(什麼被優先展示)。古人的四部分類有其價值預設,經部居首、子部雜家次之;今天的演算法也有其價值預設,只是包裝成數學公式。
所以,如果我們真的替古籍建搜尋引擎,除了技術問題,還得有「透明度」設計:標明資料來源、標明收錄範圍、標明刪改痕跡、提供異本與輯佚資料。讓使用者知道「你看到的結果,是從什麼樣的資料集裡長出來的」。這不是技術潔癖,而是知識倫理。
六、結語:檢索的本質,是學會怎麼提問
回到最初那個翰林院編修的場景。他真正需要的,其實不只是一台更快的機器,而是一套更好的提問方式:我要找的是哪一類文獻?關鍵人物是誰?大概在哪個年代?可能用什麼詞?這些問題,目錄學在回答,類書在回答,現代的搜尋引擎也在回答。
如果四庫全書有搜尋引擎,它大概會長這樣:一個支援異體字與通假的查詢框、一套結合分類與詞頻的排序邏輯、一個能沿著人物與引文關係導航的知識圖譜,再加上一份誠實的「資料來源與刪改說明」。它不會讓古人變得更聰明,但會讓「找到那句話」從三個月縮短到三秒。
而對今天的我們來說,這個腦洞的價值在於反向照亮現在:我們每天在搜尋框裡敲下的關鍵字,背後站著兩千年的目錄學、類書傳統與檢字智慧。技術換了介面,問題沒變——知識越多,越需要秩序;資料越大,越需要好的索引;而檢索的最高境界,從來不是「找到最多」,而是「找到最對」。
下次你在搜尋框裡輸入關鍵字、零點三秒看到結果時,不妨想一想:這零點三秒裡,其實藏著紀昀的分類、劉向的目錄、《太平御覽》的主題聚合,以及無數抄書人一筆一畫留下的秩序感。古人沒有搜尋引擎,但他們早就開始練習,如何讓知識被找到。
💬 想說點什麼?
歡迎到留言板分享你的想法、心得或疑問。
💬 前往留言板 →