ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【每周一库】 simsearch - a simple and lightweight fuzzy

2021-05-08 22:51:35  阅读:159  来源: 互联网

标签:engine insert simsearch simple pattern 一库 let 字符串


本期的每周一库带来的是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找到第一个字符串和第三个字符串,运行结果如下:

图片

以上就是本期的每周一库


标签:engine,insert,simsearch,simple,pattern,一库,let,字符串
来源: https://blog.51cto.com/u_15127605/2762756

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有