【问题标题】:How to set the cost argument in the adist and agrep function?如何在 adist 和 agrep 函数中设置 cost 参数?
【发布时间】:2017-01-18 16:41:49
【问题描述】:

我需要一些帮助来理解这些函数的参数。我从帮助中获取了示例。

## To see the transformation counts for the Levenshtein distance:
drop(attr(adist("kitten", "sitting", counts = TRUE), "counts"))
# ins del sub 
#   1   0   2 

ins,代表插入; del 删除;和 sub 用于替换。

## To see the transformation sequences:
attr(adist(c("kitten", "sitting"), counts = TRUE), "trafos")
#      [,1]      [,2]     
# [1,] "MMMMMM"  "SMMMSMI"
# [2,] "SMMMSMD" "MMMMMMM"

由此不难看出,在比较字符串一visa和字符串二时,发现SMMMSMI; 2次换人1次插入,总距离应该是3。

adist("kitten", "sitting", costs = list(ins=1, del=0, sub=1), partial = F)
#      [,1]
# [1,]    3

这是我不明白的,为什么当我将插入成本设置为零时,总距离的结果为零。由于替换的数量,我希望是 2。

adist("kitten", "sitting", costs = list(ins=0, del=0, sub=1), partial = F)
#      [,1]
# [1,]    0

非常感谢。

【问题讨论】:

    标签: r agrep


    【解决方案1】:

    如果您在指定每个操作的成本的同时查看实际计数,这将更容易解释:

    drop(attr(adist("kitten", "sitting", costs = list(ins=0, del=0, sub=1), 
                     partial = F, counts = T), "counts"))
    
    # ins del sub 
    #   6   5   0 
    

    所以你看到的是:

    # ins del sub 
    #   1   0   2 
    

    当您指定一组与默认值不同的成本参数时,插入、删除和替换的操作数已更改。这是有道理的,因为根据?adist,将一个字符串转换为另一个字符串的方法不止一种,并且与adist 的距离为:

    一个广义的 Levenshtein(编辑)距离,给出 最小可能加权的插入、删除和 将一个字符串转换为另一个字符串所需的替换。

    根据这个说法,应该有一个优化,以最小化cost参数加权的操作数量,所以如果我们指定insertionsdeletions成本参数为零,那么它不会不再使用substitution 操作,因为前两个操作显然成本更低,并且确实使用 6 次插入和 5 次删除来完成转换,最终距离为零,因为这两个操作的成本为零。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 2017-10-05
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      相关资源
      最近更新 更多