# -- Code Cell --
import pandas as pd

# -- Code Cell --
train = pd.read_csv("train_data.csv")
test = pd.read_csv("test_data.csv")

# -- Code Cell --
train

# -- Code Cell --
y = train['label']
X = train['text']

# -- Code Cell --
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from scipy.sparse import hstack
from sklearn.metrics import f1_score
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=42, stratify=y)
tfidf_word = TfidfVectorizer(analyzer='word', ngram_range=(1,2))
tfidf_char = TfidfVectorizer(analyzer='char_wb', ngram_range=(3,5))
X_train_word = tfidf_word.fit_transform(X_train)
X_test_word = tfidf_word.transform(X_test)
X_train_char = tfidf_char.fit_transform(X_train)
X_test_char = tfidf_char.transform(X_test)
X_train_final = hstack([X_train_char,X_train_word])
X_test_final = hstack([X_test_char,X_test_word])
model = LinearSVC()
model.fit(X_train_final,y_train)
pred = model.predict(X_test_final)
f1 = f1_score(y_test, pred,average='macro')
f1

# -- Code Cell --
test_text = test['text']
X_test_word = tfidf_word.transform(test_text)
X_test_char = tfidf_char.transform(test_text)
X_test_final = hstack([X_test_char,X_test_word])

# -- Code Cell --
preds = model.predict(X_test_final)

# -- Code Cell --
preds

# -- Code Cell --
sub1 = pd.DataFrame({
    "subtaskID": [1],
    "datapointID": [0],
    "answer": [3529]
})

sub2 = pd.DataFrame({
    "subtaskID": 2,
    "datapointID": test['id'],
    "answer": preds
})

final = pd.concat([sub1, sub2], ignore_index=True)
final.to_csv("subs.csv",index=False)

# -- Code Cell --
