R语言【utlis】——adist():字符串近似距离(编辑距离)

Package utils version 4.2.0


Description

计算字符向量之间的近似字符串距离。这个距离是一个广义的Levenshtein(编辑)距离,给出了将一个字符串转换为另一个字符串所需的最小可能的插入、删除和替换加权数。


Usage

adist(x, y = NULL, costs = NULL, counts = FALSE, fixed = TRUE,
      partial = !fixed, ignore.case = FALSE, useBytes = FALSE)

Arguments

参数【x】:一个字符向量。不支持长向量。

参数【y】:一个字符向量,或默认为NULL,即视作参数【x】的值。

参数【costs】:数值向量或命名列表,明确指出计算Levenshtein距离时要进行“insertions”,“deletions”和“substitutions”的加权。默认为NULL表示三种编辑方式加权相同。

参数【counts】:逻辑值指示是否将编辑次数(insertions,deletions和substitutions的次数)作为返回值的 counts 属性。

参数【fixed】:逻辑值。默认为TRUE,参数【x】视为正常的字符。否则,参数【x】将视为标准的正则字符串,并且参数【partial】自动设置为FALSE。

参数【partial】:逻辑值。指示编辑后的参数【x】是否要完全匹配参数【y】。

参数【ignore.case】:逻辑值。如果为TRUE,计算编辑距离时忽略大小写。

参数【useBytes】:逻辑值。如果为TRUE,计算编辑距离将使用字节,而不是字符。


Details

两个字符串s和t之间的(广义的)Levenshtein(或编辑)距离是将s转换为t(以便转换完全匹配t)所需的插入、删除和替换的最小可能加权数。

这个距离是在partial = FALSE时计算的,目前使用的是一种动态规划算法(例如,参见https://en.wikipedia.org/wiki/Levenshtein_distance),其空间和时间复杂度为O(mn),其中m和n分别是s和t的长度。

另外,计算变换序列和计数是O(max(m,n))。

广义Levenshtein距离也可以用于近似(模糊)字符串匹配,在这种情况下,可以找到与模式s距离最小的t的子字符串(可以将其视为正则表达式,在这种情况下使用最左和最长匹配的原则适用),参见,例如https://en.wikipedia.org/wiki/Approximate_string_matching。这个距离是由Ville Laurikari (https://github.com/laurikari/tre)使用' ' tre ' '为partial = TRUE计算的,并且对应于agrep使用的距离。在这种情况下,给定的cost值被强制为整数。

注意,插入和删除的代价可以不同,在这种情况下,s和t之间的距离可以不同于t和s之间的距离。


Value

具有x和y元素的近似串距离的矩阵,其行和列分别对应于x和y。

如果counts为TRUE,则转换计数作为该矩阵的“counts”属性返回,作为一个三维数组,其维度分别对应于x的元素、y的元素和转换类型(插入、删除和替换)。

此外,如果partial = FALSE,转换序列将作为返回值的“trafos”属性返回,作为包含元素“M”、“I”、“D”和“S”的字符串,分别表示匹配、插入、删除和替换。

如果partial = TRUE,则匹配子字符串的偏移量(第一个和最后一个元素的位置)将作为返回值的"offsets"属性返回(包含两个偏移量),−1表示不匹配。


Examples

adist("kitten", "sitting")
     [,1]
[1,]    3
drop(attr(adist("kitten", "sitting", counts = TRUE), "counts"))
ins del sub 
  1   0   2 
attr(adist(c("kitten", "sitting"), counts = TRUE), "trafos")
     [,1]      [,2]     
[1,] "MMMMMM"  "SMMMSMI"
[2,] "SMMMSMD" "MMMMMMM"
adist("lasy", "1 lazy 2")
     [,1]
[1,]    5
adist("lasy", "1 lazy 2", partial = TRUE)
     [,1]
[1,]    1

你可能感兴趣的:(#,utils,r语言,开发语言)