從《康熙字典》到演算法:Quizzman Fanqie Engine Parser 的建構之路

Series 2 · 第 4 篇 — 康熙 Parser。上一篇:王力與 Quizzman Fanqie Engine 的理念:重建音系,而非照搬俗讀

從《康熙字典》到演算法:Quizzman Fanqie Engine Parser 的建構之路

在 Quizzman Fanqie Engine 能夠根據反切推導漢越音之前,首先必須解決一個更困難的問題:如何讓電腦理解《康熙字典》中清代學者的音註方式? 與現代結構化資料不同,《康熙字典》的字頭混合了反切、注音、多部韻書引用、音韻標記,以及大量以文言文記錄的特殊說明。因此,Parser 的建立並不是單純撰寫程式,而是從研究數萬條字頭開始,找出古人共同遵循的編纂規則。

第一個問題:《康熙字典》不是資料庫

許多人認為,《康熙字典》只是一本龐大的資料庫。

事實恰恰相反。

《康熙字典》是一部十八世紀依照學術傳統編纂而成的辭書。

一個字頭可能同時包含:

  • 字義解釋
  • 異體字
  • 註解
  • 多部韻書來源
  • 多組反切
  • 多種讀音
  • 編者評語

它沒有 XML,也沒有 JSON 這樣固定的資料格式。

電腦無法直接理解。

若要建立音韻引擎,第一步就是將這些文獻內容轉換成結構化資料。


第一步:分析整部《康熙字典》的 Pattern

Quizzman 並沒有一開始就撰寫 Parser。

相反地,團隊先花了大量時間研究《康熙字典》的編排方式。

目標不是逐字閱讀,而是回答一個問題:

《康熙字典》的編者通常使用哪些格式記錄語音資訊?

經過大量統計後,可以發現大多數音讀資料都圍繞幾部重要韻書:

  • 《廣韻》
  • 《集韻》
  • 《唐韻》
  • 《韻會》
  • 《正韻》

其中,《廣韻》與《集韻》的出現頻率最高,也是 Fanqie Engine 最重要的資料來源。

因此,Parser 可以判斷哪些內容應優先分析,哪些只是補充說明。


並不是所有反切都長得一樣

確定資料來源之後,更困難的問題才真正開始。

《康熙字典》的反切並非只有一種形式。

最基本的是:

AB切

這也是最典型的反切格式。

Parser 只需拆分:

  • 上字
  • 下字

然而,實際上還存在許多變體,例如:

AB切某聲
AB切又音
AB切音某
AB切讀若……
AB切叶某韻
又作……
又與某同
俗作……

每一種格式都代表不同的學術意義。

如果 Parser 把它們全部當成標準反切,後續推導將立即出錯。


最困難的是辨識 Override

《康熙字典》中最難處理的 Pattern 之一,就是:

AB切某聲

乍看之下,很多人會認為:

AB切

後面只是附加一句說明。

事實並非如此。

很多情況下,

某聲

並不是註解。

它會覆蓋(Override)反切原本的聲調資訊。

這一點極其重要。

如果 Parser 只解析:

AB切

Engine 就會依照下字的聲調推導。

但《康熙字典》的真正意思卻是:

聲母與韻母依照反切取得,聲調則改用某聲。

這是 Parser 建構過程中最難發現的重要規則之一。


「好」字就是典型例子

曾讓 Parser 多次重新設計的代表案例,就是:

如果只分析反切,

Engine 可以得到一份 Middle Chinese 音系資料。

但《康熙字典》同時還附有聲調說明。

因此 Parser 必須理解:

  • 反切仍然有效
  • 聲調不再完全由反切決定
  • 「某聲」屬於聲調覆蓋(Tone Override)

若無法辨識這種 Pattern,後續整個 Middle Chinese Reconstruction 都會產生錯誤。

因此,Quizzman 並不把 Parser 視為字串切割工具,而是專門分析音韻文獻的 Grammar Parser


「讀若」不是反切

另一類必須獨立處理的 Pattern 是:

讀若……

這並不是反切。

它只是表示:

讀音接近某字。

因此:

  • 它只是參考性的語音提示
  • 不足以建立標準 Middle Chinese Profile
  • 不應與《廣韻》反切一起進入 Fanqie Pipeline

Parser 必須辨識:

這是 Phonetic Hint,而不是 Fanqie Record。


「叶韻」並非標準發音

另一個容易混淆的例子是:

叶某韻

或:

協韻

它們主要出現在詩歌中。

目的只有一個:

為了押韻而調整讀法。

這並不代表該字的標準音。

若 Parser 將它當成正式讀音,Engine 就會引入大量錯誤例外。

因此,Quizzman 將:

Rhyme Note

與:

Phonological Evidence

完全分離處理。


Parser 不只是讀取,更要分類

完成大量 Pattern 研究之後,

Quizzman 的 Parser 已經不再只是:

Regex
    ↓
Fanqie

而是先替每一段註解分類。

例如:

| Pattern | 分類 | |---------|------| | AB切 | 標準 Fanqie | | AB切某聲 | Fanqie + Tone Override | | 讀若 | Phonetic Hint | | 叶韻 | Rhyme Annotation | | 又音 | Alternate Reading | | 俗音 | Colloquial Reading | | 古音 | Historical Reading |

只有完成分類後,

Engine 才知道後續應採用哪一套處理流程。


Parser 決定整個 Engine 的品質

很多人認為,

Fanqie Engine 最困難的是漢越音推導。

其實,只說對了一半。

如果 Parser 一開始分類錯誤,

那麼:

  • Middle Chinese Reconstruction 會錯
  • Projection 會錯
  • Tone Resolver 會錯
  • Candidate Ranking 也會錯

換句話說,

整個 Engine 的所有演算法,都建立在 Parser 的正確性之上。

因此,Quizzman 在撰寫任何程式之前,投入大量時間研究《康熙字典》的學術結構。

對 Quizzman 而言,《康熙字典》並不是一本等待「閱讀」的古籍,而是一套需要模型化(Modeling)的編輯規範。

正是透過大量 Pattern 分析、反切分類,以及對 AB切某聲讀若叶韻 等特殊格式的辨識,才為後來整個 Quizzman Fanqie Engine 奠定了基礎。