2 个不稳定版本
0.2.2 | 2023年12月7日 |
---|---|
0.1.0 | 2020年11月29日 |
850 in 文本处理
16KB
249 行
group-similar
允许根据 Jaro-Winkler 距离 对值进行分组的 Crate。
许可证
版权所有 2020 Josh Clayton。请参阅 LICENSE。
lib.rs
:
此 Crate 通过 Jaro-Winkler 距离 和 完全连接聚类 实现基于字符串相似度的分组。
示例:根据商家名称识别可能的重复商家
use group_similar::{Config, Threshold, group_similar};
#[derive(Eq, PartialEq, std::hash::Hash, Debug, Ord, PartialOrd)]
struct Merchant {
id: usize,
name: String
}
impl std::fmt::Display for Merchant {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.name)
}
}
impl AsRef<str> for Merchant {
fn as_ref(&self) -> &str {
&self.name
}
}
let merchants = vec![
Merchant {
id: 1,
name: "McDonalds 105109".to_string()
},
Merchant {
id: 2,
name: "McDonalds 105110".to_string()
},
Merchant {
id: 3,
name: "Target ID1244".to_string()
},
Merchant {
id: 4,
name: "Target ID125".to_string()
},
Merchant {
id: 5,
name: "Amazon.com TID120159120".to_string()
},
Merchant {
id: 6,
name: "Target".to_string()
},
Merchant {
id: 7,
name: "Target.com".to_string()
},
];
let config = Config::jaro_winkler(Threshold::default());
let results = group_similar(&merchants, &config);
assert_eq!(results.get(&merchants[0]), Some(&vec![&merchants[1]]));
assert_eq!(results.get(&merchants[2]), Some(&vec![&merchants[3], &merchants[5], &merchants[6]]));
assert_eq!(results.get(&merchants[4]), Some(&vec![]));
依赖项
~5–17MB
~166K SLoC