#levenshtein #weighted #distance #generic #operations #string #weighting

weighted_levenshtein

允许对操作进行任意加权的Levenshtein距离的泛型实现

2个不稳定版本

0.2.0 2020年10月3日
0.1.0 2020年9月20日

#2407 in 算法

MIT 许可证

15KB
299

README

Docs

这是一个允许对不同元素的操作进行任意加权的Levenshtein距离的泛型实现。

泛型

此crate可以对任何类型的切片进行操作。它可以

  • 计算两个字符串之间的字符距离
assert_eq!(distance("abc", "aaxcc"), 3);
  • 计算两个字符串之间的单词距离
assert_eq!(
   distance(
      "The quick brown fox".split (' ').collect::<Vec<_>>(),
      "The very quick brown cat".split (' ').collect()),
   2);
  • 或者计算任意序列之间的距离
assert_eq!(distance(vec![1, 2, 3], vec![0, 1, 3, 3, 4]), 3);

加权

此crate允许为每个符号上的每个操作定义自定义权重。可以通过实现 EditWeight trait 为自定义类型指定这些权重。

例如

enum MyType {
  A,
  B,
}

impl EditWeight for MyType {
  fn add_cost(&self) -> usize {
    match *self {
      MyType::A => 1,
      MyType::B => 2,
    }
  }
  fn rm_cost(&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)

无运行时依赖