与R中的阻塞进行内存有效的字符串比较

时间:2014-03-04 09:01:59

标签: r record string-comparison linkage jaro-winkler

我有一个非常大的数据集的记录链接问题(A文件中的2000个条目,B文件中的~70.000.000条目)并且想要与R中的jarow-winkler算法进行基于距离的匹配两个文件都是data.tables,用字符串填充。

为了开发我的方法,我使用了子样本和“RecordLinkage”包。该软件包的优点是我可以在实际的字符串比较之前使用阻塞。 R命令是

compare.linkage(dataset1, dataset2, strcmp, blockfld) 
RLBigDataLinkage(dataset1, dataset2, strcmp, blockfld)

这样做的一大缺点是,创建了A文件中所有条目的比较字段以及B文件中的所有条目,这需要太多内存。 有没有办法做阻止,只保留A文件中每个条目的最佳Jarow-Winkler分数的n个记录对?

让事情变得更容易理解我给你一个简短的例子(我没有使用阻止来简化):

library(RecordLinkage)
a <- as.matrix(c("ab", "ac", "ad", "aa"))
b <- as.matrix(c("bb", "bc", "bd", "bb"))
test <- compare.linkage(a, b)
str(test$pairs)
nrow(test$pairs)

我的问题不是“a”和“b”的副本包含在“test”中,而是“test $ pairs”的长度。在上面的示例中,“test $ pairs”存储所有可能的记录组合的比较分数。因此,“test $ pairs”中有4 * 4 = 16个条目。我喜欢做的是仅在a文件中存储具有最佳比较分数的n个组合。所以当我设置n = 2时,我才会得到 4(来自档案的记录)* 2(具有最佳比较分数的记录对)= 8

在上面的例子中,这种差异可能很小,但对大数据集来说至关重要。

提前谢谢!

0 个答案:

没有答案