我正在寻找一种方法来搜索数据库并找到电子邮件地址之间的密切相似之处。我能想到的唯一解决方案是 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/