Php 导入数据库时比较数据的最佳方法是什么?
我有一个MySQL数据库表,其中包含大约1000家商店的信息。现在,我将通过上传Excel电子表格导入更多的商店,我正在努力避免重复Php 导入数据库时比较数据的最佳方法是什么?,php,mysql,algorithm,levenshtein-distance,Php,Mysql,Algorithm,Levenshtein Distance,我有一个MySQL数据库表,其中包含大约1000家商店的信息。现在,我将通过上传Excel电子表格导入更多的商店,我正在努力避免重复 商店可能有相同的名称,但地址不同 商店可能有相同的地址,但永远不会有相同的名称 但这是我的问题 商店可能拼写错误 地址可能拼写错误 目前,我正在将数据导入一个临时表。现在我想知道什么是比较进口商店和现有商店的最佳方法 我的计划是浏览每一排,比较一下商店 首先比较a.name=b.name和a.street=b.street。匹配时,商店被删除 然后我将对
- 商店可能有相同的名称,但地址不同
- 商店可能有相同的地址,但永远不会有相同的名称
- 商店可能拼写错误
- 地址可能拼写错误
- 首先比较a.name=b.name和a.street=b.street。匹配时,商店被删除
- 然后我将对名字和街道做一个Levenshtein比较。在这里,我可能需要手动查看结果,以确定它是否重复李>
谢谢你的回答 将用于比较的字段包括:
- 名字
- 街道地址
- 邮政编码
- 城市
- 国家
那样的话,我只需要处理一小份清单
然后我就可以开始更彻底地比较姓名和地址了。Levenshtein距离就是这样做的,你可以避免手动输入。但实际实现将取决于对数据的某种先验知识。比如你认为拼写会有多大的错误 例如,假设这是一个高质量的数据,并且您只希望输入错误,您可以根据以下内容生成匹配条件:1)单词数是否相同?2) 这些单词的顺序3)名称中每个单词的Levenshtein距离允许错误的小阈值
当名称不明确或visa国际组织名称不明确时,可通过检查具有类似条件的地址来强化这些条件 为了进一步阐述我对肖纳克回答的评论,我在做这件事时采取的方法是: 按优先级顺序对每个名称进行一系列“哈希”。例如,对于英国的一些金融公司,我使用了以下方法:
- “哈希”1:确切的公司名称,例如“圣约翰金融投资有限公司”
- 散列2:公司名称,去掉所有非字母数字字符并规范化空格:“圣约翰詹姆斯金融投资有限公司”
- 散列3:常见缩写扩展,例如“1st”到“First”,“Ltd”到“Limited”:“Saint John James Financial Investments Limited”。我在这里也犯了一些常见的拼写错误,例如“Independent”到“Independent”。您常见的拼写错误显然取决于您的源数据
- 散列4:“停止”字,例如“The”,“Limited”,删除:“Saint John James Financial Investments”
看看我的代码,我还使用了一个散列,它是在去掉停止词等之后对每个词的转换,尽管我的评论指出这样会更好(我使用的是SQL Server,所以内置了Soundex…Levenshtein是一个很好的方法,正如Shaunak所说。还考虑去掉“噪音”单词并把缩略语转换成同一个单词。我以前做过公司名称的比较,如果(例如,对于英国公司)在列文施泰因之前去掉“the”,“Limited”,“Ltd”,将所有“Co”转换为“company”,“UK”转换为“ukin”,“1ST”转换为“FIRST”,那么比较效果会更好。当你开始的时候,你会对你的数据有更多的感觉——只要把所有的商店名称放在一个有序的列表中,就会给你一些提示。谢谢你的回答。我不必担心“噪音”这个词,因为商店通常没有噪音——只有拥有商店的公司才有。如果一家商店被称为“二手货”,那么我不能将其改为“二手货”:)我以前从未使用过哈希,所以我不确定它是如何工作的。我确实找到了这个链接,我希望我可以使用它:我使用的是“散列”这个词非常松散——这只是我用来描述“精简”名称的一个词。你的名字需要多少修改甚至可能取决于你的来源;我所有的数据都是我公司的人打电话后输入的,所以如果发现一家名为“二手货”和“二手货”的商店是同一家商店,我也不会感到惊讶。或者“车身店”和“车身店”,比如。。。真的,在这种情况下,你的方法将由你的数据来控制,只有开始,你才能确定你的确切方向,我会说。是的,我将使用我最常用的方法。尝试失败:)@MattGibons,你知道这些类型的控制器的性能吗?比方说