给定一个字符串列表(特别是名称(,是否有一种算法可以检测容易被人类混淆的项目,例如。 下面,3、4 和 5 最有可能混淆,6 和 7 不太容易混淆,1 和 2 不太可能,8 不相等。如果很难找到集合,可以接受成对。
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
更复杂的是,必须考虑字符位置,因为人类更容易发现单词/字符串开头的字符差异,而不是中间的字符差异,例如。
1. Pink Floyd
2. Bink Floyd
3. Rolling Stones
4. Rolllng Stones
此外,在长字符串中发现字符差异比在短字符串中更难:
1. Florence Griffith-Joyner
2. Florence Grifflth-Joyner
3. J. Lo
4. J. Law
也许还有其他方面必须考虑,基于人类如何阅读,眼睛如何移动等以及其他可能导致错误识别的事情。
我知道的唯一相关算法是Levenshtein,它可以吸收人类永远不会吸收的配对。
简化问题的方法(我最初想到的(:
- 假定显示字体宽度固定
- 将单个字符与单个字符进行比较
- 假设一个小字符集包含大部分不同的字符
使问题复杂化的方法(如果代码大小爆炸,应避免(:
- 超越单个字符比较,例如,将小 RN 与小 M 进行比较
- 考虑整个 Unicode 集及其所有同形文字
您可以使用加权编辑距离,其中不同的编辑具有不同的成本。因此,将"O"更改为"E"的成本较低,但将"C"更改为"L"的成本会更高。此方法需要一个包含具有相应权重的所有编辑内容的表。
这是拼写更正应用程序中使用的技术之一,您可以为此找到现有的权重,或者使用拼写更正训练数据集学习自己的权重。