#模糊匹配 #N-gram #模糊 #字符串相似度 #Shingles

ngrammatic

面向字符的N-gram生成器和模糊匹配库

9个版本

使用旧的Rust 2015

0.4.0 2022年5月2日
0.3.5 2022年2月4日
0.3.4 2021年12月28日
0.3.2 2020年8月18日
0.2.1 2017年11月6日

#599 in 文本处理

Download history 50/week @ 2024-03-11 42/week @ 2024-03-18 36/week @ 2024-03-25 122/week @ 2024-04-01 68/week @ 2024-04-08 50/week @ 2024-04-15 63/week @ 2024-04-22 74/week @ 2024-04-29 58/week @ 2024-05-06 45/week @ 2024-05-13 52/week @ 2024-05-20 55/week @ 2024-05-27 45/week @ 2024-06-03 45/week @ 2024-06-10 42/week @ 2024-06-17 41/week @ 2024-06-24

178 下载/每月
4 crates 中使用

MIT 许可证

38KB
583

本crate提供使用N-gram进行模糊搜索/字符串匹配。

此实现基于字符,而非基于单词,仅基于字符串相似度进行匹配。

MIT许可证下授权。

文档

https://docs.rs/ngrammatic/latest/ngrammatic/

安装

本crate发布在 crates.io

要使用它,将以下内容添加到您的Cargo.toml中

[dependencies]
ngrammatic = "0.3.4"

使用方法

要进行模糊匹配,构建您的有效符号语料库,如下所示

use ngrammatic::{CorpusBuilder, Pad};

let mut corpus = CorpusBuilder::new()
    .arity(2)
    .pad_full(Pad::Auto)
    .finish();

// Build up the list of known words
corpus.add_text("pie");
corpus.add_text("animal");
corpus.add_text("tomato");
corpus.add_text("seven");
corpus.add_text("carbon");

// Now we can try an unknown/misspelled word, and find a similar match
// in the corpus
let word = String::from("tomacco");
if let Some(top_result) = corpus.search(word, 0.25).first() {
    if top_result.similarity > 0.99 {
        println!("{}", top_result.text);
    } else {
        println!("{} (did you mean {}? [{:.0}% match])",
                 word,
                 top_result.text,
                 top_result.similarity * 100.0);
    }
} else {
    println!("🗙 {}", word);
}

无运行时依赖项