/// (pattern, replacement) — applied as whole-token, case-insensitive. const ABBREV: &[(&str, &str)] = &[ ("v.a.", "verdacht auf"), ("z.n.", "zustand nach"), ("art.", "arterielle"), ("op", "operation"), ("dd", "differentialdiagnose"), ("re.", "rechts"), ("li.", "links"), ]; pub fn normalize(input: &str) -> String { let lower = input.to_lowercase(); let mut out: Vec = Vec::new(); for tok in lower.split_whitespace() { let replaced = ABBREV.iter() .find(|(p, _)| *p == tok) .map(|(_, r)| r.to_string()) .unwrap_or_else(|| tok.to_string()); out.push(replaced); } out.join(" ") }