2个版本
0.1.1 | 2021年7月14日 |
---|---|
0.1.0 | 2021年7月14日 |
#6 在 #模糊字符串
2,377 每月下载量
在 16 个crate中(13个直接) 使用
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
基本思想
-
从两个字符串中提取所有由3个相邻字母组成的组。
("House"
变为[' H', ' Ho', 'Hou', 'ous', 'use', 'se ']
).
注意在字符串开头和结尾添加的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)
}
}
示例:如果您有一个 Vec
的 String
列表,您需要将其转换为 &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 个主要函数。
- fuzzy_compare 函数将接受两个字符串并返回一个表示这两个字符串相似程度的分数。
- fuzzy_search 函数将对字符串列表应用 fuzzy_compare,并返回一个包含元组的列表:(单词,分数)。
- fuzzy_search_sorted 函数与 fuzzy_search 类似,但以降序对输出进行排序。
- fuzzy_search_threshold 函数将接受一个额外的
f32
输入,并仅返回分数大于阈值的元组。 - fuzzy_search_best_n 函数将接受一个额外的
usize
参数,并返回前n
个元组。
使用方法
要使用此软件包,首先将以下内容添加到您的 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
许可证
许可协议为以下之一:
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
贡献
除非您明确声明,否则任何有意提交以包含在作品中并由您定义的 Apache-2.0 许可证中,将根据上述条款双许可,不附加任何额外条款或条件。