| import pandas as pd
|
| import numpy as np
|
|
|
| from sklearn.feature_extraction.text import TfidfVectorizer
|
| from sklearn.svm import LinearSVC
|
| from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
|
|
|
|
|
|
|
|
|
|
|
| train_files = ["train grupa 1.csv", "train grupa 2.csv", "train grupa 3.csv", "train grupa 4.csv"]
|
| test_files = ["test grupa 1.csv", "test grupa 2.csv", "test grupa 3.csv", "test grupa 4.csv"]
|
|
|
| VALID_LABELS = ["positive", "negative", "neutral","mixed","sarcasm"]
|
| label_map = {"negative": 0, "neutral": 1, "positive": 2, "mixed":3,"sarcasm":4}
|
|
|
|
|
|
|
|
|
|
|
| def load_data(file):
|
| df = pd.read_csv(file, sep=";")
|
| df = df[["text", "label"]]
|
| df = df.dropna()
|
| df["label"] = df["label"].astype(str).str.lower()
|
| df = df[df["label"].isin(VALID_LABELS)]
|
|
|
| X = df["text"].astype(str).values
|
| y = np.array([label_map[l] for l in df["label"]])
|
|
|
| return X, y
|
|
|
|
|
| def evaluate(y_true, y_pred):
|
| return {
|
| "accuracy": accuracy_score(y_true, y_pred),
|
| "precision": precision_score(y_true, y_pred, average="weighted", zero_division=0),
|
| "recall": recall_score(y_true, y_pred, average="weighted", zero_division=0),
|
| "f1": f1_score(y_true, y_pred, average="weighted", zero_division=0),
|
| }
|
|
|
|
|
|
|
|
|
|
|
| vectorizer = TfidfVectorizer(stop_words="english", max_features=5000)
|
|
|
| print("\n===== SVM: Individual Training =====")
|
|
|
| for i in range(4):
|
| X_train, y_train = load_data(train_files[i])
|
| X_test, y_test = load_data(test_files[i])
|
|
|
| X_train = vectorizer.fit_transform(X_train)
|
| X_test = vectorizer.transform(X_test)
|
|
|
| model = LinearSVC()
|
| model.fit(X_train, y_train)
|
|
|
| y_pred = model.predict(X_test)
|
|
|
| print(f"\nDataset {i+1}")
|
| print(evaluate(y_test, y_pred))
|
|
|