You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
matthieugomez 7b9568d028 Update 1 week ago
.github/workflows Update TagBot.yml 2 months ago
benchmark clean tests 2 months ago
src simplify pairwise 3 weeks ago
test clean tests 2 months ago
.gitignore clean tests 2 months ago
.travis.yml added doc strings and upped the dependency and CI to Julia 1.3 2 months ago first commit 5 years ago
Project.toml Update Project.toml 2 months ago Update 1 week ago

Build Status Coverage Status


The package is registered in the General registry and so can be installed at the REPL with ] add StringDistances.

Supported Distances

Distances are defined for AbstractStrings, and any iterator that define length() (e.g. graphemes, AbstractVector...)

The available distances are:

The package also defines Distance "modifiers" that can be applied to any distance.

  • Partial returns the minimum of the distance between the shorter string and substrings of the longer string.
  • TokenSort adjusts for differences in word orders by returning the distance of the two strings, after re-ordering words alphabetically.
  • TokenSet adjusts for differences in word orders and word numbers by returning the distance between the intersection of two strings with each string.
  • TokenMax normalizes the distance, and combine the Partial, TokenSort and TokenSet modifiers, with penalty terms depending on string lengths. This is a good distance to match strings composed of multiple words, like addresses. TokenMax(Levenshtein()) corresponds to the distance defined in fuzzywuzzy

Basic Use


You can always compute a certain distance between two strings using the following syntax:

evaluate(dist, s1, s2)
dist(s1, s2)

For instance, with the Levenshtein distance,

evaluate(Levenshtein(), "martha", "marhta")
Levenshtein()("martha", "marhta")


pairwise returns the matrix of distance between two AbstractVectors of AbstractStrings

pairwise(Jaccard(3), ["martha", "kitten"], ["marhta", "sitting"])

It is particularly fast for QGram-distances (each element is processed once).

similarly scores

  • The function compare returns the similarity score, defined as 1 minus the normalized distance between two strings. It always returns a Float64. A value of 0.0 means completely different and a value of 1.0 means completely similar.

    Levenshtein()("martha", "martha")
    #> 0.0
    compare("martha", "martha", Levenshtein())
    #> 1.0
  • findnearest returns the value and index of the element in itr with the highest similarity score with s. Its syntax is:

    findnearest(s, itr, dist::StringDistance)
  • findall returns the indices of all elements in itr with a similarity score with s higher than a minimum value (default to 0.8). Its syntax is:

    findall(s, itr, dist::StringDistance; min_score = 0.8)

The functions findnearest and findall are particularly optimized for Levenshtein, DamerauLevenshtein distances (as well as their modifications via Partial, TokenSort, TokenSet, or TokenMax).