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文本处理

Download history 161/week @ 2024-03-14 526/week @ 2024-03-21 682/week @ 2024-03-28 367/week @ 2024-04-04 312/week @ 2024-04-11 604/week @ 2024-04-18 761/week @ 2024-04-25 666/week @ 2024-05-02 462/week @ 2024-05-09 795/week @ 2024-05-16 823/week @ 2024-05-23 707/week @ 2024-05-30 1025/week @ 2024-06-06 1762/week @ 2024-06-13 1731/week @ 2024-06-20 840/week @ 2024-06-27

每月下载量 5,501
4 个 crate 中使用 (直接使用 2 个)

MIT 许可证

1.5MB
19K SLoC

RapidFuzz

使用 Levenshtein 距离在 Rust 中实现快速模糊字符串匹配

Continous Integration Gitter chat Documentation license

描述安装使用许可证


描述

RapidFuzz 是一个通用的字符串匹配库,为 Rust、C++ 和 Python 提供了实现。

主要特性

  • 多种字符串度量:提供各种字符串度量,以满足不同的使用场景。这些度量从基于编辑比较的 Levenshtein 距离到更细致的 Jaro-Winkler 相似度。
  • 优化速度:库的设计注重性能。每个实现都经过精心设计,以确保最佳性能,使其适用于大数据集的分析。
  • 易于使用:API 的设计易于使用,同时仍为优化留出空间。

安装

安装非常简单

$ cargo add rapidfuzz

使用

以下示例显示了使用 Levenshtein 距离的用法。其他度量可以在 fuzzdistance 模块中找到。

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.0MIT License

除非您明确表示,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献,均应按照上述方式双许可,不附加任何额外条款或条件。

无运行时依赖项