【每周一库】 simsearch - a simple and lightweight fuzzy
16lz
2021-05-09
本期的每周一库带来的是simsearch,一个运行在内存的轻量级字符串模糊搜索引擎。
首先列出库的链接
- github: simsearch
- docs.rs: simsearch
接下来我们通过simsearch gihub中给出的例子来试用
开发环境
rustc --version
: rustc 1.45.2 (d3fb005a3 2020-07-31)cargo --version
: cargo 1.45.1 (f242df6ed 2020-07-22)
首先在Cargo.toml
文件中添加依赖项
simsearch = "0.2"
从官网的介绍我们可以知道,simsearch默认使用了Jaro-Winkler similarity算法,该算法是在Jaro distance进一步改进的算法。它的基本原理是根据公式:
计算字符串的相似度,其中的计算公式为
其中s1
和s2
表示字符串的长度,m表示两字符串的匹配字符数,t表示换位数目transposition的二分之一。
了解了基本概念之后我们通过代码来演示simsearch的功能
我们参考官方例子,想要从三个给出的字符串中找到模糊符合我们搜索pattern的index,适当修改官方例子代码如下:
use simsearch::SimSearch;
use std::time::Instant;
fn main(){
let mut engine: SimSearch<u32> = SimSearch::new();
engine.insert(1, "Things Fall Apart");
engine.insert(2, "The Old Man and the Sea");
engine.insert(3, "James Joyce has somethings");
let pattern = "thngs";
let start = Instant::now();
let res = engine.search(&pattern);
let end = Instant::now();
println!("pattern: {:?}", pattern.trim());
println!("results: {:?}", res);
println!("time: {:?}", end - start);
}
运行结果如下
接下来我们调整插入的第三个字符串为James Joyce has some things
,期望是能够通过搜索patternthngs
找到第一个字符串和第三个字符串,运行结果如下:
以上就是本期的每周一库
更多相关文章
- 210427 PHP 运算符 流程控制 字符串定义 定界符 require/include
- 模拟实现字符串函数及内存函数
- 详解 WebRTC 传输安全机制:一文读懂 DTLS 协议
- 20210508 字符串的格式化输出
- ETL算法详解
- Python算法分为哪几类?具备哪些特征?
- PHP:字符串系统函数,ASCII字符集转换,url解析函数,字符串散列处
- php之字符串实战注册页面
- 3.分治算法的设计思想与分析方法: 芯片测试, 快速排序, 幂乘算法