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

时间:2018-05-10 11:11:01

标签: algorithm text

给定一个字符串列表(特别是名称),是否有一种算法可以检测很容易被人类混淆的项目,例如。下面,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集及其所有homoglyphs

1 个答案:

答案 0 :(得分:4)

您可以使用加权编辑距离,其中不同的编辑具有不同的成本。因此,将“O”改为“E”将具有低成本,但是将“C”改变为“L”将具有更高的成本。这种方法需要一个包含相应权重的所有编辑表。

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