在我的应用程序中,我有一个功能,用户可以连接到不同的社交网络以获取朋友列表。例如,您可以从linkedIn 和Facebook 获得您的朋友。
我想展示一个朋友列表,它是将来自不同社交网络的各种列表组合在一起的结果。问题是如何确定不同列表中的名字是否可能是同一个人?例如,Facebook 可能会说“Jim Smith”,Linked In 可能会说“Jim Smith, Phd”,我希望我的应用检测到他们是同一个人。
我已经查看了字符串的 Levenshtein 距离函数,但在考虑两个名称可能相同且置信度为 75% 之前,我不确定要设置什么阈值。
这是我正在考虑做的事情:
- 以小写形式进行所有比较
- 在计算 levenshtein 距离之前从被比较的两个名称中删除所有空格
- 将 levenshtien 距离转换为较短名称长度的百分比
- 如果百分比为 0,则完美匹配
- 如果百分比 < x 他们可能是相同的
我计划使用 apache commons StringUtils.getLevenshteinDistance() 进行 Leventstien 计算。
x 的好值是多少?10%、20%、30%……等等?这是一个很好的算法吗?我的数学技能很生疏,我不确定这是否可行。
有更好的方法吗?是否有一个标准库可以用于这样的事情?