0

正しい場所名のベクトルに対して曖昧さを解消しようとしている場所のベクトルがあります。この例では、明確な場所を 2 つだけ使用しています。

agrepl('Au', c("Austin, TX", "Houston, TX"), 
max.distance =  .000000001, 
ignore.case = T, fixed = T)
[1] TRUE TRUE

ヘルプページにはmax.distance

試合で許容される最大距離。整数として、またはパターン長に最大変換コストを掛けた分数として表されます。

レーベンシュタイン距離の数学的な意味についてはよくわかりません。私の理解では、距離が小さいほど、明確化された文字列のベクトルとの不一致に対する許容度が厳しくなります。

それで、2つ取得するように調整しますFALSEか?基本的には、TRUE次のように1文字の違いがある場合にのみ使用したいと思います:

agrepl('Austn, TX', "Austin, TX", 
max.distance =  .000000001, ignore.case = T, fixed = T)
[1] TRUE
4

1 に答える 1

1

あなたが抱えている問題は、ここで実験を始めたときに私が直面した問題と似ている可能性があります。最初の引数は、fixed=TRUE の場合の正規表現パターンであるため、完全な文字列に制限されていない場合、小さなパターンは非常に許容されます。ヘルプページには、その問題に関する「メモ」もあります。

説明を不注意に読んだ人がバグレポートを提出したこともあるため、これは x の各要素の部分文字列に一致し (grep と同様)、要素全体では一致しないことに注意してください。

正規表現パターンを使用して、pattern文字列を「^」と「$」で囲んでこれを行います。 とは異なりadistagreplには部分的なパラメーターがないためです。

> 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

したがって、これらのフランカーで paste0 が必要です。

> 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場合があり、分数を減らしたい場合があります。

于 2016-06-01T17:07:01.130 に答える