给定一个字符串列表(特别是名称),是否有一种算法可以检测很容易被人类混淆的项目,例如。下面,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,它可以吸收人类从未想过的对。
简化问题的方法(我最初的想法):
使问题复杂化的方法(如果代码大小爆炸应该避免):
答案 0 :(得分:4)
您可以使用加权编辑距离,其中不同的编辑具有不同的成本。因此,将“O”改为“E”将具有低成本,但是将“C”改变为“L”将具有更高的成本。这种方法需要一个包含相应权重的所有编辑表。
这是拼写校正应用程序中使用的技术之一,您可能可以为此找到现有权重,或使用拼写校正训练数据集学习自己的权重。