我有一个MySQL数据库表,其中包含大约1000家商店的信息。现在我将通过上传Excel电子表格来导入更多商店,我正在努力避免重复。
但这是我的问题。
目前我正在将数据导入临时表。现在我想知道将进口商店与现有商店进行比较的最佳方法是什么。
我的计划是浏览每一行并比较商店。
有没有人对这种数据比较有所了解?
更新
谢谢你的好答案。
将用于比较的字段是:
我正在思考这些问题:
选择名称= Lavenshtein和country = country的行 这样我只需要处理一个小清单。
然后我可以更彻底地比较姓名和地址。
答案 0 :(得分:4)
Levenshtein-distance是这样做的方法,你可以避免手动输入。但实际实施将取决于某些关于数据的先验知识。就像拼写中你期望的错误一样。
假设例如它的数据质量很好,而你只想要拼写错误,你可以基于生成匹配条件,1)单词数是否相同? 2)这些单词的顺序3)名字中每个单词的Levenshtein距离允许误差的小阈值。
当名称含糊不清时,可以通过检查具有相似条件的地址来加强条件,反之亦然。
答案 1 :(得分:3)
为了扩展我对Shaunak答案的评论,我采取的方法是:
按优先顺序对每个名称进行一系列“哈希”。例如,对于英国的一些金融公司,我使用了以下内容:
我将所有这些推入一个表,然后构建一个查询来比较表中的每个公司名称与所有其他公司名称,基于它们匹配哈希1,哈希2,哈希3,哈希4.这给了我一个信心因素 - 匹配哈希的数量越多,公司实际上相同的可能性就越大。 (注意,根据我采用的方法,如果哈希1匹配,哈希2,3和4保证匹配,依此类推。)
(检查空哈希,并忽略 - “有限公司”可以减少为空哈希,但你不希望它与其他空哈希匹配。)
我和Levenshtein一起使用这种方法将我可能的重复数据过滤成可能性顺序 - 你如何找到适合Levenshtein的可能方法取决于你的数据;例如,您可能希望将Levenshein应用于第三个哈希而不是实际名称 - 并向我的商务人员提供可能重复的列表以做出最终决定,并自动匹配最高信度匹配,我确信名字真的代表了同一家公司。
查看我的代码,我还使用了一个散列,即在删除停用词等后对每个单词进行Soundex转换,尽管我的评论指出Metaphone本来会更好(我正在使用SQL Server,所以Soundex内置于...)