从《康熙字典》到演算法: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 奠定了基础。