2 个版本

0.1.2 2022 年 8 月 20 日
0.1.1 2022 年 8 月 19 日
0.1.0 2022 年 8 月 19 日

571并发

MIT 许可证

22KB
457

CluStr

Test codecov Crates.io License: MIT


文档: https://docs.rs/clustr/0.1.2/clustr/

仓库: https://crates.io/crates/clustr

源代码: https://github.com/TristanBester/clustr


描述

该库提供了一种可扩展的字符串聚类实现。

字符串根据成对 Levenshtein 距离聚集成簇。如果距离小于较短字符串长度的设定比例,则将字符串添加到同一簇中。

多线程模型

  • 输入字符串均匀地分配到分配的线程集合中。
  • 一旦每个线程对其关联的输入字符串进行了聚类,就开始结果聚合。
  • 簇以类似于从叶节点向上遍历二叉树的方式在多个线程间成对合并。树的根是最终的聚类。
  • 因此,如果有 N 个线程被分配,将会有 ceil(log2(N)) 个合并操作。

安装

[dependencies]
clustr = "0.1.2"

入门

基本用法

let inputs = vec!["aaaa", "aaax", "bbbb", "bbbz"];
let expected = vec![vec!["aaaa", "aaax"], vec!["bbbb", "bbbz"]];

let clusters = clustr::cluster_strings(&inputs, 0.25, 1)?;

assert_eq!(clusters, expected);

多线程

let inputs = vec!["aa", "bb", "aa", "bb"];
let expected = vec![vec!["aa", "aa"], vec!["bb", "bb"]];

let results = clustr::cluster_strings(&inputs, 0.0, 4)?;
  
// Order of returned clusters nondeterministic
for e in expected {
    assert!(results.contains(&e));
}

依赖

~230KB