Baixe o app para aproveitar ainda mais
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)))
Compartilhar