Guilherme desculpe te incomodar mas, você poderia ver se a alteração que eu fiz no curso está correta?
#!-*- coding: utf8 -*-
from collections import Counter
from sklearn.cross_validation import cross_val_score
import pandas as pd
import numpy as np
import nltk
texto = raw_input("Informe o texto: ")
print texto
#nltk.download('punkt')
classificacoes = pd.read_csv('emails.csv', encoding = 'utf-8')
textos_puros = classificacoes['email']
frases = textos_puros.str.lower()
texto_quebrados = [nltk.tokenize.word_tokenize(frase) for frase in frases] #remove pontuação
#nltk.download('stopwords')
stopwords = nltk.corpus.stopwords.words('portuguese')#remove palavras desnecessarias
#nltk.download('rslp')
stemmer = nltk.stem.RSLPStemmer()#deixa somente a raiz da palavra
dicionario = set()#nao permite a inclusao repetida
for lista in texto_quebrados:
validas = [stemmer.stem(palavra) for palavra in lista if palavra not in stopwords and len(palavra) > 2]
dicionario.update(validas)
frases_teste = texto.lower()
texto_teste = nltk.tokenize.word_tokenize(frases_teste)
dicionario1 = set()
validas1 = [stemmer.stem(palavra) for palavra in texto_teste if palavra not in stopwords and len(palavra) > 2]
dicionario1.update(validas1)
total_de_palavras = len(dicionario)
tuplas = zip(dicionario, xrange(total_de_palavras))#coloca no array as tuplas
tradutor = {palavra: indice for palavra,indice in tuplas} #cria dicionario com posicao e indice
def vetorizar_texto(texto, tradutor):
vetor = [0] * len(tradutor) #cria um vetor com total de palavras "0" zerinhos
for palavra in texto:
if len(palavra) > 0 :
raiz = stemmer.stem(palavra)
if raiz in tradutor:
posicao = tradutor[raiz] #recupera a posicao da palavra
vetor[posicao] += 1 #soma mais um na posicao do vetorexit
return vetor
#Criação do algoritmo logico machine learnig
vetores_de_texto = [vetorizar_texto(texto, tradutor) for texto in texto_quebrados]
marcas = classificacoes['classificacao']
vetores = [vetorizar_texto(texto_teste, tradutor)]
X = np.array(vetores_de_texto)
Y = np.array(marcas.tolist())
porcentagem_de_treino = 0.8
tamanho_do_treino = int(porcentagem_de_treino * len(Y))
tamanho_de_validacao = len(Y) - tamanho_do_treino
treino_dados = X[0:tamanho_do_treino]
treino_marcacoes = Y[0:tamanho_do_treino]
validacao_dados = np.array(vetores)
validacao_marcacoes = Y[tamanho_do_treino:]
def fit_and_predict(nome, modelo, treino_dados, treino_marcacoes):
k = 10
scores = cross_val_score(modelo, treino_dados, treino_marcacoes, cv = k)
taxa_de_acerto = np.mean(scores)
msg = "Taxa de acerto do {0}: {1}".format(nome, taxa_de_acerto)
# print (msg)
return taxa_de_acerto
resultados = {}
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import LinearSVC
modeloOneVsRest = OneVsRestClassifier(LinearSVC(random_state = 0))
resultadoOneVsRest = fit_and_predict("OneVsRest", modeloOneVsRest, treino_dados, treino_marcacoes)
resultados[resultadoOneVsRest] = modeloOneVsRest
from sklearn.multiclass import OneVsOneClassifier
modeloOneVsOne = OneVsOneClassifier(LinearSVC(random_state = 0))
resultadoOnveVsOne = fit_and_predict("OneVsOne", modeloOneVsOne, treino_dados, treino_marcacoes)
resultados[resultadoOnveVsOne] = modeloOneVsOne
from sklearn.naive_bayes import MultinomialNB
modeloMultinomial = MultinomialNB()
resultadoMultinomial = fit_and_predict("MultinomialNB", modeloMultinomial, treino_dados,treino_marcacoes)
resultados[resultadoMultinomial] = modeloMultinomial
from sklearn.ensemble import AdaBoostClassifier
modeloAdaBoost = AdaBoostClassifier()
resultadoAdaBoost = fit_and_predict("AdaBoostClassifier", modeloAdaBoost, treino_dados, treino_marcacoes)
resultados[resultadoAdaBoost] = modeloAdaBoost
#print resultados
maximo = max(resultados)
vencedor = resultados[maximo]
# print "Vencedor"
#print vencedor
vencedor.fit(treino_dados, treino_marcacoes)
resultado = vencedor.predict(validacao_dados)
print resultado