A versatile and flexible fuzzy matcher in rust based on Levenshtein Distance
cargo add ruzzy
This crate performs fuzzy matching based on the Levenshtein distance a.k.a the edit distance. It means that the less string edits it take to transform string A
to string B
, the more similar A
and B
.
The only function that this crate exposes is:
fn fuzzy_match<'a, Value: 'a>(needle: &'a String, haystack: &'a Vec<(String, Value)>, config: FuzzyConfig) -> Option<&'a Value>;
where:
needle
is the string to be matched.haystack
is the set of key-value and the key part is what is being matched againstneedle
config
allows you to tune the matching process.
This function returns an Option
that may wraps the corresponding value of the most similar key.
FuzzyConfig
allows you to tune the matching process. Currently, these configurations are supported:
threshold
: If the edit distance is higher than thisthreshold
, the key in thehaystack
is unacceptable and is not considered a match.insertion_penalty
: The cost of a character insertion in theneedle
(by default:1
).deletion_penalty
: The cost of a character deletion in theneedle
(by default:1
).substitution_penalty
: The cost of a character substition (by default:2
).