R中的模糊匹配-大约100万行

R中的模糊匹配-大约100万行,r,pattern-matching,bigdata,R,Pattern Matching,Bigdata,我有一份大约100万人的名单,每个人都有自己的名字和姓氏。个人可能不止一次出现在列表中。我想按个人对观察结果进行分组,并计算它们出现的次数-这通常是可以的,可以使用dplyr::group\u by 但是,也有拼写错误。为了解决这个问题,我考虑在这个列表中计算一个字符串距离的度量。然后我会继续假设,如果字符串距离低于某个阈值,则记录识别同一个人。 到目前为止,我尝试的所有方法要么太耗时,要么根本不可行。 这是我尝试使用dplyr和RecordLinkage: list_matrix <-

我有一份大约100万人的名单,每个人都有自己的名字和姓氏。个人可能不止一次出现在列表中。我想按个人对观察结果进行分组,并计算它们出现的次数-这通常是可以的,可以使用
dplyr::group\u by

但是,也有拼写错误。为了解决这个问题,我考虑在这个列表中计算一个字符串距离的度量。然后我会继续假设,如果字符串距离低于某个阈值,则记录识别同一个人。 到目前为止,我尝试的所有方法要么太耗时,要么根本不可行。 这是我尝试使用
dplyr
RecordLinkage

list_matrix <- expand.grid(x = individual_list, pattern = individual_list, stringsAsFactors = F)
# The same is achieved using stringdistmatrix (stringdist package)
result <- list_matrix %>% 
          group_by(x) %>% 
          mutate(similarity = levenshteinSim(x, pattern)) %>%
          summarise(match = similarity[which.max(similarity)], 
                    matched_to = pattern[which.max(match)])
列表_矩阵%
变异(相似性=levenshteinSim(x,模式))%>%
总结(匹配=相似性[which.max(相似性)],
匹配到=模式[which.max(匹配)])
这种方法适用于小数据集。直觉上,我总是面对所有的元素。然而,得到的矩阵是维numberofrows x numberofrows,在我的例子中,这是一百万倍——太重了,无法处理。
我还介绍了其他功能:
adist
pmatch
agrep(l)
。同样的逻辑也适用。我认为这个问题是概念性的。有什么想法吗?

可以按字母顺序排列个人,只比较上面和下面的
n
(100?1000?)行?这仍然非常耗时,但RAM的使用率要低得多。我建议看一下
RecordLink
软件包中的
compare.dedup