Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::fs;
- use std::collections::HashMap;
- use std::f32;
- fn main() {
- let spam_path = String::from("spamcount.txt");
- let ham_path = String::from("hamcount.txt");
- let spams = read(spam_path);
- let hams = read(ham_path);
- println!("Verdict: {}\n", verdict(filter(fs::read_to_string("hamesim.txt").expect("lol :D"), &hams, &spams)));
- println!("Verdict: {}\n", verdict(filter(fs::read_to_string("spamesim.txt").expect("lol :D"), &hams, &spams)));
- println!("Verdict: {}\n", verdict(filter("I am not a bot, I swear".to_string(), &hams, &spams)));
- }
- fn read(path: String) -> HashMap<String, f32> {
- let file = fs::read_to_string(path).expect("vituiks meni");
- let mut v: Vec <&str> = file
- .split("\n")
- .map(|s| s.trim())
- .collect();
- v.truncate(v.len()- 1);
- let mut map: HashMap<String, f32> = HashMap::new();
- for s in v {
- let mut t = s.split(" ");
- let value: f32 = t.next().unwrap().parse::<u32>().expect("ei onnaa") as f32;
- let key = t.next().unwrap().to_string();
- map.insert(key, value);
- }
- let wc: f32 = map.values().sum();
- for val in map.values_mut() {
- *val /= wc;
- }
- map
- }
- fn filter(message: String, hams: &HashMap<String, f32>, spams: &HashMap<String, f32>) -> f32 {
- println!("message:\n{}", message);
- let sprior: f32 = 0.5;
- let hprior: f32 = 0.5;
- let mut log_r: f32 = sprior.log2() - hprior.log2();
- for word in message.split_whitespace() {
- let mut spam_prob = 0.0000000000001;
- match spams.get(word) {
- Some(i) => spam_prob = *i,
- None => (),
- }
- let mut ham_prob = 0.0000000000001;
- match hams.get(word) {
- Some(i) => ham_prob = *i,
- None => (),
- }
- log_r += spam_prob.log2() - ham_prob.log2();
- }
- let lolbase: f32 = 2.0;
- log_r = lolbase.powf(log_r);
- println!("Final r: {}", log_r / (log_r + 1.0));
- log_r
- }
- fn verdict (v: f32) -> String {
- match v > 0.5 {
- true => return String::from("Spam"),
- _ => return String::from("Ham"),
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement