6 个版本 (3 个破坏性更新)
0.5.0 | 2023 年 12 月 1 日 |
---|---|
0.4.0 | 2023 年 12 月 1 日 |
0.3.2 | 2023 年 11 月 29 日 |
0.1.0 | 2020 年 2 月 21 日 |
103 在 文本处理 中
每月下载量 5,501
在 4 个 crate 中使用 (直接使用 2 个)
1.5MB
19K SLoC
使用 Levenshtein 距离在 Rust 中实现快速模糊字符串匹配
描述
RapidFuzz 是一个通用的字符串匹配库,为 Rust、C++ 和 Python 提供了实现。
主要特性
- 多种字符串度量:提供各种字符串度量,以满足不同的使用场景。这些度量从基于编辑比较的 Levenshtein 距离到更细致的 Jaro-Winkler 相似度。
- 优化速度:库的设计注重性能。每个实现都经过精心设计,以确保最佳性能,使其适用于大数据集的分析。
- 易于使用:API 的设计易于使用,同时仍为优化留出空间。
安装
安装非常简单
$ cargo add rapidfuzz
使用
以下示例显示了使用 Levenshtein 距离的用法。其他度量可以在 fuzz 和 distance 模块中找到。
use rapidfuzz::distance::levenshtein;
// Perform a simple comparision using he levenshtein distance
assert_eq!(
3,
levenshtein::distance("kitten".chars(), "sitting".chars())
);
// If you are sure the input strings are ASCII only it's usually faster to operate on bytes
assert_eq!(
3,
levenshtein::distance("kitten".bytes(), "sitting".bytes())
);
// You can provide a score_cutoff value to filter out strings with distance that is worse than
// the score_cutoff
assert_eq!(
None,
levenshtein::distance_with_args(
"kitten".chars(),
"sitting".chars(),
&levenshtein::Args::default().score_cutoff(2)
)
);
// You can provide a score_hint to tell the implementation about the expected score.
// This can be used to select a more performant implementation internally, but might cause
// a slowdown in cases where the distance is actually worse than the score_hint
assert_eq!(
3,
levenshtein::distance_with_args(
"kitten".chars(),
"sitting".chars(),
&levenshtein::Args::default().score_hint(2)
)
);
// When comparing a single string to multiple strings you can use the
// provided `BatchComparators`. These can cache part of the calculation
// which can provide significant speedups
let scorer = levenshtein::BatchComparator::new("kitten".chars());
assert_eq!(3, scorer.distance("sitting".chars()));
assert_eq!(0, scorer.distance("kitten".chars()));
许可证
根据您的选择,许可协议为 Apache License, Version 2.0 或 MIT License。
除非您明确表示,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献,均应按照上述方式双许可,不附加任何额外条款或条件。