我想在stringdist函数中使用Jaccard相似度来确定单词袋的相似度。据我所知,使用Jaccard仅可匹配字符串中的字母。
c <- c('cat', 'dog', 'person')
d <- c('cat', 'dog', 'ufo')
stringdist(c, d, method='jaccard', q=2)
[1] 0 0 1
Run Code Online (Sandbox Code Playgroud)
因此,我们在这里看到它计算了“ cat”和“ cat”,“ dog”和“ dog”以及“ person”和“ ufo”的相似性。
我还尝试将单词转换为1个长文本字符串。以下方法满足了我的需要,但仍在计算1-(共享2克数/唯一2克总数):
f <- 'cat dog person'
g <- 'cat dog ufo'
stringdist(f, g, method='jaccard', q=2)
[1] 0.5625
Run Code Online (Sandbox Code Playgroud)
如何通过单词计算相似度?
您可以先对句子进行标记,然后对相应的单词列表进行哈希处理,以将句子转换为整数列表,然后使用seq_dist()该距离来计算。
library(hashr); library(stringdist)
f <- 'cat dog person'
g <- 'cat dog ufo'
seq_dist(hash(strsplit(f, "\\s+")), hash(strsplit(g, "\\s+")), method = "jaccard", q = 2)
[1] 0.6666667
Run Code Online (Sandbox Code Playgroud)