The colors serve the purpose of giving a categorization of the alternation: typo, conventional variation, unconventional variation and totallly different.

library(stringdist)

Levenshtein: Minimal number of insertions, deletions and replacements needed for transforming string a into string b.

## Levenshtein
stringdist("gato", "pato", method="lv")
[1] 1
stringdist("hola", "trola", method="lv")
[1] 2

Longest Common Substring distance: Minimum number of symbols that have to be removed in both strings until resulting substrings are identical.

## LCS (caracters que no son LCS)
stringdist("gato", "pato", method="lcs")
[1] 2
stringdist("hola", "trola", method="lcs")
[1] 3

Coseno: 1 minus the cosine similarity of both N-gram vectors.

cos_sim <- function(a, b) {
    sum(a*b) / (sqrt(sum(a*a)) * sqrt(sum(b*b)))
}
qg <- qgrams("gato", "pato", q=1)
1 - cos_sim(qg[1,], qg[2,])
[1] 0.25
## Coseno
stringdist("gato", "pato", method="cosine")
[1] 0.25
stringdist("hola", "trola", method="cosine")
[1] 0.329

Jaccard: 1 minues the quotient of shared N-grams and all observed N-grams.

qg <- qgrams('gato', 'pato', q=2)
qg
   ga to pa at
V1  1  1  0  1
V2  0  1  1  1
## Jaccard
stringdist("gato", "pato", method="jaccard", q=2)
[1] 0.5
stringdist("hola", "trola", method="jaccard")
[1] 0.5

Jaro calculates the number m of common characters that are within half the length of the longer string and the number of transpositions t. Jaro Winkler improves upon the Jaro algorithm by applying ideas based on empirical studies – Fewer errors occur at the beginning of strings. This distance is a formula of 5 parameters determined by the two compared strings (A,B,m,t,l) and p chosen from [0, 0.25].

Jaro-winkler dist = Jarodist+l(1−Jarodist) l is the length of common prefix at the start of the string up to a maximum of 4 characters

## Jaro Winkler
stringdist("gato", "pato", method="jw")
[1] 0.167
stringdist("hola", "trola", method="jw")
[1] 0.217
## Testar diferencias
lapply(c("lv", "lcs", "cosine", "jaccard", "jw"),
       function(x) stringdist("gato", "pato", x))
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 0.25

[[4]]
[1] 0.4

