是否有内置的方法来量化agrep
函数的结果?例如。在
agrep("test", c("tesr", "teqr", "toar"), max = 2, v=T)
[1] "tesr" "teqr"
tesr
距离test
只有1个字符排列,而teqr
为2,toar
为3,因此找不到。显然,tesr
的“概率”高于teqr
。如何以排列数或百分比来检索?
谢谢!
编辑:抱歉没有把这个问题置于首位。我已经运行了两个步骤:agrep
获取我的列表,然后adist
获得N个排列。 adist
速度较慢,运行时间是我数据集中的一个重要因素
答案 0 :(得分: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
答案 1 :(得分:3)
Levenshtein距离是从一个字符串到另一个字符串的编辑数。可能会对“RecordLinkage”包感兴趣。它提供下面的编辑距离计算,它应该执行on par with agrep
。虽然它不会返回与Rscript -e "require(knitr)" -e "knitr::spin('script.R')" -e 'knitr::opts_chunk$set(fig.path="./figs")'
相同的结果。
agrep