【问题标题】:Calculating string similarity as a percentage以百分比计算字符串相似度
【发布时间】:2018-03-08 20:38:01
【问题描述】:

给定的函数使用 R 中的“stringdist”包,并告知将一个字符串更改为另一个字符串所需的最小更改。我希望以“%”格式找出一个字符串与另一个字符串的相似程度。请帮助我,谢谢。

stringdist("abc","abcd", method = "lv")

【问题讨论】:

  • 也许this answer 会有用。这实际上取决于您对相似性的定义。

标签: r stringdist


【解决方案1】:

这样的事情可能会奏效:

d <- data.frame(original = c("abcd", "defg", "hij"), new = c("abce", "zxyv", "hijk"))
d$dist <- stringdist(d$original, d$new, method = "lv")
d$similarity <- 1 - d$dist / nchar(as.character(d$original))

#### Returns:
####   original  new dist similarity
#### 1     abcd abce    1  0.7500000
#### 2     defg zxyv    4  0.0000000
#### 3      hij hijk    1  0.6666667

【讨论】:

  • 嘿,非常接近,如果我看到你的第一个字符串,我应该得到 0.75 而不是 0.25,这表示字符串之间的 75% 相似性,同样第二个字符串应该是 0%,因为它们完全不同。感谢您的帮助。
  • 我已将答案更改为计算相似度而不是距离。
  • 我需要百分比的相似度数字,非常感谢您的帮助
  • “百分比”是什么意思?如果您想要 75 而不是 0.75,您可以将结果乘以 100。还是您需要的其他东西?
  • 非常感谢您的帮助。
【解决方案2】:

你可以使用RecordLinkage包并使用函数levenshteinSim,即

#This gives the similarity
RecordLinkage::levenshteinSim('abc', 'abcd')
#[1] 0.75

#so to get the distance just subtract from 1, 
1 - RecordLinkage::levenshteinSim('abc', 'abcd')
#[1] 0.25

【讨论】:

  • 我不知道这个包 - 真的很酷。根据文档,甚至还有一个函数levenshteinDist可以直接计算距离。
  • @A.Stam 是的。但是,该距离未标准化
  • 我只需要这个,你能给我同样的结果吗
  • 嗨,我想知道,使用 scales 包的 percent(1:10) 给我的值是 % 但字符数据类型,我希望用 % 表示数字,但也要使这个数字,请帮助.
  • 您不能在值后面加上符号% 并将其设置为数字。这就是为什么我们将百分比写成0,...
【解决方案3】:

这是基础 R 中的一个函数。我添加了对长度相等的向量作为输入的检查。如果需要,您可以更改此逻辑。

strSim <- function(v1, v2) {
            if(length(v1) == length(v2)) 1 - (adist(v1, v2) / pmax(nchar(v1), nchar(v2)))
            else stop("vector lengths not equal")}

返回

strSim("abc", "abcd")
     [,1]
[1,] 0.75

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2023-03-22
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    相关资源
    最近更新 更多