我有一个位置向量,我试图消除正确位置名称向量的歧义。 对于这个例子,我只使用了两个消除歧义的位置:
agrepl('Au', c("Austin, TX", "Houston, TX"),
max.distance = .000000001,
ignore.case = T, fixed = T)
[1] TRUE TRUE
帮助页面显示max.distance
是
匹配所允许的最大距离。表示为整数,或表示模式长度的一部分乘以最大转换成本
我不确定Levensthein距离的数学意义;我的理解是距离越小,对我的歧义字符串向量的不匹配的容忍度就越严格。
所以我会调整它以检索两个FALSE
?基本上我只想在1个字符的差异时才有TRUE
,如:
agrepl('Austn, TX', "Austin, TX",
max.distance = .000000001, ignore.case = T, fixed = T)
[1] TRUE
答案 0 :(得分:1)
您遇到的问题可能类似于我在这里开始实验时遇到的问题。当fixed = TRUE时,第一个参数是正则表达式模式,因此如果不限制为完整字符串,则小模式是非常宽松的。帮助页面甚至有关于该问题的“注意”:
由于不经意地阅读描述的人甚至提交了错误报告,请注意这与x的每个元素的子串匹配(就像grep一样)而不是整个元素。
使用正则表达式模式,您可以将pattern
字符串放在“^”和“$”旁边,因为与adist
不同,agrepl
没有部分参数:
> agrepl('^Au$', "Austin, TX",
+ max.distance = c(insertions=.15), ignore.case = T, fixed=FALSE)
[1] FALSE
> agrepl('^Austn, TX$', "Austin, TX",
+ max.distance = c(insertions=.15), ignore.case = T, fixed=FALSE)
[1] TRUE
> agrepl('^Austn, T$', "Austin, TX",
+ max.distance = c(insertions=.15), ignore.case = T, fixed=FALSE)
[1] FALSE
所以你需要使用这些flankers来粘贴0:
> agrepl( paste0('^', 'Austn, Tx', '$'), "Austin, TX",
+ max.distance = c(insertions=.15), ignore.case = T, fixed=FALSE)
[1] TRUE
> agrepl( paste0('^', 'Au', '$'), "Austin, TX",
+ max.distance = c(insertions=.15), ignore.case = T, fixed=FALSE)
[1] FALSE
最好使用all
而不仅仅是insertions
,您可能希望降低分数。