php - 导入数据库时​​比较数据的最佳方法是什么?

标签 php mysql algorithm levenshtein-distance

我有一个 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/

相关文章:

php - 如何使用SQL获取评论最多的文章?

php - 与依赖注入(inject)的绑定(bind)不起作用。目标不可实例化

php - Controller 中的自定义操作在 yii2 中不起作用

php - 将 json 列转换为 utf8mb4

MySQL单表互条件查询

algorithm - 通过序号索引访问红黑树

mysql - 如何根据搜索关键字rails从2个表中获取数据

mysql - 仅从 MySQL Workbench 导出数据

c++ - 是否可以在不必计算 A/B 的情况下有效地计算 A % B?

algorithm - Clojure 字符串用文本替换 map 向量