在閱讀古籍時,我們常常會仰賴前人的權威注釋。但有時候,跨越時代的語境差異,反而會讓後代的大學者也產生「望文生義」的誤解。 最近在翻閱《資治通鑑》時,注意到一段關於南齊名臣王儉諡號之爭的有趣記載,而元初學者胡三省對其中「平頭憲」三個字的注釋,似乎大有可疑之處。 史料背景:一場「同音字」的政治角力 這段故事發生在南齊武帝永明七年(西元 489 年)。當時權傾一時的南昌文憲公王儉過世,朝廷要為他定諡號: 禮官欲依王導,諡儉爲文獻。晏啓上曰︰「導乃得此諡;但宋氏以來,不加異姓。」出,謂親人曰︰「『平頭憲』事已行矣。」〈平頭,謂王字也。諡,神至翻。〉——《資治通鑒/卷136》 簡單來說,禮官本來提議用極高規格的「文獻」作為王儉的諡號(仿效東晉名相王導)。但政敵王晏跳出來反對,認為王儉不配。最終,王晏成功狙擊,將王儉的諡號降級為同音的「文憲」。 王晏走出朝堂後,得意洋洋地對親信炫耀:「『平頭憲』事已行矣。」意思是這件事已經按照他的意思定案了。 權威的誤解:胡三省的「拆字猜謎」 這句話的精髓在於「平頭」二字。權威注釋家胡三省在這裡加了一條註解: 「平頭,謂王字也。」 胡三省的邏輯不難推測:他將這視為一種拆字謎。「王」字的第一筆是一橫,頂部平坦,所以「平頭」指的就是王儉的姓氏「王」。按照他的解釋,王晏的話就變成了:「『王』家的『憲』字諡號已經定案了。」 但這個解釋在語境上非常突兀。王晏與王儉的衝突核心在於「獻」與「憲」兩個字的替換,王晏向親信炫耀的是他在這場「文字遊戲」中的勝利,如果單純指稱「王家」,不僅毫無嘲諷的力道,也完全偏離了替換諡號的得意之情。 從「異體字」還原歷史現場 如果「平頭」不是指「王」字,那到底是指什麼?答案就藏在魏晉南北朝的「異體俗字」裡。 在當時,口語中為了區分讀音相同或相近的字,常常會用描述字形特徵的方式來表達。我們來對比一下這兩個字: 獻:左半邊是「鬳」,右半邊是「犬」,字形頂部參差不齊。 憲:正字上方是「宀」。但在六朝的書寫習慣中,「憲」字最上方的「點」經常被省略,寫成了「冖」(此異體寫法可見於教育部《異體字字典》字號 A01442)。 因為這個異體字的最上面是一條平滑的橫線,所以當時的人便俗稱這個字為「平頭憲」。 小結:被忽略的六朝語境 理解了這層字形上的差異,王晏那句「『平頭憲』事已行矣」的生動畫面就完全躍然紙上了。他不是在講什麼「王家的憲」,而是指...
PostgreSQL實在是包山包海,最近發現竟然有支援中文全文搜尋的套件PGroonga,以下簡單介紹一下。 開頭 PostgreSQL原生就有to_tsvector可以處理英文的全文搜尋,包含刪除停止詞、詞性還原等,做英文的全文搜尋很夠用了,但to_tsvector不支援中日韓等方塊字。 PGroonga支援中日韓及英文等全部語言,他是用Ngram的方式切詞,預設是切兩個字,例如「偉大的PostgreSQL」會切成: 偉大 大的 的P Po os st tg gr re eS SQ QL 並用這種方式建立索引,檢索效果不錯,10幾億字內容約1~2秒可以完成搜尋(部份視硬體設備而定),就是索引稍大,建立索引的時間約要10幾分鐘。 實做 PGroonga的使用方式,首先要先下載安裝PostgreSQL: https://www.postgresql.org/download/ 不一定要最新版,PGroonga從早期的12版到最新的17版都支援。 然後在github上找「awesome-postgres」 https://github.com/dhamaniasad/awesome-postgres 然後在「Extensions」項目中找「PGroonga」的連結並進入「install」。 PGroonga支援很多os,以windows來說,先按照安裝的PostgreSQL下載安裝檔,安裝檔是一個zip檔案,解壓縮後把檔案複製到PostgreSQL資料夾,並覆蓋舊檔便安裝成功了。 安裝完後要啟動pgAdmin,倒不一定要pgAdmin,反正就是進入可以輸入SQL語法的界面就是了。然後輸入 create extension pgroonga; 執行成功即啟動pgroonga了,接著是建立pgroonga的索引,例如 create index idx_欄位名稱 on news using pgroonga (欄位名稱); 建立索引的時間視資料量多寡而定,量多自然要等久一點。索引建立後便可搜尋,簡易的搜尋語法如下: select * from 資料表 where (建立pgroonga索引的欄位) &@~ '文字'; 可以查詢單一文字 select * from 資料表 where (建立pgroonga索引的欄位) &@| ARRAY[...