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
相关推荐
LDR00611 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术11 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园11 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob11 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享11 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.11 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..11 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽11 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下11 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗11111 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言