1

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

有没有办法做到这一点?

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

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

我希望那些都标记为彼此相似。

谢谢您的帮助!

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

4

2 回答 2

1

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

于 2013-01-16T21:20:15.503 回答
1

我建议您从“规范化”电子邮件开始:

  1. 从用户名部分去除尾随数字,例如john123-> john

  2. 可能会从用户名中删除一些标点符号,例如john.smith-> johnsmith

  3. 从域部分中删除一些主机,例如mail.foo.com-> foo.com;但不是math.mit.edu-> mit.edu

在执行 1 和 2 之后,您应该将原始电子邮件收集到将规范用户名映射到原始用户名的哈希表中,这样当您完成后,您只需要遍历规范用户名。

于 2013-01-16T21:24:01.877 回答