README

Docs

A generic implementation of the Levenshtein distance that allows arbitrarily weighting operations for different elements.

Generic

This crate can work on slices of any kind. It can:

rust assert_eq!(distance("abc", "aaxcc"), 3);

rust assert_eq!( distance( "The quick brown fox".split (' ').collect::<Vec<_>>(), "The very quick brown cat".split (' ').collect()), 2);

rust assert_eq!(distance(vec![1, 2, 3], vec![0, 1, 3, 3, 4]), 3);

Weighting

This crate allows defining custom weights for each operation on each symbol. These weights can be specified for custom types by implementing the EditWeight trait.

For example:

```rust enum MyType { A, B, }

impl EditWeight for MyType { fn addcost(&self) -> usize { match *self { MyType::A => 1, MyType::B => 2, } } fn rmcost(&self) -> usize { match *self { MyType::A => 1, MyType::B => 2, } } fn sub_cost(&self, other: &Self) -> usize { if self == other { 0 } else { 3 } } }

assert_eq!(distance(vec![MyType::A], vec![MyType::B, MyType::B]), 5) ```