我正在建立一个从多个网站提取的餐馆的时间和地址信息数据库。因为相同餐馆的信息可能存在于多个网站中。所以在数据库中我会有一些几乎重复的副本。
因为餐馆的数量很大,所以100000.然后,对于每个新条目,我必须进行100000 ^ 2比较的订单,以检查是否已经存在具有几乎相似名称的任何餐馆信息。所以我想问是否有更好的方法比可能的更好。谢谢。
答案 0 :(得分:1)
基本上,您正在寻找record linkage工具。这些工具可以索引记录,然后为每个记录快速找到一小组潜在候选人,然后对这些记录做更详细的比较。这避免了O(n ^ 2)问题。他们还支持在比较之前清理您的数据,以及更复杂的比较器,如Levenshtein和q-gram。
维基百科上的记录链接页面曾经有一个工具列表,但它已被删除。如果你想去寻找它,它仍然存在于版本历史中。
我为此编写了自己的工具,称为Duke,它使用Lucene进行索引,并且内置了详细的比较器。我已经成功地使用它来重复删除220,000个酒店。我可以使用笔记本电脑上的四个线程在几分钟内运行重复数据删除。
答案 1 :(得分:0)
一种方法是构建您的相似度函数,以便您可以查找一小组现有的餐馆来比较您的新餐厅。此查找将使用数据库中的索引,并且应该很快。
如何定义相似度函数是棘手的部分:)通常你可以将每个记录翻译成一系列标记,每个标记都在数据库中查找,以找到可能类似的记录。
请参阅此blog post,我写这篇文章是为了描述我为查找爬网数据中的重复项而构建的系统。这听起来与您想要做的非常相似,并且由于您的用例较小,我认为您的实现应该更简单。