什么是中国最难的字谜?
本人在中文信息处理领域从业十多年,平时非常关注汉字、汉语和汉字学相关的话题。最近看到知乎上很多人都在讨论“最难的汉字”,所以特意写了这个答案。 这个话题之所以难回答是因为“难”其实是个相对的概念——对于没有学过汉字的人,所有汉字都是难的;但是对于我们这些学习过汉字的人来说,很多字其实已经习惯了,并不觉得难了。所以这个问题其实是在问“对所学汉字不多的人来讲,什么字是最难的”。 我本科是学计算机的,研究生是学文字学的(汉语言文字学),所以对这两个问题都还有点感触。 从计算机角度讲,文字是一种字符串,我们要解决的就是如何高效地检索这种字符串。那么,对于一个给定长度的字符串a,怎么判断它是不是一个字呢? 显然,如果这个两个字符串长度相同且只包含同样的字符,那么我们很容易判断它们是同一个字。比如“大”和“天”——只要长度一样且只有上面的那一点区别,那就说明它们都是“大”字。 但是,如果我们遇到两个字符串a和b,a比b多几个字符,或者a和b只包含不同的字符,这个时候我们就很难判断哪个是字了。因为根据字典序(字母顺序),前者优先于后者。所以我们只能不断地尝试将短的排到长的后面去,看能否排成一样的序列。如果可以,那就说明它们是相同的字;如果不能,则不是。这就是我们一般用来说明“难字”的例子——“高”和“上”。
我举这个例子并不是为了说明“高”和“上”有多困难,而是为了说明当我们不知道一个字的多少的情况下,我们是无法判断两个是否相似的。这也是大多数语言中多数的字符串比较算法中需要避免的情况——两个字符串可能很难直接通过比较得到结果,我们需要把其中一个转化为另一个能容易比较的形式。 在计算机里,最常用的转化方法是“编码”。比如这里我用编码工具把“高”转换为“GAO”,而“上”转换为“SHANG”。这样我们就可以很方便地把两个字符串转换成整数向量,然后做字典序比较了。
回到问题,对于一个所学过汉字不多的人来说,他们遇到的第一个难关就是字形的记忆——很多字看起来都很像,但是又有细微的区别,这些微小的区别能不能形成固定的编码?能不能形成有效的计算机识别?这是很大的一个问题。即使是一个简单的问题,如上面提到的“高”与“上”,不同的人也会有不同的做法。比如有的人会把“高”拆解为“高”,从而把“Giao”作为编码;而更多的人会拆解为“高”“上”——“GaoSang”。这两种做法虽然都能把“高”与“上”联系起来,但是前者会将“高”与“上”放在更远处,需要更多的计算步骤才能找到。这对于记忆力是一个巨大的考验,而对于计算机算法而言,也需要考虑这类特殊情况下做出的选择。