2

我很难理解agrep()函数的结果。我不明白我在功能描述中遗漏了什么。 agrep()用于模糊匹配,我想用它来纠正一些拼写错误。我只想允许最多 2 次插入/删除/替换。

这是我的代码仅作为示例:

check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY")
agrep("73SAINTGERVAIS",check,ignore.case=TRUE,max.distance=2,value=TRUE)

在这里,我期望这个请求没有答案,因为我无法转换"73SAINTGERVAIS"为最多 2 次插入"73SAINTGERMAINLACHAMBOTTE"/"73CHAMBERY"删除/替换。但是,结果是:

[1] "73SAINTGERMAINLACHAMBOTTE"

这是否意味着插入/删除/替换的概念不是基于字符的(我的意思是字符串"MAINLACHALBOTTE"被视为 1 次插入)?

4

1 回答 1

3

那是因为它也在进行部分匹配。例如,'73SAINTGERVAIS'距离 substring 有两个距离'73SAINTGERMAIN'

您可能想尝试adist这样:

check=c("73SAINTGERMAINLACHAMBOTTE","73CHAMBERY", "73SAINTGERMAIN")
adist("73SAINTGERVAIS",check) <= 2
      [,1]  [,2] [,3]
[1,] FALSE FALSE TRUE

如果您希望匹配输入字符串的向量作为输出,您可以进一步执行以下操作:

check[as.logical(adist("73SAINTGERVAIS",check) <= 2)]
于 2016-01-07T22:06:14.787 回答