A generic implementation of the Levenshtein distance that allows arbitrarily weighting operations for different elements.
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);
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) ```