[[5]]
[1] 0.167
LS0tIAp0aXRsZTogIkRpc3RhbmNpYSBlbnRyZSBjYWRlbmFzIGRlIHRleHRvIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiAlZCwgJVknKWAiCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0UsIGNhY2hlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLnBhdGggPSAnLi9hc3NldHMvJykKYGBgCgpUaGUgY29sb3JzIHNlcnZlIHRoZSBwdXJwb3NlIG9mIGdpdmluZyBhIGNhdGVnb3JpemF0aW9uIG9mIHRoZSBhbHRlcm5hdGlvbjoKdHlwbywgY29udmVudGlvbmFsIHZhcmlhdGlvbiwgdW5jb252ZW50aW9uYWwgdmFyaWF0aW9uIGFuZCB0b3RhbGxseSBkaWZmZXJlbnQuCgpgYGB7cn0KbGlicmFyeShzdHJpbmdkaXN0KQpgYGAKCkxldmVuc2h0ZWluOiBNaW5pbWFsIG51bWJlciBvZiBpbnNlcnRpb25zLCBkZWxldGlvbnMgYW5kIHJlcGxhY2VtZW50cyBuZWVkZWQgZm9yCnRyYW5zZm9ybWluZyBzdHJpbmcgYSBpbnRvIHN0cmluZyBiLgoKYGBge3J9CiMjIExldmVuc2h0ZWluCnN0cmluZ2Rpc3QoImdhdG8iLCAicGF0byIsIG1ldGhvZD0ibHYiKQpzdHJpbmdkaXN0KCJob2xhIiwgInRyb2xhIiwgbWV0aG9kPSJsdiIpCmBgYAoKTG9uZ2VzdCBDb21tb24gU3Vic3RyaW5nIGRpc3RhbmNlOiBNaW5pbXVtIG51bWJlciBvZiBzeW1ib2xzIHRoYXQgaGF2ZSB0byBiZSByZW1vdmVkIGluIGJvdGggc3RyaW5ncyB1bnRpbCByZXN1bHRpbmcgc3Vic3RyaW5ncyBhcmUgaWRlbnRpY2FsLgoKYGBge3J9CiMjIExDUyAoY2FyYWN0ZXJzIHF1ZSBubyBzb24gTENTKQpzdHJpbmdkaXN0KCJnYXRvIiwgInBhdG8iLCBtZXRob2Q9ImxjcyIpCnN0cmluZ2Rpc3QoImhvbGEiLCAidHJvbGEiLCBtZXRob2Q9ImxjcyIpCmBgYAoKQ29zZW5vOiAxIG1pbnVzIHRoZSBjb3NpbmUgc2ltaWxhcml0eSBvZiBib3RoIE4tZ3JhbSB2ZWN0b3JzLgoKYGBge3J9CmNvc19zaW0gPC0gZnVuY3Rpb24oYSwgYikgewogICAgc3VtKGEqYikgLyAoc3FydChzdW0oYSphKSkgKiBzcXJ0KHN1bShiKmIpKSkKfQpxZyA8LSBxZ3JhbXMoImdhdG8iLCAicGF0byIsIHE9MSkKMSAtIGNvc19zaW0ocWdbMSxdLCBxZ1syLF0pCmBgYAoKYGBge3J9CiMjIENvc2VubwpzdHJpbmdkaXN0KCJnYXRvIiwgInBhdG8iLCBtZXRob2Q9ImNvc2luZSIpCnN0cmluZ2Rpc3QoImhvbGEiLCAidHJvbGEiLCBtZXRob2Q9ImNvc2luZSIpCmBgYAoKSmFjY2FyZDogMSBtaW51ZXMgdGhlIHF1b3RpZW50IG9mIHNoYXJlZCBOLWdyYW1zIGFuZCBhbGwgb2JzZXJ2ZWQgTi1ncmFtcy4KIApgYGB7cn0KcWcgPC0gcWdyYW1zKCdnYXRvJywgJ3BhdG8nLCBxPTIpCnFnCmBgYAogCmBgYHtyfQojIyBKYWNjYXJkCnN0cmluZ2Rpc3QoImdhdG8iLCAicGF0byIsIG1ldGhvZD0iamFjY2FyZCIsIHE9MikKc3RyaW5nZGlzdCgiaG9sYSIsICJ0cm9sYSIsIG1ldGhvZD0iamFjY2FyZCIpCmBgYAoKSmFybyBjYWxjdWxhdGVzIHRoZSBudW1iZXIgbSBvZiBjb21tb24gY2hhcmFjdGVycyB0aGF0IGFyZSB3aXRoaW4gaGFsZiB0aGUKbGVuZ3RoIG9mIHRoZSBsb25nZXIgc3RyaW5nIGFuZCB0aGUgbnVtYmVyIG9mIHRyYW5zcG9zaXRpb25zIHQuIEphcm8gV2lua2xlcgppbXByb3ZlcyB1cG9uIHRoZSBKYXJvIGFsZ29yaXRobSBieSBhcHBseWluZyBpZGVhcyBiYXNlZCBvbiBlbXBpcmljYWwgc3R1ZGllcyDigJMKRmV3ZXIgZXJyb3JzIG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3RyaW5ncy4gVGhpcyBkaXN0YW5jZSBpcyBhIGZvcm11bGEgb2YgNQpwYXJhbWV0ZXJzIGRldGVybWluZWQgYnkgdGhlIHR3byBjb21wYXJlZCBzdHJpbmdzIChBLEIsbSx0LGwpIGFuZCBwIGNob3NlbiBmcm9tClswLCAwLjI1XS4KCkphcm8td2lua2xlciBkaXN0ID0gSmFyb2Rpc3QrbCgx4oiSSmFyb2Rpc3QpCmwgaXMgdGhlIGxlbmd0aCBvZiBjb21tb24gcHJlZml4IGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHVwIHRvIGEgbWF4aW11bSBvZiA0CmNoYXJhY3RlcnMKCmBgYHtyfQojIyBKYXJvIFdpbmtsZXIKc3RyaW5nZGlzdCgiZ2F0byIsICJwYXRvIiwgbWV0aG9kPSJqdyIpCnN0cmluZ2Rpc3QoImhvbGEiLCAidHJvbGEiLCBtZXRob2Q9Imp3IikKYGBgCgpgYGB7cn0KIyMgVGVzdGFyIGRpZmVyZW5jaWFzCmxhcHBseShjKCJsdiIsICJsY3MiLCAiY29zaW5lIiwgImphY2NhcmQiLCAianciKSwKICAgICAgIGZ1bmN0aW9uKHgpIHN0cmluZ2Rpc3QoImdhdG8iLCAicGF0byIsIHgpKQpgYGAKCSAgICAgICAK