import pandas as pd
import nltk
import unidecode
import matplotlib.pyplot as plt
import seaborn as sns
from nltk import tokenize
nltk.download('stopwords')
# 1. Carregar dados
url = 'https://raw.githubusercontent.com/alura-cursos/nlp_analise_sentimento/refs/heads/main/Dados/dataset_avaliacoes.csv'
df = pd.read_csv(url)
# 2. Pré-processamento básico (tratamento_4)
stopwords = nltk.corpus.stopwords.words('portuguese')
stopwords_sem_acento = [unidecode.unidecode(p) for p in stopwords]
token_pontuacao = tokenize.WordPunctTokenizer()
trat4 = []
for opiniao in df["avaliacao"]:
tokens = token_pontuacao.tokenize(opiniao)
frase = [p.lower() for p in tokens if p.isalpha()]
frase = [unidecode.unidecode(p) for p in frase]
frase = [p for p in frase if p not in stopwords_sem_acento]
trat4.append(" ".join(frase))
df["tratamento_4"] = trat4
# 3. Função para gráfico de frequência
def grafico_frequencia(texto, coluna_texto, quantidade):
# juntar textos
todas_palavras = ' '.join(texto[coluna_texto])
# tokenizar e contar frequência
token_espaco = tokenize.WhitespaceTokenizer()
tokens = token_espaco.tokenize(todas_palavras)
frequencia = nltk.FreqDist(tokens)
# criar DataFrame
df_freq = pd.DataFrame({
"Palavra": list(frequencia.keys()),
"Frequência": list(frequencia.values())
})
# selecionar mais frequentes
df_freq = df_freq.nlargest(quantidade, "Frequência")
# plotar gráfico
plt.figure(figsize=(12,5))
sns.barplot(data=df_freq, x="Palavra", y="Frequência", color="gray")
plt.xticks(rotation=45)
plt.title("Palavras mais frequentes")
plt.show()
# 4. Executar função
grafico_frequencia(df, "tratamento_4", 20)