Replace String.levenshtein_distance/2 with String.jaro_distance/2

This commit is contained in:
Aleksei Magusev
2015-02-23 12:04:00 +01:00
parent a295b9c3a3
commit b962ae3e5f
3 changed files with 102 additions and 66 deletions
+25 -34
View File
@@ -517,39 +517,30 @@ defmodule StringTest do
assert_raise ArgumentError, fn -> String.to_float(three.()) end
end
test :levenshtein_distance do
# With empty strings
assert String.levenshtein_distance( "", "") == 0
assert String.levenshtein_distance( "a", "") == 1
assert String.levenshtein_distance( "", "a") == 1
assert String.levenshtein_distance("abc", "") == 3
assert String.levenshtein_distance( "", "abc") == 3
# With equal strings
assert String.levenshtein_distance( "a", "a") == 0
assert String.levenshtein_distance("abc", "abc") == 0
assert String.levenshtein_distance( "", "a") == 1
# Only with inserts
assert String.levenshtein_distance( "a", "ab") == 1
assert String.levenshtein_distance( "b", "ab") == 1
assert String.levenshtein_distance( "ac", "abc") == 1
assert String.levenshtein_distance("abcdefg", "xabxcdxxefxgx") == 6
# Only with deletions
assert String.levenshtein_distance( "a", "") == 1
assert String.levenshtein_distance( "ab", "a") == 1
assert String.levenshtein_distance( "ab", "b") == 1
assert String.levenshtein_distance("abc", "ac") == 1
assert String.levenshtein_distance("xabxcdxxefxgx", "abcdefg") == 6
# Only with substitutions
assert String.levenshtein_distance( "a", "b") == 1
assert String.levenshtein_distance( "ab", "ac") == 1
assert String.levenshtein_distance( "ac", "bc") == 1
assert String.levenshtein_distance("abc", "axc") == 1
assert String.levenshtein_distance("xabxcdxxefxgx", "1ab2cd34ef5g6") == 6
# With different operations
assert String.levenshtein_distance("example", "samples") == 3
assert String.levenshtein_distance("sturgeon", "urgently") == 6
assert String.levenshtein_distance("levenshtein", "frankenstein") == 6
assert String.levenshtein_distance("distance", "difference") == 5
assert String.levenshtein_distance("erlang was neat", "elixir is great") == 9
test :jaro_distance do
assert String.jaro_distance("same", "same") == 1.0
assert String.jaro_distance("any", "") == 0.0
assert String.jaro_distance("", "any") == 0.0
assert String.jaro_distance("martha", "marhta") == 0.9444444444444445
assert String.jaro_distance("martha", "marhha") == 0.888888888888889
assert String.jaro_distance("marhha", "martha") == 0.888888888888889
assert String.jaro_distance("dwayne", "duane") == 0.8222222222222223
assert String.jaro_distance("dixon", "dicksonx") == 0.7666666666666666
assert String.jaro_distance("xdicksonx", "dixon") == 0.7851851851851852
assert String.jaro_distance("shackleford", "shackelford") == 0.9696969696969697
assert String.jaro_distance("dunningham", "cunnigham") == 0.8962962962962964
assert String.jaro_distance("nichleson", "nichulson") == 0.9259259259259259
assert String.jaro_distance("jones", "johnson") == 0.7904761904761904
assert String.jaro_distance("massey", "massie") == 0.888888888888889
assert String.jaro_distance("abroms", "abrams") == 0.888888888888889
assert String.jaro_distance("hardin", "martinez") == 0.7222222222222222
assert String.jaro_distance("itman", "smith") == 0.4666666666666666
assert String.jaro_distance("jeraldine", "geraldine") == 0.9259259259259259
assert String.jaro_distance("michelle", "michael") == 0.8690476190476191
assert String.jaro_distance("julies", "julius") == 0.888888888888889
assert String.jaro_distance("tanya", "tonya") == 0.8666666666666667
assert String.jaro_distance("sean", "susan") == 0.7833333333333333
assert String.jaro_distance("jon", "john") == 0.9166666666666666
assert String.jaro_distance("jon", "jan") == 0.7777777777777777
end
end