首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >agrep:仅返回最佳匹配(Es)

agrep:仅返回最佳匹配(Es)
EN

Stack Overflow用户
提问于 2011-04-20 03:53:20
回答 2查看 18.1K关注 0票数 24

我在R中使用了'agrep‘函数,它返回一个匹配向量。我想要一个类似于agrep的函数,它只返回最佳匹配,或者如果有平局,则返回最佳匹配。目前,我正在使用包'cba‘中的'sdist()’函数对结果向量的每个元素执行此操作,但这似乎非常多余。

/edit:这是我目前使用的函数。我想加快速度,因为计算两次距离似乎是多余的。

代码语言:javascript
复制
library(cba)
word <- 'test'
words <- c('Teest','teeeest','New York City','yeast','text','Test')
ClosestMatch <- function(string,StringVector) {
  matches <- agrep(string,StringVector,value=TRUE)
  distance <- sdists(string,matches,method = "ow",weight = c(1, 0, 2))
  matches <- data.frame(matches,as.numeric(distance))
  matches <- subset(matches,distance==min(distance))
  as.character(matches$matches)
}

ClosestMatch(word,words)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-23 23:14:41

RecordLinkage包已从CRAN中删除,请改用stringdist:

代码语言:javascript
复制
library(stringdist)

ClosestMatch2 = function(string, stringVector){

  stringVector[amatch(string, stringVector, maxDist=Inf)]

}
票数 14
EN

Stack Overflow用户

发布于 2011-04-20 05:55:37

agrep包使用Levenshtein距离来匹配字符串。RecordLinkage包有一个计算Levenshtein距离的C函数,可以直接用来加快计算速度。下面是一个修改过的ClosestMatch函数,它的速度提高了10倍

代码语言:javascript
复制
library(RecordLinkage)

ClosestMatch2 = function(string, stringVector){

  distance = levenshteinSim(string, stringVector);
  stringVector[distance == max(distance)]

}
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5721883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档