ruby-on-rails - 在电子邮件地址数组中搜索任意两个地址之间的相似性

标签 ruby-on-rails algorithm mongodb mongoid

我正在寻找一种方法来搜索数据库并找到电子邮件地址之间的密切相似之处。我能想到的唯一解决方案是 O(N^2),并且涉及嵌套循环。基本上获取一个电子邮件地址,然后一遍又一遍地对照其余地址检查它。这将非常耗时,因为我要处理数据库中的 100,000 个电子邮件地址。如果有所不同,这将作为 Ruby on Rails 应用程序的后台作业实现。

有什么办法吗?

我真的只是在寻找基本的相似之处。一个例子是

docjohnson@gmail.com
docjohnson1@gmail.com
docjohnson333@gmail.com
docjohnson@hotmail.com

我希望所有标记为彼此相似的。

感谢您的帮助!

编辑:我正在使用通过 Mongoid 连接到 ROR 的 Mongo 数据库,如果这完全改变了游戏规则的话。

最佳答案

为每个电子邮件地址计算一个“签名”;例如,签名可能是地址中用户名部分的前五个字符。对所有电子邮件地址进行排序,将具有相同签名的地址放在一起;如果你的签名算法做得很好,每组签名应该指的是同一个人。您必须根据您的数据和您对相似性的定义来调整签名算法。

关于ruby-on-rails - 在电子邮件地址数组中搜索任意两个地址之间的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14367764/

相关文章:

ruby-on-rails - 尝试创建新的 Rails 应用程序时出现 Thor 参数错误

javascript - 从数组数组中删除重复条目(javascript)

javascript - 如何更新嵌套用户集合

node.js - MongoDB:按两个具有不同值的字段重新分组

node.js - Nodejs mongodb 驱动程序和 GridFS

ruby-on-rails - sidekiq-superworker 的 superjob 完成时调用函数

ruby-on-rails - Rails - 在同一个请求上处理多个不同的时区

ruby-on-rails - 在 Rails 中使用自定义 Controller 时从 URL 获取资源名称

algorithm - 这种用于第 N 个斐波那契数的 O(log n) 迭代方法如何工作?

c++ - 整数除法矩阵之和