寻求检测易被人类混淆的字符串集合的算法方案
检测姓名类字符串的人类易混淆配对算法需求
想问问有没有能检测姓名这类字符串里人类易混淆配对的算法?先看几个实际案例你就明白我要啥了:
1. Joe Average 2. Joe Beverage 3. Michael Andersen 4. Michael Anderson 5. Micheal Anderson 6. Steve Cook 7. Steve Look 8. Xena: Warrior Princess
在这个案例里:
- 3、4、5这三组极易被混淆
- 6、7次之
- 1、2几乎不会被混淆
- 8完全没有匹配的混淆项
如果做集合级检测难度太大,只做两两配对检测也完全可以接受。
必须考虑的人类识别特性
除了上面的例子,还要结合人类的视觉习惯来调整算法逻辑:
字符位置的影响
人类更容易注意到字符串/单词开头的字符差异,中间的差异反而不容易发现,比如:
1. Pink Floyd 2. Bink Floyd 3. Rolling Stones 4. Rolllng Stones
这里3和4的差异在单词中间,比1和2开头的差异难察觉得多。
字符串长度的影响
长字符串里的字符差异比短字符串更难被发现,比如:
1. Florence Griffith-Joyner 2. Florence Grifflth-Joyner 3. J. Lo 4. J. Law
1和2的差异藏在长串中间,远不如3和4的短串差异显眼。
另外还要结合人类阅读方式、眼球运动这类容易引发误识别的因素。
现有算法的问题
我试过Levenshtein编辑距离算法,但它经常会把人类绝对不会混淆的配对判定为相似,所以想找替代方案。
可采用的简化条件
为了降低复杂度,可以做这些假设:
- 使用等宽显示字体
- 仅做逐字符对比
- 字符集范围小,且大部分字符的差异都很明显
需规避的复杂情况
如果会导致代码量激增,就尽量避开这些场景:
- 超出逐字符对比的范围(比如比较小写
rn和小写m) - 处理完整Unicode字符集及其所有同形异义字符(homoglyphs)
内容的提问来源于stack exchange,提问作者forthrin
相关产品推荐
相关产品推荐

