3

我想在 stringdist 函数中使用 Jaccard 相似度来确定词袋的相似度。据我所知,使用 Jaccard 仅匹配字符串中的字母。

c <- c('cat', 'dog', 'person')
d <- c('cat', 'dog', 'ufo')

stringdist(c, d, method='jaccard', q=2)
[1] 0 0 1

所以我们在这里看到它计算了'cat'和'cat','dog'和'dog'和'person'和'ufo'的相似度。

我还尝试将单词转换为 1 个长文本字符串。以下方法是我需要的,但它仍在计算 1 - (共享 2-gram 的数量/唯一 2-gram 的总数):

f <- 'cat dog person'
g <- 'cat dog ufo'
stringdist(f, g, method='jaccard', q=2)
[1] 0.5625

我如何让它通过单词计算相似度?

4

1 回答 1

5

您可以首先对句子进行标记并散列相应的单词列表,以将您的句子转换为整数列表,然后用于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
于 2016-05-10T16:38:02.103 回答