【发布时间】:2015-07-14 08:05:25
【问题描述】:
所以我在数据库中有两个未连接的 MYSQL 表(两个不同的数据源)[每个大约 500,000 行]。他们有公司名称、公司地址、城市、州等信息,以及每一个中的一些具体信息,一旦我弄清楚如何将两者“链接”在一起,我希望用这些信息填充第三个表。
我最初的想法是如果企业名称/城市/地址相同,则尝试将它们链接在一起。
问题是,对于很多行,两个表之间没有完全匹配。因此,在另一个“XYZ Incorporated”中,企业名称可能是“XYZ”,某些地址也是如此,它可能是“123 NW 10th St.”。或“西北第十街 123 号”。
所以现在我正试图找出一种方法来找到一个“足够接近”的匹配,这就是我迷路的地方。以前从来没有做过这样的事情,也不知道从哪里开始。我的想法是我可以设置某种阈值,如果匹配足够接近,我会将两个 ID 插入另一个将两者链接在一起的表中以供将来处理。
(数据库目前为 InnoDB / MySQL)
非常感谢您的帮助!
【问题讨论】:
-
您是否曾经在查询中使用过
LIKE? -
当然可以,但这行不通……文本不完全匹配,这会导致一大块不工作。因此,如果我要搜索 XYZ Inc,它不会匹配 XYZ。此外,不同城市可能有 10 个 XYZ(或同一城市有多个)。因此,我还必须将它与本地的 LIKE 配对,而且匹配度很低。我更多的是在寻找一种方法来找到多个术语上的紧密匹配,并说找到“90%”匹配的东西。
-
LIKE '%XYZ%'可能会起作用。它肯定会捕获更多。 -
这比看起来更复杂。我认为尝试编写可以自动执行此操作的东西将具有极低的投资回报率。老实说,你最好的选择是尽可能地进行匹配,然后取出剩余的行并将它们移植到 Mechanical Turk 之类的东西上,以供人类审查。
-
无论我期望得到什么损失,只是如果我尝试通过 LIKE 语句运行它,我会损失很多。 infomaniac 下面的答案非常接近我需要的答案。我的想法是对每场比赛进行加权,如果高于某个分数,则将两个匹配的 ID 插入新表中。如果我可以让它工作,即使我需要让它在服务器上运行几天,那也很好,因为它是一次性的。所以如果我能匹配 90+% 那就太好了。
标签: php mysql database innodb normalization