Go to file
Robert Feldt 9d28c36ed5 added doc strings and upped the dependency and CI to Julia 1.3 2020-10-24 21:01:39 +02:00
.github/workflows Install TagBot as a GitHub Action 2020-02-09 14:10:27 -05:00
src added doc strings and upped the dependency and CI to Julia 1.3 2020-10-24 21:01:39 +02:00
test name change to QGramSortedVector, code and tests for handling unicode strings 2020-10-24 14:32:19 +02:00
.gitignore slower but simpler iteration 2020-02-18 08:18:45 -05:00
.travis.yml added doc strings and upped the dependency and CI to Julia 1.3 2020-10-24 21:01:39 +02:00
LICENSE.md first commit 2015-10-22 12:12:44 -04:00
Project.toml added doc strings and upped the dependency and CI to Julia 1.3 2020-10-24 21:01:39 +02:00
README.md up 2020-09-28 14:57:42 -07:00

README.md

Build Status Coverage 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:

  • Edit Distances
  • Q-gram distances compare the set of all substrings of length q in each string.
  • Distance "modifiers" that can be applied to any distance:
    • Partial returns the minimum of the normalized distance between the shorter string and substrings of the longer string.
    • TokenSort adjusts for differences in word orders by returning the normalized distance of the two strings, after re-ordering words alphabetically.
    • TokenSet adjusts for differences in word orders and word numbers by returning the normalized distance between the intersection of two strings with each string.
    • TokenMax combines the normalized distance, 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
    • Winkler diminishes the normalized distance of strings with common prefixes. The Winkler adjustment was originally defined for the Jaro similarity score but it can be defined for any string distance.

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

Compare

The function compare is defined as 1 minus the normalized distance between two strings. It always returns a Float64 between 0 and 1: a value of 0 means completely different and a value of 1 means completely similar.

evaluate(Levenshtein(),  "martha", "martha")
#> 0
compare("martha", "martha", Levenshtein())
#> 1.0

Find

  • findnearest returns the value and index of the element in itr with the lowest distance with s. Its syntax is:

    findnearest(s, itr, dist::StringDistance; min_score = 0.0)
    
  • 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 and DamerauLevenshtein distances (as well as their modifications via Partial, TokenSort, TokenSet, or TokenMax).

References