【问题标题】:How to explicitly build sparse stringdistmatrix to avoid running out of memory?如何显式构建稀疏 stringdistmatrix 以避免内存不足?
【发布时间】:2019-06-23 20:43:52
【问题描述】:

将“数据”向量中大量略有不同的餐厅名称匹配到适当的“匹配”向量:

stringdist 包中的 stringdistmatrix 函数很棒,但是内存不足 10k x 10k 并且我的数据更大。

试过as(stringdistmatrix(data, match),'sparseMatrix') 会给出希望的结果,但内存不足。因此,我想使用sparseMatrix(i,j,x,dims,dimnames) 和由adist() 计算的x 或类似的字符串距离显式索引对,希望它适合内存。

R

data <- c("McDonalds", "MacDonalds", "Mc Donald's", "Wendy's", "Wendys", "Wendy", 
          "Chipotle", "Chipotle's")

match <- c("McDonalds", "Wendys", "Chipotle")

尝试:

library(Matrix)
library(stringdist)

idx <- expand.grid(a=data,b=match)
idx$row <- match(idx$a,idx$b)
idx$col <- match(idx$b,idx$a)

library(Matrix)
sparseMatrix(i=idx$row, 
             j=idx$col,
             x=ifthen(adist(data,match)<2,1,0),
             dims=c(7,3),
             dimnames = list(data, match))

希望输出匹配:

library(stringdist)
as(ifelse(stringdistmatrix(data,match)<2,1,0),'sparseMatrix')

【问题讨论】:

  • 您的距离矩阵不是稀疏的(即它大部分不是零)。您需要一种不同的方法来存储一个巨大的非稀疏矩阵。
  • idx$row 中的所有 NAs 都是有意的吗?
  • 理解了:距离矩阵,似乎我可以用 ifthen(adist(data, match)>2,0,1) 反转它。我想我主要是在努力理解如何索引。
  • 不打算使用 NA。
  • @DavidLucey 好的,请修复您的代码

标签: r sparse-matrix stringdist


【解决方案1】:

如果我正确理解您的问题,您的任务是将脏字符串与干净字符串匹配。你不需要整个矩阵(它确实不会稀疏)。相反,您可以使用amatch

library(stringdist)
data <- c("McDonalds", "MacDonalds", "Mc Donald's", "Wendy's", "Wendys", "Wendy", 
          "Chipotle", "Chipotle's")
match <- c("McDonalds", "Wendys", "Chipotle")
i <- amatch(data, match, method="osa",maxDist=2)
data.frame(data=data, matched_data = match[i], stringsAsFactors = FALSE)

         data matched_data
1   McDonalds    McDonalds
2  MacDonalds    McDonalds
3 Mc Donald's    McDonalds
4     Wendy's       Wendys
5      Wendys       Wendys
6       Wendy       Wendys
7    Chipotle     Chipotle
8  Chipotle's     Chipotle

【讨论】:

  • 它完美运行,而且来自 Mark van der Loo。感谢您的回答、您的在线书籍、包裹等!
猜你喜欢
  • 1970-01-01
  • 2013-10-21
  • 2019-05-21
  • 2020-03-26
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
相关资源
最近更新 更多