我一直在使用R中的“adist”功能,它计算两个字符串之间的Levenshtein距离。这是一个可重复的例子:
>a <- c("bonjour", "bonsoir", "good morning", "hello world")
>b <- c("maman", "bienjoue", "printemps")
>adist(a, b, counts = TRUE)
我得到的结果如下:
[,1] [,2] [,3]
[1,] 7 3 8
[2,] 7 5 8
[3,] 10 11 12
[4,] 11 10 11
attr(,"counts")
, , ins
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 0 1 2
[3,] 0 0 1
[4,] 0 1 0
, , del
[,1] [,2] [,3]
[1,] 2 0 0
[2,] 2 0 0
[3,] 7 4 4
[4,] 6 4 2
, , sub
[,1] [,2] [,3]
[1,] 5 2 6
[2,] 5 4 6
[3,] 3 7 7
[4,] 5 5 9
attr(,"trafos")
[,1] [,2] [,3]
[1,] "SSSSSDD" "MSIMMMMS" "SSIMSSSSI"
[2,] "SSSSSDDS" "MSIMSMSS" "SSIMSSSSI"
[3,] "SSDDDMSDDDMDD" "SSSSSDMSSDDDD" "SSSSSIMSSDDDD"
[4,] "SSSSSDDDDDDD" "SIMSSMSSDDDD" "SSSSSSSSSDDD"
在单元格[4,1]中,您可以看到它执行了6次删除和5次替换以及0次插入,但是,如果您查看此单元格的“trafos”属性,它将显示5次S和7次当距离为11时,D总计12次编辑(它增加了额外的D)。
这是我们计算“hello world”和“maman”之间的Levenshtein距离的时候。
如果我将“adist”直接应用于这两个而不是两个向量,我会得到以下内容:
>adist("hello world","maman",counts = TRUE)
[,1]
[1,] 11
attr(,"counts")
, , ins
[,1]
[1,] 0
, , del
[,1]
[1,] 6
, , sub
[,1]
[1,] 5
attr(,"trafos")
[,1]
[1,] "SSSSSDDDDDD"
在这种情况下似乎正确。
将“adist”应用于两个字符串向量并将其应用于两个对象(两个字符串)之间的结果有何不同?