#levenshtein #hamming #jaro #text

eddie

快速且经过充分测试的编辑距离/字符串相似度度量实现:Levenshtein、Damerau-Levenshtein、Hamming、Jaro 和 Jaro-Winkler

13 个不稳定版本 (3 个破坏性更新)

0.4.2 2020 年 1 月 18 日
0.4.1 2019 年 12 月 12 日
0.3.2 2019 年 12 月 5 日
0.2.5 2019 年 11 月 25 日
0.1.0 2019 年 11 月 22 日

#602 in 算法

Download history • Rust 包仓库 954/week @ 2024-03-06 • Rust 包仓库 834/week @ 2024-03-13 • Rust 包仓库 842/week @ 2024-03-20 • Rust 包仓库 670/week @ 2024-03-27 • Rust 包仓库 205/week @ 2024-04-03 • Rust 包仓库 126/week @ 2024-04-10 • Rust 包仓库 118/week @ 2024-04-17 • Rust 包仓库 100/week @ 2024-04-24 • Rust 包仓库 105/week @ 2024-05-01 • Rust 包仓库 87/week @ 2024-05-08 • Rust 包仓库 63/week @ 2024-05-15 • Rust 包仓库 63/week @ 2024-05-22 • Rust 包仓库 62/week @ 2024-05-29 • Rust 包仓库 56/week @ 2024-06-05 • Rust 包仓库 54/week @ 2024-06-12 • Rust 包仓库 32/week @ 2024-06-19 • Rust 包仓库

每月 214 次下载
用于 8 个 crate (7 个直接使用)

MIT 许可证

130KB
2.5K SLoC

Eddie

快速且经过充分测试的编辑距离/字符串相似度度量实现

  • Levenshtein,
  • Damerau-Levenshtein,
  • Hamming,
  • Jaro,
  • Jaro-Winkler.

文档

查看 API 参考

安装

将以下内容添加到您的 Cargo.toml

[dependencies]
eddie = "0.4"

基本用法

Levenshtein

use eddie::Levenshtein;
let lev = Levenshtein::new();
let dist = lev.distance("martha", "marhta");
assert_eq!(dist, 2);

Damerau-Levenshtein

use eddie::DamerauLevenshtein;
let damlev = DamerauLevenshtein::new();
let dist = damlev.distance("martha", "marhta");
assert_eq!(dist, 1);

Hamming

use eddie::Hamming;
let hamming = Hamming::new();
let dist = hamming.distance("martha", "marhta");
assert_eq!(dist, Some(2));

Jaro

use eddie::Jaro;
let jaro = Jaro::new();
let sim = jaro.similarity("martha", "marhta");
assert!((sim - 0.94).abs() < 0.01);

Jaro-Winkler

use eddie::JaroWinkler;
let jarwin = JaroWinkler::new();
let sim = jarwin.similarity("martha", "marhta");
assert!((sim - 0.96).abs() < 0.01);

字符串与切片

该 crate 提供了两个模块,包含两套实现

  • eddie::str 用于比较 UTF-8 编码的 &str&String 值。实现已重新导出在根模块中。
  • eddie::slice 用于比较泛型切片 &[T]。该模块中的实现比 eddie::str 中的实现要快得多,但会对 UTF-8 和其他可变宽度字符编码产生不正确的结果。

使用示例

use eddie::slice::Levenshtein;

let lev = Levenshtein::new();
let dist = lev.distance(&[1, 2, 3], &[1, 3]);
assert_eq!(dist, 1);

互补度量

主要的度量方法通过反转和/或相对版本进行补充。在整个 crate 中的命名约定如下

  • distance — 将一个字符串转换为另一个字符串所需的编辑次数;
  • rel_dist — 两个字符串之间的距离,相对于字符串长度(相似度的反转);
  • similarity — 两个字符串之间的相似度(相对距离的反转)。

性能

目前,Eddie 在具有 Unicode 支持的 crates.io 中的替代方案中具有最快的实现。

例如,当比较常见的英语单词时,除了 Hamming 之外,任何给定算法都可以期望至少 1.5-2 倍的速度提升。

有关详细的测量表,请参阅 基准 页面。

无运行时依赖项