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