Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Utilização Real

Queria saber como eu consigo fazer a classificação, nos videos mostra o percentual de acerto de cada modelo, minha duvida é dada a seguinte frase "O exercício 15 do curso de Java 1 esta com a resposta errada podem conferir por favor" como retornar se envio para o financeiro ou pra o acadêmico?

6 respostas

Bom dia André,

Acho que não entendi direito sua dúvida, poderia explicar com mais detalhes a situação?

Att

Boa Tarde Guilherme,

Minha duvida é referente a como usar os modelos, no curso foi apresentado como encontrar o melhor modelo, passamos os dados de treino, de teste de o de validação, no final é encontrado o percentual de acerto de cada um dos modelos. Eu queria saber se tem como utilizar o modelo pra classificar um texto;

Por exemplo: Recebi o e-mail, "O exercício 15 do curso de Java 1 esta com a resposta errada podem conferir por favor" , analisando o texto com o modelo ele me dizer para qual setor devo enviar.

Nos exemplos tempos os arquivos .csv, por exemplo o e-mail.csv que possui o e-mail e a classificação, é possível dado um e-mail retornar qual é a sua classificação?

Achei interessante o conteúdo do curso só fiquei em duvida em ter um exemplo em como utilizar;

solução!

Boa tarde André,

É possível sim, você precisa agora integrar o código em algum aplicativo/biblioteca que lê emails. Existem diversas APIs (em python, Java e outras linguagens) que permitem acessar emails, em geral via um protocolo chamado IMAP. Você pode criar um programa que usa a API do IMAP para descobrir os emails novos, invocar seu programa classificador e usar novamente a API do IMAP para fazer o forward.

Procurando "imap python" ou o nome de sua linguagem favorita vai achar apis de imap para a linguagem que quer usar. Se ela for python, é só integrar com o curso que fizemos. Se ela não for python, ai terá que procurar uma biblioteca de machine learning e natural language processing nessa outra linguagem, hoje em dia existem diversas.

Guilherme

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

Está no caminho sim. Agora você precisa vetorizar_texto o texto que leu, para transformar em números. E depois aplicar o predict nesse texto vetorizado.

Entendi, muito obrigado.