StringDistances.jl

String Distances in Julia
Popularity
85 Stars
Updated Last
5 Months Ago
Started In
October 2015

Build status

Installation

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

evaluate

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

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).

References

Required Packages