from sklearn.metrics import precision_score, accuracy_score, recall_score, f1_score, classification_report from sklearn.preprocessing import LabelEncoder class TextClassifier: def __init__(self, train_features, train_targets, test_features, test_targets): self.train_features = train_features self.train_targets = train_targets self.test_features = test_features self.test_targets = test_targets self.model = None self.classification_report = None self.accuracy = None self.precision = None self.recall = None self.f1 = None def train(self) -> None: raise NotImplementedError def predict(self, text_samples:list, inverse_transform:bool=True) -> list: raise NotImplementedError def evaluate(self) -> dict: predictions = self.predict(self.test_features, inverse_transform=False) self.accuracy = accuracy_score(self.test_targets, predictions) self.precision = precision_score(self.test_targets, predictions, average='weighted') self.recall = recall_score(self.test_targets, predictions, average='weighted') self.f1 = f1_score(self.test_targets, predictions, average='weighted') self.classification_report = classification_report(self.test_targets, predictions) return {'accuracy' : self.accuracy, 'precision' : self.precision, 'recall' : self.recall}