pub fn normalize(text: &str) -> Vec<String> {
let spaced: String = text
.chars()
.flat_map(|c| {
if c.is_alphanumeric() || c == '\'' {
c.to_lowercase().collect::<Vec<char>>()
} else {
vec![' ']
}
})
.collect();
spaced
.split_whitespace()
.map(|t| t.trim_matches('\'').to_string())
.filter(|t| !t.is_empty())
.collect()
}
#[cfg(test)]
mod tests {
use super::normalize;
#[test]
fn punctuation_and_hyphens_become_boundaries() {
assert_eq!(normalize("Ter-delete, okay?"), ["ter", "delete", "okay"]);
}
#[test]
fn inner_apostrophes_survive_and_outer_ones_do_not() {
assert_eq!(normalize("'don't'"), ["don't"]);
}
#[test]
fn digits_are_left_alone() {
assert_eq!(normalize("RM23.50"), ["rm23", "50"]);
}
}