如何通过Levenshtein编辑距离获取字符串的具体修改操作
获取Levenshtein编辑距离的具体修改内容
你可以通过R内置函数或stringdist包的辅助工具获取具体编辑操作细节,以下是两种实现方法:
方法1:用内置adist函数解析修改位置
adist不仅能计算编辑距离,还会返回编辑操作类型的标记(匹配、替换、插入、删除),通过解析标记可定位具体修改内容:
string1 <- 'hello' string2 <- 'hellp' # 计算编辑距离并获取操作细节 edit_info <- adist(string1, string2, counts = TRUE) # 查看编辑距离 edit_info #> [,1] #> [1,] 1 # 获取操作标记字符串(M=匹配,R=替换,I=插入,D=删除) trafo_str <- attr(edit_info, "trafos")[1, 1] trafo_str #> [1] "MMMMR" # 解析替换位置并输出具体修改内容 replace_pos <- which(strsplit(trafo_str, "")[[1]] == "R") cat(sprintf("具体修改:将string1第%s位的'%s'替换为string2第%s位的'%s'\n", replace_pos, substr(string1, replace_pos, replace_pos), replace_pos, substr(string2, replace_pos, replace_pos))) #> 具体修改:将string1第5位的'o'替换为string2第5位的'p'
方法2:用stringdist的seq_align可视化对齐差异
如果需要直观对比,seq_align可生成两个字符串的对齐结果,直接展示差异位置:
library(stringdist) # 生成对齐后的字符串 aligned <- seq_align(string1, string2, method = "lv") print(aligned) #> [1] "hello" #> [2] "hellp"
对比这两个对齐后的字符串,可直接看出第5位的字符差异。
内容的提问来源于stack exchange,提问作者joshbrows
相关产品推荐
相关产品推荐

