我有两张约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万行。这是正常的吗?
答案 0 :(得分:2)
评论太长了。
你问题的答案是" Levenshtein距离"。然而,有70,000行,这需要大约70,000 * 70,000比较--4.9亿。这很多。
在R中完成工作可能是最好的方法,因为R会将所有数据保存在内存中,并且可能比MySQL中的实现更有效。
有一些方法可以使搜索短路。例如,一种方法是将每个字符串分成n-gram(典型的三元组)并使用它们来减少搜索空间。毕竟,"纽约市"和#34;达拉斯"没有共同的字母,所以不需要做任何比较。
R中可能有例程来处理三元组。它们在MySQL中非常容易,但不是内置的。