2个版本

0.1.1 2021年7月14日
0.1.0 2021年7月14日

#6#模糊字符串

Download history 515/week @ 2024-04-23 465/week @ 2024-04-30 456/week @ 2024-05-07 384/week @ 2024-05-14 442/week @ 2024-05-21 470/week @ 2024-05-28 409/week @ 2024-06-04 498/week @ 2024-06-11 456/week @ 2024-06-18 440/week @ 2024-06-25 480/week @ 2024-07-02 481/week @ 2024-07-09 389/week @ 2024-07-16 546/week @ 2024-07-23 540/week @ 2024-07-30 803/week @ 2024-08-06

2,377 每月下载量
16 个crate中(13个直接) 使用

MIT/Apache

1MB
234

包含 (WOFF字体,190KB) target/doc/FiraSans-Medium.woff,(WOFF字体,135KB) target/doc/FiraSans-Medium.woff2,(WOFF字体,185KB) target/doc/FiraSans-Regular.woff,(WOFF字体,130KB) target/doc/FiraSans-Regular.woff2,(WOFF字体,69KB) SourceCodePro-Regular.ttf.woff,(WOFF字体,69KB) SourceCodePro-Semibold.ttf.woff 以及更多.

Rust Fuzzy Search | 文档

Rust模糊搜索

此crate实现了基于三元的模糊搜索

模糊搜索允许通过相似度而不是通过相等性来比较字符串
相似字符串将获得高分数(接近 1.0f32),而不相似的字符串将获得较低分数(接近 0.0f32)。

模糊搜索容忍词序的变化
例如,"John Dep""Dep John" 将获得高分数。

使用的算法来自: https://dev.to/kaleman15/fuzzy-searching-with-postgresql-97o

基本思想

  1. 从两个字符串中提取所有由3个相邻字母组成的组。
    ("House" 变为 [' H', ' Ho', 'Hou', 'ous', 'use', 'se ']).
    注意在字符串开头和结尾添加的2个空格,用于使算法能够在零长度单词上工作。

  2. 然后计算第一个单词中也在第二个单词中出现的三元组的数量,并将其除以第一个单词中三元组的数量。

示例:比较两个字符串

fn test () {
   use rust_fuzzy_search::fuzzy_compare;
   let score : f32 = fuzzy_compare("kolbasobulko", "kolbasobulko");
   println!("score = {:?}", score);
}

示例:比较一个字符串与字符串列表,并检索最佳匹配项

 fn test() {
     use rust_fuzzy_search::fuzzy_search_best_n;
     let s = "bulko";
     let list : Vec<&str> = vec![
         "kolbasobulko",
         "sandviĉo",
         "ŝatas",
         "domo",
         "emuo",
         "fabo",
         "fazano"
     ];
     let n : usize = 3;
     let res : Vec<(&str, f32)> = fuzzy_search_best_n(s,&list, n);
     for (_word, score) in res {
         println!("{:?}",score)
     }
 }

示例:如果您有一个 VecString 列表,您需要将其转换为 &str 列表。

fn works_with_strings() {
    use rust_fuzzy_search::fuzzy_search;
    let s = String::from("varma");
    let list: Vec<String> = vec![String::from("varma vetero"), String::from("varma ĉokolado")];
    fuzzy_search(&s, &list.iter().map(String::as_ref).collect::<Vec<&str>>());
}

该软件包公开了 5 个主要函数。

使用方法

要使用此软件包,首先将以下内容添加到您的 Cargo.toml 文件中:

[dependencies]
rust-fuzzy-search = { git = "https://gitlab.com/EnricoCh/rust-fuzzy-search"}

然后,将以下内容添加到您的 crate 中:

extern crate rust_fuzzy_search;

use rust_fuzzy_search::*;

fn main() {
// ...
}

构建

要构建库,请使用 cargo build

测试

要测试库,请使用 cargo test

许可证

许可协议为以下之一:

MIT License Apache 2.0 License

贡献

除非您明确声明,否则任何有意提交以包含在作品中并由您定义的 Apache-2.0 许可证中,将根据上述条款双许可,不附加任何额外条款或条件。

无运行时依赖