我有一个 MySQL 数据库表,其中包含大约 1000 家商店的信息。现在我将通过上传 Excel 电子表格导入更多商店,并且我正在努力避免重复。
- 商店的名称可以相同,但地址绝不能相同。
- 商店的地址可以相同,但名称绝不能相同
但这是我的问题。
- 商店可能拼写错误
- 地址可能拼写错误
目前我正在将数据导入临时表。现在我想知道将导入的商店与现有商店进行比较的最佳方法是什么。
我的计划是遍历每一行并比较商店。
- 首先比较 a.name = b.name 和 a.street = b.street。匹配时,商店被删除。
- 然后我将对名称和街道进行 Levenshtein 比较。在这里,我可能必须手动查看结果以确定它是否重复。
有没有人有过这种数据比较的经验?
更新
感谢您的好答案。
将用于比较的字段是:
- 姓名
- 街道地址
- 邮政编码
- 城市
- 国家
我的想法是这样的:
选择 name = Lavenshtein 和 country = country 的行。
这样我只需要处理一个小列表。
然后我可以开始更彻底地比较姓名和地址。
最佳答案
Levenshtein-distance 是这样做的方式,您可以避免手动输入。但实际的实现将取决于对数据的某种先验知识。就像您期望拼写有多少错误一样。
例如,假设它是一个高质量的数据,而您只希望出现错别字,您可以根据以下条件生成匹配条件:1) 单词数是否相同? 2) 这些词的顺序 3) 名称中每个词的 Levenshtein 距离允许误差的小阈值。
可以通过在名称有歧义时检查具有类似条件的地址来加强条件,反之亦然。
关于php - 导入数据库时比较数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6855941/