我有7个MySQL表,其中包含大约17000行的部分重叠和冗余数据。所有表格都包含学校的名称和地址。有时,同一所学校在一个名称略有不同的表格中重复出现,有时同一所学校会出现在多个表格中,而且名称或地址的差异也很小。
我的任务是创建一个包含id,name和town / city id字段的表,其中包含7个表中的数据。对于具有id和name字段的城镇,将有一个单独的表。
由于原始表没有单独的城市字段,因此必须从具有截然不同格式的数据的地址字段中提取这一事实,这很复杂。
我意识到大部分必须手动完成,我已经硬化了我的灵魂,我已经准备好应对这将带给我的生活地狱。我的问题是:
谢谢!
答案 0 :(得分:2)
虽然使用的是Oracle而不是MySQL,但我做过一次这样的事情。 17000条记录是可管理的记录数量,但足以使其值得构建工具。
维基百科有lists of schools pretty much all over the world,但不是匈牙利。这是一个遗憾,因为最好在系统中包含您应该拥有的数据列表,而不是尝试从破碎的数据库中重建它。如果您可以获得这样的列表,那么您可以将您的记录与其进行比较,而不是相互比较,这将非常有用。即使您可以获得仍然有用的邮政编码和城市名称列表。
当谈到模糊匹配字符串时,有许多统计技巧可用。一个常见的是Levenshtein距离。这给出了一个分数,表示两个字符串之间的相似性,表示为从字符串 A 到字符串 B (AKA编辑距离)所需的更改次数。 Code Janitor有一个针对MySQL的实现,但这只是谷歌的热门产品,并且没有我的保证。 Find it here。 Jaro Winkler是另一种匹配算法,但似乎有更少的实现在互联网上发挥作用。
一般处理提示