我有一个大型数据库(可能有数百万条记录),其中包含相对较短的文本字符串(按街道地址、名称等顺序)。
我正在寻找一种删除不精确重复的策略,模糊匹配似乎是首选方法。我的问题:许多文章和 SO 问题都涉及将单个字符串与数据库中的所有记录进行匹配。我希望立即对整个数据库进行重复数据删除。
前者将是一个线性时间问题(将一个值与一百万个其他值进行比较,每次都计算一些相似性度量)。后者是一个指数时间问题(将每条记录的值与其他每条记录的值进行比较;对于一百万条记录,与前一个选项的 1,000,000 次计算相比,这大约是 5 x 10^11 计算)。
我想知道除了我提到的“蛮力”方法之外是否还有另一种方法。我正在考虑可能生成一个字符串来比较每个记录的值,然后对具有大致相等相似性度量的字符串进行分组,然后通过这些组运行蛮力方法。我不会达到线性时间,但它可能会有所帮助。此外,如果我考虑得当,这可能会错过字符串 A 和 B 之间潜在的模糊匹配,因为它们与字符串 C(生成的检查字符串)的相似性非常不同,尽管它们彼此非常相似。
有任何想法吗?
PS 我意识到我可能使用了错误的时间复杂度术语——这是一个我基本掌握的概念,但还不够好,所以我可以当场将算法归入正确的类别。如果我用错了术语,我欢迎更正,但希望我至少能明白我的意思。
编辑
一些评论者问,鉴于记录之间的模糊匹配,我的策略是选择删除哪些记录(即给定“foo”、“boo”和“coo”,它们将被标记为重复并删除)。我应该注意,我不是在这里寻找自动删除。这个想法是在一个 60 多万条记录数据库中标记潜在的重复项,以供人工审查和评估。如果有一些误报是可以的,只要它是一个大致可预测/一致的数量。我只需要了解重复项的普遍性。但是如果模糊匹配传递需要一个月的时间来运行,那么这甚至不是一个选项。