defmodule Strsim do @moduledoc """ Documentation for `Strsim`. """ @doc """ Like optimal string alignment, but substrings can be edited an unlimited number of times, and the triangle inequality holds. iex> Strsim.damerau_levenshtein("ab", "bca") {:ok, 2} """ defdelegate damerau_levenshtein(a, b), to: Strsim.Nif @doc """ Calculates the number of positions in the two strings where the characters differ. Returns an error if the strings have different lengths. iex> Strsim.hamming("hamming", "hammers") {:ok, 3} iex> Strsim.hamming("hamming", "ham") {:error, :different_length_args} """ defdelegate hamming(a, b), to: Strsim.Nif @doc """ Calculates the Jaro similarity between two strings. The returned value is between 0.0 and 1.0 (higher value means more similar). iex> Strsim.jaro("Friedrich Nietzsche", "Jean-Paul Sartre") {:ok, 0.39188596491228067} """ defdelegate jaro(a, b), to: Strsim.Nif @doc """ Like Jaro but gives a boost to strings that have a common prefix. iex> Strsim.jaro_winkler("cheeseburger", "cheese fries") {:ok, 0.9111111111111111} """ defdelegate jaro_winkler(a, b), to: Strsim.Nif @doc """ Calculates the minimum number of insertions, deletions, and substitutions required to change one string into the other. iex> Strsim.levenshtein("kitten", "sitting") {:ok, 3} """ defdelegate levenshtein(a, b), to: Strsim.Nif @doc """ Calculates a normalized score of the Damerau–Levenshtein algorithm between 0.0 and 1.0 (inclusive), where 1.0 means the strings are the same. iex> Strsim.normalized_damerau_levenshtein("levenshtein", "löwenbräu") {:ok, 0.2727272727272727} """ defdelegate normalized_damerau_levenshtein(a, b), to: Strsim.Nif @doc """ Calculates a normalized score of the Levenshtein algorithm between 0.0 and 1.0 (inclusive), where 1.0 means the strings are the same. iex> Strsim.normalized_levenshtein("kitten", "sitting") {:ok, 0.2727272727272727} """ defdelegate normalized_levenshtein(a, b), to: Strsim.Nif @doc """ Like Levenshtein but allows for adjacent transpositions. Each substring can only be edited once. iex> Strsim.osa_distance("ab", "bca") {:ok, 3} """ defdelegate osa_distance(a, b), to: Strsim.Nif @doc """ Calculates a Sørensen-Dice similarity distance using bigrams. iex> Strsim.sorensen_dice("ferris", "feris") {:ok, 0.8888888888888888} """ defdelegate sorensen_dice(a, b), to: Strsim.Nif end