本期的每周一库带来的是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进一步改进的算法。它的基本原理是根据公式:

计算字符串的相似度,其中的计算公式为

其中s1s2表示字符串的长度,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找到第一个字符串和第三个字符串,运行结果如下:

以上就是本期的每周一库


©著作权归作者所有:来自51CTO博客作者mob604756f79c64的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 210427 PHP 运算符 流程控制 字符串定义 定界符 require/include
  2. 模拟实现字符串函数及内存函数
  3. 详解 WebRTC 传输安全机制:一文读懂 DTLS 协议
  4. 20210508 字符串的格式化输出
  5. ETL算法详解
  6. Python算法分为哪几类?具备哪些特征?
  7. PHP:字符串系统函数,ASCII字符集转换,url解析函数,字符串散列处
  8. php之字符串实战注册页面
  9. 3.分治算法的设计思想与分析方法: 芯片测试, 快速排序, 幂乘算法

随机推荐

  1. MySQL表格查询基本语句2
  2. 组织这种结构的最佳方式?
  3. mysql添加外键语句
  4. lucene 4.10 检索mysql数据库
  5. mysql必知必会 - LIMIT
  6. 高级MySQL:查找轮询响应之间的相关性
  7. mysql 根据select结果进行循环操作,并写入
  8. Linux下,配置WordPress时出现“您的PHP似
  9. MySQL可视化软件Work Bench导出导入数据
  10. mysql恢复报ERROR 2006 (HY000) at line