3

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

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

3 回答 3

7

您可以使用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
于 2017-09-27T11:28:55.773 回答
2

这是基本 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
于 2017-09-27T11:34:30.813 回答
2

像这样的东西可能会起作用:

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
于 2017-09-27T11:26:02.707 回答