【发布时间】:2013-11-29 11:38:25
【问题描述】:
我正在尝试寻找一种算法来检查两个数据条目之间的相似性。假设我有两个数据结构(联系人列表中的字段),其中包含以下数据:
// UserA addressbook.
name: Frank Sinatra
mobile: +44 555 555 555 55
// UserB addressbook.
name: Frank Albert Sinatra
phone: 004455555555555
我从不同的提供商那里获得了这些条目,UserA 同步了他的 Google 帐户,而 UserB 同步了他的 Microsoft 帐户,但我希望我的算法告诉我两个用户都认识同一个人(在一定概率内)。
有人知道我应该去哪里看吗?我试图找到创建“不安全”散列的散列算法,即相似数据的相似散列,但该路由没有效率。
【问题讨论】:
-
对于初学者,您可以将所有名称(名字、姓氏、中间名)隔离到一个数组中,并从数字中去除所有“+”号、空格和前导零。然后检查数字是否匹配,以及其中一个数组是否包含另一个数组的某些元素。
-
数据结构只是一个例子。它可能是自定义字段或消息列表。我需要比较两个数据结构。
-
嗯。我认为一般的相似性算法不适用于您的示例案例。两个相似的电话号码本质上是不同的。 “Miller R”、“Robert Miller”和“Miller Bob”可能指的是同一个人并且在词汇上是不同的,尽管它们共享一个共同的子词。我认为,如果您按照 H2CO3 的建议以某种方式对数据进行标准化,然后对每个字段使用自定义比较来告诉您 A 可能是 B,例如“J Rye”
标签: algorithm comparison computer-science equality fuzzy