【问题标题】:Similarity Analysis in SQL or Python or R [closed]SQL或Python或R中的相似性分析[关闭]
【发布时间】:2018-08-22 21:53:18
【问题描述】:

我有一个非常有趣的问题,过去几天我一直在尝试解决,但没有运气。我有 120k 个项目的描述,我必须将这些描述与 38k 个项目进行比较,并确定它们之间的相似程度。最终,我想根据相似性查看 120k 中是否存在 38k 中的任何一个。 我在 excel 中找到了很好的相似性脚本,并将我的数据组织为乘法表,这样我就可以将 120k 中的每个描述与 38k 中的每个描述进行比较。见下图。所以该功能有效,但是计算量无法在excel中运行。如果我将其分成两半(120k X 16k),我们正在谈论超过 20 亿次计算。该函数将描述从 A2 到 B1,然后从 A2 到 C1,依此类推,直到结束,即 16k。然后它从 A3 开始描述,并做同样的事情和 120k 次。

有谁知道如果把它放在强大的服务器上可以做到这一点的 SQL 或 R 或​​ Python 脚本?

【问题讨论】:

  • 您可以使用 Jaro Winkler,它与您的数据非常匹配,因为它似乎是产品名称?这是 Python 实现的链接:pypi.python.org/pypi/pyjarowinkler,但这也在 R 中,并且也有 SQL 版本。我用 C# 编写了一个版本来匹配数以百万计的产品名称,并在大约 4-5 小时内完成了所有工作。不过我不得不把我的笔记本电脑放在冰箱里,因为它到最后就开始过热了!
  • @RichardHansell 谢谢你的建议。我正在尝试弄清楚如何在 R 中运行它。 :-)
  • 您可能会发现这与您的要求非常相似(使用两个列表 - 通常只有一个列表):stackoverflow.com/questions/29102155/…

标签: python sql r excel


【解决方案1】:

您正在寻找aproximate string matching。微软为 Excel 开发了一个免费的add-on,用于创建所谓的模糊匹配。它使用Jaccard index 算法来确定两个给定值的相似度。

  • 确保两个描述列表都列在可排序的表格列中 (Ctrl+L);
  • 单击“左列”和“右列”部分中的列,然后按中间的连接按钮;
  • 选择要作为输出的列(如果要选择左侧或右侧的多列,请按住 Ctrl);
  • 确保选中FuzzyLookup.Similarity,这将给出0-1之间的相似度分数;
  • 确定每个可比较字符串显示的最大匹配数;
  • 确定您的阈值。该数字表示两个字符串在将其标记为匹配之前的最小相似度百分比;
  • 转到A1单元格的新工作表,这是因为新生成的相似度表会覆盖当前数据;
  • 点击“开始”按钮!
  • 选择所有相似度分数,并给它们更多的小数以获得正确的结果。

See example.

【讨论】:

  • 感谢您的回复。我尝试了这个解决方案,但是即使在我的服务器上它也很慢。我估计可能需要几天时间才能完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多