為什麼 Quizzman Fanqie Engine 不會 Hardcode 五萬多個漢字?

Series 2 · 第 5 篇——為什麼不 Hardcode 五萬個漢字 上一篇:從《康熙字典》到 Parser:Quizzman Fanqie Engine 的建構歷程

為什麼 Quizzman Fanqie Engine 不會 Hardcode 五萬多個漢字?

許多程式設計師在了解 Quizzman Fanqie Engine 時,都會提出一個問題:「為什麼不直接把所有漢字的讀音都存起來?」 以今天的儲存容量而言,建立一個包含數萬個漢字及其漢越音的資料庫並不困難。然而,Quizzman Fanqie Engine 選擇了一條更困難的道路:建立數百條音韻規則,讓電腦自行推導,而不是單純記憶。這不只是技術上的選擇,更代表了整個專案的設計理念。

兩種完全不同的設計方式

如果目標只是輸出漢越音,

大致有兩種方法。

第一種:Dictionary Engine

Database

quốc

每一個漢字,

都預先存好讀音。

例如:

| 漢字 | 漢越音 | |------|---------| | 國 | quốc | | 學 | học | | 德 | đức | | 明 | minh |

使用者輸入一個字,

系統直接查詢資料庫即可。

目前大多數漢越音工具,

都是採用這種方式。


第二種:Rule Engine

Quizzman Fanqie Engine

採取的是完全不同的方法。

反切

Middle Chinese

音韻規則

漢越音

在這個架構中,

Engine 並不是去記住每一個字。

它真正試圖理解的是:

為什麼這個字會讀成這樣?

這正是兩者最大的差異。


儲存五萬個漢字,其實一點也不難

今天,

一份包含:

  • 五萬個漢字;
  • 漢越音;
  • Pinyin;
  • Unicode;

的資料表,

甚至只需要幾 MB。

即使是手機,

也能輕鬆儲存數百萬筆資料。

因此,

Quizzman 不採用 Hardcode,

並不是因為硬體限制。

真正原因,

在於問題本身的本質。


資料無法解釋規律

假設資料庫中記錄:

| 漢字 | 讀音 | |------|------| | 國 | quốc | | 域 | vực | | 或 | hoặc | | 惑 | hoặc |

使用者知道:

quốc

但不知道:

  • 為什麼是「quốc」?
  • 為什麼保留 -c 韻尾?
  • 為什麼是入聲?
  • 為什麼聲母會變成 qu-

資料庫只能保存結果。

卻無法保存:

結果形成的原因。


一條規則,可以取代數千筆資料

這正是 Rule Engine 最大的優勢。

例如,

與其儲存:

cốc

quốc

mộc

lục

Engine 只需要知道:

通攝

+

入聲

-c

一條規則,

便能適用於數千個漢字。

這就是 Rule Engine 的力量。


規則具有泛化能力

假設出現一個極為罕見的漢字。

字典沒有。

資料庫也沒有。

Dictionary Engine

只能回答:

查無資料。

Quizzman Fanqie Engine

仍然可以:

  • 分析反切;
  • 重建 Middle Chinese;
  • 套用音韻規則;
  • 推導出預測的漢越音。

這正是單純資料查詢做不到的事情。


規則可以發現資料錯誤

Rule Engine 還有另一個重要優點。

假設資料寫成:

某字

陽平

但整個 Middle Chinese Profile 都顯示:

清聲母

+

去聲

陰去(Sắc)

Engine 便能判斷:

可能存在:

  • 資料錯誤;
  • 輸入失誤;
  • 或是一個值得進一步研究的歷史例外。

如果只是資料庫,

系統根本無法發現這些問題。


規則比資料更容易維護

假設後來發現了一條新的音韻規律。

如果採用資料庫,

可能需要修改:

一千兩百個漢字。

如果採用 Rule Engine,

只需要修改:

一條 Rule。

所有受影響的漢字,

都會自動更新。

當 Engine 規模越來越大,

這項優勢就越明顯。


那為什麼還需要字典?

既然規則如此強大,

是不是完全不需要字典?

答案是:

不是。

歷史語言永遠存在:

  • 例外;
  • 多音字;
  • 不同層次的漢越音;
  • 文讀;
  • 白讀;
  • 地方變體。

任何規則系統,

都不可能百分之百描述所有現象。

因此,

Quizzman Fanqie Engine

始終維持兩個獨立層次:

Rule Engine

Pure Projection

以及:

Dictionary

Lexical Validation

兩者互相補充,

缺一不可。


Pure Projection 並不追求百分之百一致

這也是 Quizzman 最重要的理念之一。

Quizzman 不會為了讓所有結果都與字典一致,

而不斷修改音韻規則。

如果這麼做,

Engine 最終只會累積越來越多特殊例外。

最後,

它就會退化成另一個大型資料庫。

因此,

Pure Projection 只回答一個問題:

如果完全依照歷史音韻規則推導,結果應該是什麼?

之後,

Lexical Normalization

才負責回答:

今天漢越語實際採用哪一種讀法?

這種分層設計,

使音韻規則始終保持一致性。


從「記憶」走向「推理」

兩種方法可以簡單比較:

Dictionary Engine

五萬個漢字

五萬筆讀音

每個結果,

都是獨立資料。


Rule Engine

數百條規則

數萬個漢字

漢字並不是逐一儲存。

而是由同一套音韻規則推導而來。

這也是歷史音韻學的研究方式,

同時也是 Quizzman Fanqie Engine 的核心架構。


更困難,但更有價值

建立一個 Dictionary Engine,

其實容易得多。

只需要:

  • 收集資料;
  • 標準化;
  • 建立 API。

而建立 Rule Engine,

則需要:

  • 音韻學研究;
  • 反切分析;
  • 規則模型化;
  • 大量測試;
  • 例外處理;
  • Regression Test。

工作量遠遠更大。

但換來的是:

Engine 能夠:

  • 解釋;
  • 推理;
  • 驗證;
  • 擴充;
  • 發現資料未曾記錄的新案例。

Quizzman Fanqie Engine 的核心理念

Quizzman Fanqie Engine

並不是為了記住五萬多個漢字的讀音而建立。

它真正要理解的是:

為什麼這些讀音會形成。

當一條音韻規則成功模型化之後,

它便不再只服務於單一漢字,

而可以同時適用於數百、數千,

甚至更多具有相同音韻特徵的漢字。

這也是 Quizzman 選擇更困難道路的原因:

與其建立龐大的資料庫,

不如建立一套能夠推理、解釋與持續擴充的 Historical Phonology Rule Engine

對 Quizzman 而言,

資料固然重要,

真正的基礎始終是規則。