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

Package utils version 4.2.0


Description

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


Usage

R 复制代码
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

R 复制代码
adist("kitten", "sitting")
复制代码
     [,1]
[1,]    3
R 复制代码
drop(attr(adist("kitten", "sitting", counts = TRUE), "counts"))
复制代码
ins del sub 
  1   0   2 
R 复制代码
attr(adist(c("kitten", "sitting"), counts = TRUE), "trafos")
复制代码
     [,1]      [,2]     
[1,] "MMMMMM"  "SMMMSMI"
[2,] "SMMMSMD" "MMMMMMM"
R 复制代码
adist("lasy", "1 lazy 2")
复制代码
     [,1]
[1,]    5
R 复制代码
adist("lasy", "1 lazy 2", partial = TRUE)
复制代码
     [,1]
[1,]    1
相关推荐
夏天的味道٥4 小时前
@JsonIgnore对Date类型不生效
开发语言·python
小白学大数据5 小时前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
SEO_juper6 小时前
别再纠结LLMs.txt了!它背后的真相与最佳使用场景,一文讲透。
开发语言·ai·php·数字营销
g***B7386 小时前
JavaScript在Node.js中的模块系统
开发语言·javascript·node.js
烤麻辣烫6 小时前
黑马程序员大事件后端概览(表现效果升级版)
java·开发语言·学习·spring·intellij-idea
思密吗喽6 小时前
宠物商城系统
java·开发语言·vue·毕业设计·springboot·课程设计·宠物
csbysj20206 小时前
Lua 函数
开发语言
头发还在的女程序员6 小时前
三天搞定招聘系统!附完整源码
开发语言·python
温轻舟7 小时前
Python自动办公工具06-设置Word文档中表格的格式
开发语言·python·word·自动化工具·温轻舟
p***c9497 小时前
PHP在电商中的电商系统
开发语言·php