33 lines
865 B
Plaintext
33 lines
865 B
Plaintext
use std::cmp::Reverse;
|
|
use std::collections::HashMap;
|
|
use std::fs::File;
|
|
use std::io::{BufRead, BufReader};
|
|
|
|
extern crate regex;
|
|
use regex::Regex;
|
|
|
|
fn word_count(file: File, n: usize) {
|
|
let word_regex = Regex::new("(?i)[a-z']+").unwrap();
|
|
|
|
let mut words = HashMap::new();
|
|
for line in BufReader::new(file).lines() {
|
|
word_regex
|
|
.find_iter(&line.expect("Read error"))
|
|
.map(|m| m.as_str())
|
|
.for_each(|word| {
|
|
*words.entry(word.to_lowercase()).or_insert(0) += 1;
|
|
});
|
|
}
|
|
|
|
let mut words: Vec<_> = words.iter().collect();
|
|
words.sort_unstable_by_key(|&(word, count)| (Reverse(count), word));
|
|
|
|
for (word, count) in words.iter().take(n) {
|
|
println!("{:8} {:>8}", word, count);
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
word_count(File::open("135-0.txt").expect("File open error"), 10)
|
|
}
|