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 奠定了基礎。