diff --git a/src/normalized.jl b/src/normalized.jl index 9454311..623a3fc 100644 --- a/src/normalized.jl +++ b/src/normalized.jl @@ -19,8 +19,8 @@ function evaluate{T <: Union{Hamming, Levenshtein, DamerauLevenshtein}}( return distance / len2 end -function evaluate(normalized::Normalized{QGram}, s1::AbstractString, s2::AbstractString, +function evaluate{T <: QGram}(normalized::Normalized{T}, s1::AbstractString, s2::AbstractString, len1::Integer, len2::Integer) distance = evaluate(normalized.dist, s1, s2, len1, len2) - return distance / (len1 + len2 - 2 * normalized.dist.q - 2) + return distance / (max(0, len1 - normalized.dist.q + 1) + max(0, len2 - normalized.dist.q + 1)) end \ No newline at end of file diff --git a/test/distances.jl b/test/distances.jl index 1cd78ea..3d7a2d8 100644 --- a/test/distances.jl +++ b/test/distances.jl @@ -51,10 +51,16 @@ using StringDistances, Base.Test + + @test evaluate(QGram(1), "", "abc") == 3 @test evaluate(QGram(1), "abc", "cba") == 0 @test evaluate(QGram(1), "abc", "ccc") == 4 +@test_approx_eq_eps evaluate(Normalized(QGram(1)), "", "abc") 1.0 1e-4 +@test_approx_eq_eps evaluate(Normalized(QGram(1)), "abc", "cba") 0.0 1e-4 +@test_approx_eq_eps evaluate(Normalized(QGram(1)), "abc", "ccc") 2/3 1e-4 + @test_approx_eq_eps evaluate(Jaccard(1), "", "abc") 1.0 1e-4 @test_approx_eq_eps evaluate(Jaccard(1), "abc", "ccc") .666666 1e-4