2 个版本
0.1.2 | 2022 年 8 月 20 日 |
---|---|
0.1.1 | 2022 年 8 月 19 日 |
0.1.0 |
|
571 在 并发 中
22KB
457 行
CluStr
文档: 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