每张记谱单上都有那么几步是真的难认:笔没下去、读秒时写得潦草、两个字符连在了一起。真正值得问的不是「第一次能不能认对」,而是认不对的时候会怎么样。
这段时间我们做的正是这件事。改动分三类:把墨迹读得更仔细、抓住规则永远抓不到的那类错误、以及把剩下的疑点问得更好。这里没有任何一项会在你背后改动棋谱——那是有意保留的。
「错」不是一件事
在最终的 PGN 里长得一模一样的三种失败,其实要分开看:
- 墨迹认错。 笔画看到了,字符挑错了。
- 记法意外。 墨迹认对了,但写法不在标准代数记谱法的定义里,于是整步被当成无效丢掉。
- 合法的误读。 这一步读起来干净、走起来合法,但不是当时实际下的那一步。
三种要用三种办法。规则校验只解决了前两种,而且只解决了一部分。
有些字更容易混,有些不会
识别结果要和候选着法比对,而以前这个比对对所有字符一视同仁:1 认成 7,和 1 认成 9,代价完全一样——尽管前者是手写里极常见的混淆,后者几乎不发生。
现在这个比对是分级的。手写里真正容易混的成对字符——1/7、a/g、c/e、k/r、0/O——只计一小部分代价;没人会混的成对字符照旧计满。当两个候选着法和墨迹的距离本来相当时,那个「像是笔误」的会胜出。
有一种情况值得单独立规矩。吃子符号是棋手最常漏写的东西——赶时间时把 Bxf3 写成 Bf3——而旧的算分方式为这一次遗漏罚了两次:一次算少了个字符,一次算吃子标记对不上。一次遗漏罚两次,足以把真正的着法压到旁边一格的安静着法后面。现在漏写的 x、+、# 只计一小部分代价,因为它几乎不携带「到底是哪一步」的信息。
棋手真正会写的记法
标准代数记谱法是裁判手册里写的东西,不总是记谱单上真正出现的东西——尤其是在别处学棋的人,或者几十年前学棋的人。下面这些写法,现在会拿到局面上去解析,而不是直接判为无效:
| 写法 | 含义 |
|---|---|
Pe4、Pxd5、Pe8=Q |
兵前面加 P |
e2-e4、Ng1-f3、Bc1xf4、Ng1f3 |
长代数记法,有没有横线都行 |
BxN、NxBc4 |
写被吃的子,而不是写格子 |
cd、cxd、cd5、c:d |
线吃线 |
解析前会先剥掉回合数、ch、e.p. 和评注符号,以及大家用来表示「吃」的那好几种字符。如果剥完之后的读法只对应一步合法着法,它以高置信度进入候选池;如果对应好几步——比如两个马都能吃的时候写了 BxN——它以低置信度进入,因为这个读法本身没能定下是哪一步,剩下的交给整盘棋去判断。
合法,但没人会这么下
这是过去会漏网的那一类。识别错的着法,多半仍然是一步合法的着法。Nf3 认成 Nf5 可能走得通,规则挑不出毛病,PGN 导出得干干净净——而且是错的。
但线索是有的,只不过它来自棋本身,而不是规则:误读之后,子力往往开始以真实对局里不会有的方式运动。皇后停在一个兵能吃掉它的位置上,而那个兵不吃。车白挂三步,双方都视而不见。
现在 ScanChess 会在每一步的真实局面上做一次静态兑子评估,问一句:这一方是不是被白送了一个子甚至更多,而他没要?两道保险防止误报:
- 被将军的一方没有在选择。 必须应将时放着白子不吃,那是被迫,不是荒谬。
- 真正的弃子在被应对之后就不再「挂着」。 只有当这块子力整整一回合之后仍然可以拿——机会一直摆在那里,对手有时间去拿,却没拿——才会报出来。
同一处的连续荒谬会收敛到它开始的那一步,所以一个挂了六个半回合的车只产生一个标记,不是六个。两步都会被标:把子送过去的那一步,和从旁边走过去的那一步。两步都不会被改写。 你看到的是一个琥珀色标记和它的理由,怎么处理由你决定。
问得更好,而不是问得更多
复核环节过去是把可疑的着法作为开放式问题交回来:我们读成了这样,应该是什么?这种问法很容易得到一个既不是你写的、在当前局面也不合法的答案。
现在的问题是封闭的。在一个可疑的半回合上,ScanChess 取出当前局面全部的合法着法——通常三四十步——把每一步拿去和识别引擎给出的所有读法比对:最优读法和它的备选,各自按自己的置信度加权。得到的是一份既在此处合法、又贴近墨迹的着法短名单,问题于是变成了选择题。
有两条规则保证答案是可信的:不在名单上的答案会被丢弃,而不是被接受;如果被接受的这些选择合在一起会让整盘棋走不通,那么它们会被整体撤销,而不是留下一盘修了一半的棋。
双方都记了谱的时候
一盘正式棋里,有两个人写下了同一串着法。那是对同一盘棋的两次独立读取,而两者之间的分歧本身就是信息。
现在 ScanChess 可以合并两张记谱单。两条着法流是对齐的,不是硬拼在一起的,所以一方漏记一行只会让对齐往后错一格,而不会让之后每一步都变成冲突。两边一致的地方,置信度提高一半——两只手写下、两次读出的 Nf3,比一次要有力得多。两边不一致的地方,置信度下降,两种读法都作为候选留给复核环节,并记住各自来自哪张单子。
有意没有改的部分
自动纠错依然是关闭的。 扫出来什么就显示什么;棋走不下去的地方,标出断掉的那一步;有疑点的地方,标出来并说明理由。上面这些做的是让标记更聪明、让问题更短,没有任何一项会悄悄改你的棋谱——因为一份被默默「修好」的记谱单,比一份你知道要检查的记谱单更糟。
最好的输入依然是一张清晰的照片,我们的拍摄清单只要三十秒,胜过本文里的任何算法。但当墨迹真的两可时,扫描记谱单失败得更有用了:它会告诉你它怀疑哪一步、为什么怀疑,以及局面允许它是什么。

