模糊比较两个表的最佳方法是什么

时间:2015-06-07 12:24:22

标签: php mysql r google-bigquery

我有两张约70 000行的表格。两个表都有一列"标题"。我需要与表进行比较,并按标题列查找它们的交叉点。我尝试使用JOIN和UNION,但标题可能会有所不同。我的意思是,在一张桌子中它可以是纽约,美国,但在其他表格中它可以是纽约美国。我用谷歌搜索它,它调用"模糊字符串搜索"。

我已经开始使用php和similar_text了,但它很慢......我认为对于这项任务,我应该使用别的东西,比如 R 也许......我已经将这些数据推送到BigQuery中,但是BigQuery仅支持REGEXEP用于搜索where语句,或者我无法理解它应该如何使用。

R能用速度解决我的问题吗?

谢谢!

dataset1的示例:

new-york, usa|100|5000

dataset2

newyork usa|50|1000
nnNew-York |10|500

所需输出的示例:

New-York, Usa|160|6500

换句话说,我需要创建一个包含两个表数据的新表。

已更新

感谢您的回答,我尝试了R和agrep,它有效,但非常慢......在40分钟内有2000行,我总共有19万行。这是正常的吗?

1 个答案:

答案 0 :(得分:2)

评论太长了。

你问题的答案是" Levenshtein距离"。然而,有70,000行,这需要大约70,000 * 70,000比较--4.9亿。这很多。

在R中完成工作可能是最好的方法,因为R会将所有数据保存在内存中,并且可能比MySQL中的实现更有效。

有一些方法可以使搜索短路。例如,一种方法是将每个字符串分成n-gram(典型的三元组)并使用它们来减少搜索空间。毕竟,"纽约市"和#34;达拉斯"没有共同的字母,所以不需要做任何比较。

R中可能有例程来处理三元组。它们在MySQL中非常容易,但不是内置的。