Buscar

naive bayes romulo

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

# coding: utf-8
import nltk
import re
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
#nltk.download()
ListaTrada=[]
#texto=pd.read_csv('chennai_reviews.csv', encoding='ISO-8859-1')
texto = pd.read_csv('chennai_reviews.csv', sep=',', skip_blank_lines=True)
texto.drop(['Unnamed: 5'], axis=1, inplace=True)
texto.drop(['Unnamed: 6'], axis=1, inplace=True)
texto.drop(['Unnamed: 7'], axis=1, inplace=True)
texto.drop(['Unnamed: 8'], axis=1, inplace=True)
texto.drop(['Hotel_name'], axis=1, inplace=True)
texto.drop(['Review_Title'], axis=1, inplace=True)
texto.drop(['Rating_Percentage'], axis=1, inplace=True)
def tratamentoTexto(texto):
 for i in range(len(texto)):
 try:
 auxx = str(re.sub(r"[^\w\s]", '', (texto['Review_Text'][i])))
 a=(texto['Sentiment'][i])
 ListaTrada.append((auxx, a))
 except TypeError:
 print('Valor da linha {} com valor NAN'.format(i))
 return ListaTrada
a=tratamentoTexto(texto)
listaFinal=[]
for i in range(len(a)):
 if a[i][1]=="3":
 listaFinal.append((a[i][0],'Positivo'))
 elif a[i][1]=="1":
 listaFinal.append((a[i][0],'Negativo'))
 else:
 listaFinal.append((a[i][0], 'Neutro'))
basetreinamento, baseteste = train_test_split(listaFinal, test_size=0.2)
stopwordsnltk = nltk.corpus.stopwords.words('english')
stopwordsnltk.append('The')
stopwordsnltk.append('It')
#print(stopwordsnltk)
def aplicastemmer(texto):
 stemmer = nltk.stem.RSLPStemmer()
 frasessstemming = []
 for (palavras, emocao) in texto:
 comstemming = [str(stemmer.stem(p)) for p in palavras.split() if p not in stopwordsnltk]
 frasessstemming.append((comstemming, emocao))
 return frasessstemming
frasescomstemmingtreinamento = aplicastemmer(basetreinamento)
frasescomstemmingteste = aplicastemmer(baseteste)
def buscapalavras(frases):
 todaspalavras = []
 for (palavras, emocao) in frases:
 todaspalavras.extend(palavras)
 return todaspalavras
palavrastreinamento = buscapalavras(frasescomstemmingtreinamento)
palavrasteste = buscapalavras(frasescomstemmingteste)
def buscafrequencia(palavras):
 palavras = nltk.FreqDist(palavras)
 return palavras
frequenciatreinamento = buscafrequencia(palavrastreinamento)
frequenciateste = buscafrequencia(palavrasteste)
#print(frequencia.most_common(50))
def buscapalavrasunicas(frequencia):
 freq = frequencia.keys()
 return freq
palavrasunicastreinamento = buscapalavrasunicas(frequenciatreinamento)
palavrasunicasteste = buscapalavrasunicas(frequenciateste)
#print(palavrasunicas)
def extratorpalavras(documento):
 doc = set(documento)
 caracteristicas = {}
 for palavras in palavrasunicastreinamento:
 caracteristicas['%s' % palavras] = (palavras in doc)
 return caracteristicas
caracteristicasfrase = extratorpalavras(['am', 'nov', 'dia'])
basecompletatreinamento = nltk.classify.apply_features(extratorpalavras, frasescomstemmingtreinamento)
basecompletateste = nltk.classify.apply_features(extratorpalavras, frasescomstemmingteste)
print(basecompletateste)
# constroi a tabela de probabilidade
classificador = nltk.NaiveBayesClassifier.train(basecompletatreinamento)
print(classificador.labels())
#print(classificador.show_most_informative_features(20))
print(nltk.classify.accuracy(classificador, basecompletateste))
erros = []
for (frase, classe) in basecompletateste:
 #print(frase)
 #print(classe)
 resultado = classificador.classify(frase)
 if resultado != classe:
 erros.append((classe, resultado, frase))
#for (classe, resultado, frase) in erros:
print(erros)
from nltk.metrics import ConfusionMatrix
esperado = []
previsto = []
for (frase, classe) in basecompletateste:
 resultado = classificador.classify(frase)
 previsto.append(resultado)
 esperado.append(classe)
matriz = ConfusionMatrix(esperado, previsto)
print(matriz)
teste = 'i really liked the cheap and comfortable apartments'
testestemming = []
stemmer = nltk.stem.RSLPStemmer()
for (palavrastreinamento) in teste.split():
 comstem = [p for p in palavrastreinamento.split()]
 testestemming.append(str(stemmer.stem(comstem[0])))
#print(testestemming)
novo = extratorpalavras(testestemming)
#print(novo)
#print(classificador.classify(novo))
distribuicao = classificador.prob_classify(novo)
#for classe in distribuicao.samples():
# print("%s: %f" % (classe, distribuicao.prob(classe)))

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando