use rag::eval::{
average_precision, ndcg_at_k, precision_at_k, recall_at_k, reciprocal_rank, relevance_set,
};
use std::collections::HashSet;
fn main() {
let relevant: HashSet<String> =
relevance_set(["d2".to_string(), "d5".to_string(), "d9".to_string()]);
let retrieved = vec![
"d2".to_string(),
"d1".to_string(),
"d9".to_string(),
"d3".to_string(),
"d5".to_string(),
];
let k = 3;
println!("Relevant: {:?}", relevant);
println!("Retrieved: {:?}", retrieved);
println!(
"Recall@{} = {:.3}",
k,
recall_at_k(&retrieved, &relevant, k)
);
println!(
"Precision@{} = {:.3}",
k,
precision_at_k(&retrieved, &relevant, k)
);
println!(
"MRR = {:.3}",
reciprocal_rank(&retrieved, &relevant)
);
println!(
"MAP = {:.3}",
average_precision(&retrieved, &relevant)
);
let grades = vec![3.0, 0.0, 2.0, 0.0, 1.0];
let ideal = vec![3.0, 2.0, 1.0];
println!("NDCG@{} = {:.3}", k, ndcg_at_k(&grades, &ideal, k));
}