Compare commits

..

No commits in common. "d11ca9c23cdb630d1bda06de3ccc462e9b8552bd" and "08135fcd2607cf3c68ad3b2720caff40768af949" have entirely different histories.

8 changed files with 10 additions and 11255 deletions

View File

@ -1,82 +1,7 @@
#include "filter.hpp"
#include <cstdlib>
#include <fstream>
#include <iostream>
SMSMessage::SMSMessage(MessageType given_type, std::string given_message) {
this->actual_type = given_type;
this->message = given_message;
Filter::Filter(void) {
}
// Takes in a file name from which it will generate a probability filter
void SMSMessageFilter::GenerateProbability(std::string file_name) {
// Open file
std::ifstream input_messages(file_name);
if (!input_messages.is_open()) {
std::cerr << "Error opening '" << file_name << "'" << std::endl;
std::exit(EXIT_FAILURE);
}
// Read in messages
MessageType temp_type;
std::string temp_message;
while (!input_messages.eof()) {
input_messages.get(&temp_message[0], 10, '\t');
if (temp_message == "spam") { temp_type = kSpam; }
else if (temp_message == "ham") { temp_type = kHam; }
else {
std::cerr << "[SMSMessageFilter - Warning]" <<
" Could not determine message type" << std::endl;
std::cerr << "\t Contains: <" << temp_message << ">" << std::endl;
}
input_messages >> temp_message;
}
}
void SMSMessageFilter::Filter(std::string file_name) {
// Open file
std::ifstream input_messages(file_name);
if (!input_messages.is_open()) {
std::cerr << "Error opening '" << file_name << "'" << std::endl;
std::exit(EXIT_FAILURE);
}
// Read in messages
MessageType temp_type;
std::string temp_message;
while (!input_messages.eof()) {
input_messages.get(&temp_message[0], 10, '\t');
if (temp_message == "spam") { temp_type = kSpam; }
else if (temp_message == "ham") { temp_type = kHam; }
else {
std::cerr << "[SMSMessageFilter - Warning]" <<
" Could not determine message type" << std::endl;
std::cerr << "\t Contains: <" << temp_message << ">" << std::endl;
}
input_messages >> temp_message;
filtered_messages.emplace_back(temp_type, temp_message);
}
}
void SMSMessageFilter::PrintReport(void) {
// Spam precision: (true positives) / (true positives + false positives)
std::cout << "[SMSMessageFilter - Report] Spam precision: ";
// Spam recall: (true positives) / (true positives + false negatives)
std::cout << "[SMSMessageFilter - Report] Spam recall: ";
// Ham precision: (true negatives) / (true negatives + false negatives)
std::cout << "[SMSMessageFilter - Report] Ham precision: ";
// Ham recall: (true negatives) / (true negatives + false positives)
std::cout << "[SMSMessageFilter - Report] Ham recall: ";
// Spam F-Score: 2* (spam precision * spam recall) / (spam precision + spam recall)
std::cout << "[SMSMessageFilter - Report] Spam F-Score: ";
// Ham F-Score: 2* (ham precision * ham recall) / (ham precision + ham recall)
std::cout << "[SMSMessageFilter - Report] Ham F-Score: ";
// Accuracy: (spam recall + ham recall) / 2
std::cout << "[SMSMessageFilter - Report] Accuracy: ";
Filter::~Filter(void) {
}

View File

@ -1,35 +1,17 @@
#ifndef FILTER_HPP
#define FILTER_HPP
#include <map>
#include <string>
#include <vector>
enum MessageType {
kSpam = 0,
kHam = 1,
kUnknown = 2,
};
struct SMSMessage {
SMSMessage(MessageType given_type, std::string given_message);
MessageType actual_type;
std::string message;
MessageType filter_type;
};
class SMSMessageFilter {
class Filter {
public:
SMSMessageFilter(void) = default;
~SMSMessageFilter(void) = default;
void GenerateProbability(std::string file_name);
void Filter(std::string file_name);
void PrintReport(void);
Filter(void);
Filter(Filter &&) = default;
Filter(const Filter &) = default;
Filter &operator=(Filter &&) = default;
Filter &operator=(const Filter &) = default;
~Filter(void);
private:
double sentence_probability_ham = 0.5; // Spam is 1 - sentence_probability_ham
std::map<std::string, double> probability_dictionary;
std::vector<SMSMessage> filtered_messages;
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff