找到人类容易混淆的字符串集



给定一个字符串列表(特别是名称(,是否有一种算法可以检测容易被人类混淆的项目,例如。 下面,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"的成本会更高。此方法需要一个包含具有相应权重的所有编辑内容的表。

这是拼写更正应用程序中使用的技术之一,您可以为此找到现有的权重,或者使用拼写更正训练数据集学习自己的权重。

最新更新