从字符串距离矩阵中提取最佳匹配

时间:2018-05-25 02:36:52

标签: r

我无法从字符串距离矩阵中提取最佳匹配。

我正在使用包stringdist来计算字符串距离矩阵。

例如,我使用这些代码行生成矩阵。

library(stringdist)
lookup <- c('Dog', 'Cat', 'Bear')
data <- c('Do g', 'Do gg', 'Caat')
d.matrix <- stringdistmatrix(a = lookup, b = data, useNames="strings",method="cosine")

矩阵看起来像这样

enter image description here

我的方法是提取余弦相似度,最低数字是最佳匹配。

例如,“Do g”将与“Dog”匹配

我想要生成的是具有consine相似度值的匹配对数据帧

data  |  matchwith  |  cosine.s

Do g       Dog         0.1338746
Do gg      Dog         0.1271284
Caat       Cat         0.05719096

我不知道如何将数据转换为我想要的表格格式(上图)。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

which.min功能是解决此问题的好方法 这是一个使用基数R的解决方案:

library(stringdist)
lookup <- c('Dog', 'Cat', 'Bear')
data <- c('Do g', 'Do gg', 'Caat')
d.matrix <- stringdistmatrix(a = lookup, b = data, useNames="strings",method="cosine")

#list of minimun cosine.s
  cosines<-apply(d.matrix, 2, min)

#return list of the row number of the minimum value
  minlist<-apply(d.matrix, 2, which.min) 
#return list of matching values
  matchwith<-lookup[minlist]

#final answer
answer<-data.frame(data, matchwith, cosines)

答案 1 :(得分:1)

这是一种蛮力技术,但你也可以说

n.matrix <- data.frame(data=dimnames(d.matrix)[[2]], 
                       matchwith = dimnames(d.matrix)[[1]],
                       cosine.s = c(d.matrix[1,1], d.matrix[2,2], d.matrix[3,3]))

如果在实际问题中存在大量列和行,则可以构建函数来为cosine.s = c(d.matrix [i,i])创建值字符串