r - 模糊匹配两个字符串 ur r

标签 r text match fuzzy

我有两个向量,每个向量都包含一系列字符串。例如,

V1=c("pen", "document folder", "warn")
V2=c("pens", "copy folder", "warning")

我需要找出哪两个最匹配。我直接使用编辑距离。但这还不够好。就我而言,钢笔和钢笔的含义应该相同。文档文件夹和复制文件夹可能是同一个东西。 warn 和 warning 其实是一样的。我正在尝试使用像 tm 这样的软件包。但我不太确定哪些函数适合这样做。谁能告诉我这个吗?

最佳答案

根据我的经验,余弦匹配对于此类工作来说是一个很好的匹配:

V1 <- c("pen", "document folder", "warn")
V2 <- c("copy folder", "warning", "pens")   
result <- sapply(V1, function(x) stringdist(x, V2, method = 'cosine', q = 1))
rownames(result) <- V2
result
                  pen document folder      warn
copy folder 0.6797437       0.2132042 0.8613250
warning     0.6150998       0.7817821 0.1666667
pens        0.1339746       0.6726732 0.7500000

当距离足够近时,您必须定义一个截止点,距离有多小,它们匹配得越好。您还可以使用 Q 参数,该参数表示应相互比较多少个字母组合。例如:

result <- sapply(V1, function(x) stringdist(x, V2, method = 'cosine', q = 3))
rownames(result) <- V2
result
                  pen document folder      warn
copy folder 1.0000000       0.5377498 1.0000000
warning     1.0000000       1.0000000 0.3675445
pens        0.2928932       1.0000000 1.0000000

关于r - 模糊匹配两个字符串 ur r,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40299192/

相关文章:

r - 停止打印大量零(不是科学计数法)

r - ggplot 为facet_wrap 中的每个图添加刻度

xml - 无法为签名 ‘saveXML’ 字符找到函数 ‘"的继承方法”’

mysql - 将不同大小的文本存储在不同的mysql表中是否有效?

Python从段落中提取信息

r - R中没有 "multiple match vector"函数吗?

html - 正则表达式捕获分隔符之间的字符串并排除它们

r - 将具有三列(日期、参数、结果)的矩阵解析为在指定日期 R 的每个参数都有一列的矩阵

android - 在 EditText 内填充

javascript - 如果一组不匹配,.match() 返回 null