# Tarefa 1 de Aprendizagem Computacional
# Luciana de Melo e Abud - 7991002
# Link para o relatório: https://linux.ime.usp.br/~luumelo/aprendizagem/
# Para executar o código, instale a versão 3 do python e então execute:
# $ python3 exemplo.py 

import pandas as pd
import numpy as np 
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from nltk import word_tokenize   
from nltk.stem import WordNetLemmatizer
from sklearn import svm, tree
from sklearn.linear_model import LinearRegression

class LemmaTokenizer(object):
	def __init__(self):
		self.wnl = WordNetLemmatizer()
	def __call__(self, doc):
		return [self.wnl.lemmatize(t) for t in word_tokenize(doc)]


train = pd.read_csv("tweets_airlines.csv", header=0, delimiter=",", quoting=0, encoding='utf8')

Xtrain, Xval, ytrain, yval = train_test_split(train['text'], train['airline_sentiment'], test_size=0.33, random_state=9)
Xtrain = Xtrain.tolist()
Xtest = Xval.tolist()

bag = CountVectorizer(tokenizer=LemmaTokenizer()) 
index = bag.fit_transform(Xtrain)


logreg = LogisticRegression()
logreg.fit(index, ytrain)

bag_test = bag.transform(Xval)

print("Regressão Logística: ")
print(logreg.score(bag_test, yval))


clf = svm.SVC(kernel='sigmoid')
clf.fit(index, ytrain)

print("SVM: ")
print(clf.score(bag_test, yval))

clf = tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(index, ytrain)
print('Àrvore de decisão:')
print(clf.score(bag_test, yval))