【发布时间】:2021-03-31 06:25:48
【问题描述】:
两个字符串“abc”和“acb”之间的 Damerau-Levenshtein 距离将为 1,因为它涉及“b”和“c”之间的一个换位。
> stringdist("abc", "acb", method = "dl")
[1] 1
现在假设我有以下两个字符向量:
A = c("apple", "banana", "citrus")
B = c("apple", "citrus", "banana")
我如何计算 A 和 B 之间的 Damerau-Levenshtein 距离,以便结果与“abc”和“acb”之间的距离相同,因为“citrus”和“banana”之间有一个换位?换句话说,如何计算 A 和 B 之间的 Damerau-Levenshtein 距离,以便将每个项目计为字符串中的一个字符?
【问题讨论】:
-
试试这个(如果我理解你的话,但不确定):
abs(match(A, B) - seq_along(A)),这里假设这两个原子向量都包含相同的元素,只是顺序不同,A也是参考 -
我需要 A 和 B 之间的单个距离 (= 1),而不是 A 中的每对元素和 B 中的元素之间的距离。
-
取前面表达式的最大值
-
stringdist(paste(substr(A, 1, 1), collapse=""), paste(substr(B, 1, 1), collapse=""), method="dl")? (顺便说一句,stringdist不是基本 R 函数,请在您的问题中包含包加载) -
我已经添加(并稍后更新)一个答案,该答案应涵盖 Damerau-levenshtein 距离的所有标准情况,其中向量的每个元素都被视为字符串中的单个字符。 :-)
标签: r distance similarity damerau-levenshtein