r - stringdist 包中的 Jaccard 相似度来匹配字符串中的单词

标签 r text stringdist

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

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

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

所以我们在这里看到它计算了“猫”和“猫”、“狗”和“狗”以及“人”和“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

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

最佳答案

您可以首先对句子进行标记,并对相应的单词列表进行哈希处理,将句子转换为整数列表,然后使用 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

关于r - stringdist 包中的 Jaccard 相似度来匹配字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37143944/

相关文章:

python - 在 python 函数中使用字符串时接受 "close matches"吗?

递归运算符(operator)工和主管数据以在 R 中生成组织树层次结构

r - 如何将变量名称绑定(bind)到 df

R计算数据框中的百分比值

c - 从文本文件中读取和打印输出

r - 为什么 R stringdist 在 q-gram 距离中返回 Inf,其中一个字符串比 q 短?

java - RCaller - setRscriptExecutable() 究竟应该指向什么?

apache-flex - Flex DataGridColumn 显示多行字符串数据

javascript - 如何使用文本框作为常量输入?

r - 处理字符串相似性的有效方法?