4

是否有量化功能结果的内置方法agrep?例如在

agrep("test", c("tesr", "teqr", "toar"), max = 2, v=T)
[1] "tesr" "teqr"

tesr距离 仅 1 个字符排列test,而teqr为 2,toar为 3,因此未找到。显然,tesr比 具有更高的“概率” teqr。如何以排列数或百分比检索它?谢谢!

编辑:很抱歉没有把这个问题放在首位。我已经在运行一个两步程序:agrep获取我的列表,然后adist获取 N 个排列。adist速度较慢,运行时间是我数据集中的一个重要因素

4

2 回答 2

4

另一个选项使用adist()

s <- c("tesr", "teqr", "toar")
s[adist("test", s) < 3]

或使用stringdist

library(stringdist)
s[stringdist("test", s, method = "lv") < 3]

这使:

#[1] "tesr" "teqr"

基准

x <- rep(s, 10e5)
library(microbenchmark)
mbm <- microbenchmark(
  levenshteinDist = x[which(levenshteinDist("test", x) < 3)],
  adist = x[adist("test", x) < 3],
  stringdist = x[stringdist("test", x, method = "lv") < 3],
  times = 10
)

这使: 在此处输入图像描述

Unit: milliseconds
            expr       min        lq      mean    median        uq       max neval cld
 levenshteinDist  840.7897 1255.1183 1406.8887 1398.4502 1510.5398 1960.4730    10  b 
           adist 2760.7677 2905.5958 2993.9021 2986.1997 3038.7692 3472.7767    10   c
      stringdist  145.8252  155.3228  210.4206  174.5924  294.8686  355.1552    10 a  
于 2015-10-26T15:25:05.217 回答
3

Levenshtein 距离是从一个字符串到另一个字符串的编辑次数。'RecordLinkage' 包可能很有趣。它提供了下面的编辑距离计算,它应该agrep. 虽然它不会返回与agrep.

library(RecordLinkage)
ld <- levenshteinDist("test", c("tesr", "teqr", "toar"))
c("tesr", "teqr", "toar")[which(ld < 3)]
于 2015-10-26T15:07:09.990 回答