/// These examples are taken from
/// https://www.nltk.org/api/nltk.lm.html
fn main() {
let text = vec![vec!["a", "b", "c"], vec!["a", "c", "d", "c", "e", "f"]];
println!("bigrams of {:?}:", text[0]);
let bigrams = rltk::util::bigrams(text[0].iter());
print(bigrams);
println!("\npadding {:?}", text[0]);
let padded: Vec<&&str> = rltk::util::pad_sequence(text[0].iter(), true, &"", true, &"", 2).collect();
println!("{:?}", padded);
println!("\ncombining bigrams and padding");
let combined = rltk::util::bigrams(rltk::lm::preprocessing::pad_both_ends(text[0].iter(),2));
print(combined);
// padded_bigrams = list(pad_both_ends(text[0], n=2))
// >>> list(everygrams(padded_bigrams, max_len=2))
println!("\neverygrams:");
let padded_bigrams: Vec<&&str> = rltk::lm::preprocessing::pad_both_ends(text[0].iter(),2).collect();
println!("padded {:?}",padded_bigrams);
let everygrams = rltk::util::everygrams(padded_bigrams.into_iter(), 2);
print(everygrams);
print!("or the same with padded_everygrams: ");
let padded_everygrams = rltk::lm::preprocessing::padded_everygrams(text[0].iter(),2);
print(padded_everygrams);
println!("\ncombining padding and flattening: {:?}:", text);
let flattened: Vec<&&str> = text.iter().map(|sent| rltk::lm::preprocessing::pad_both_ends(sent.iter(), 2)).flatten().collect();
println!("{:?}", flattened);
}
fn print<'a>(nested: impl Iterator- >) {
print!("[");
for group in nested {
print!("[");
for word in group {
print!("{},", word);
}
print!("],");
}
println!("]");
}