【问题标题】:Comparing two data structures for similarties比较两个数据结构的相似性
【发布时间】: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


【解决方案1】:

字符串的相似度可以用Levenshtein distance来判断。测试前应准备好字符串,例如删除特殊字符或拆分字符串。 对于数据结构,请查看How do you measure similarity between 2 series of data?

【讨论】:

  • 两个电话号码的 Levenshtein 距离告诉你什么?距离为 1 的两个数字甚至可能在另一个国家/地区,具体取决于差异所在的位置。
【解决方案2】:

您可以进一步研究的一些关键字:数据相似性、距离/相似性度量(指标)、相关性、不精确匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多