2

我有一个非常大的数据集的记录链接问题(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)

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

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

先感谢您!

4

0 回答 0