Minha solução:
!wget https://cdn3.gnarususercontent.com.br/4790-python/reviews.csv
import os
import pandas as pd
from google.colab import userdata
# 1.Carregar o CSV
df_reviews = pd.read_csv("reviews.csv")
df_reviews.head()
df_reviews.columns.unique()
#2. LLM para clasificar o sentimento de cada feedback como Positivo, negativo ou neutro
!pip install -q groq
os.environ["GROQ_API_KEY"] = userdata.get('GROQ_API_KEY')
from groq import Groq
client = Groq()
def analisar_sentimento(frase: str) -> str:
"""
Envia uma pergunta para a GenAI API e retorna 'resposta'.
"""
try:
completion = client.chat.completions.create(
model="llama-3.3-70b-versatile",
messages=[
{
"role": "user",
"content": f"Analise o sentimento do review:: {frase} e retorne APENAS uma das palavras (Positivo, Neutro ou Negativo.)"
}
],
temperature=0.2,
max_completion_tokens=10,
stream=False, # stream desativado para receber a resposta pronta
)
# Captura o texto completo da resposta
resposta = completion.choices[0].message.content.strip()
# Retorna formatado
return f"{resposta}"
except Exception as e:
return f"Erro ao processar: {e}"
#Escrever dataframe com nova coluna com a classificação da review
try:
# 1. Aplica a função de sentimento e cria a nova coluna
# Usamos o .apply() para percorrer a coluna de forma otimizada
df_reviews['sentimento'] = df_reviews['reviewText'].apply(lambda x: analisar_sentimento(str(x).strip()))
# 2. Exibe o resultado para conferência
print("Processamento concluído com sucesso!")
print(df_reviews[['reviewerID', 'reviewText', 'sentimento']].head())
# 3. (Opcional) Salva o DataFrame completo com a nova coluna em um arquivo CSV
df_reviews.to_csv('reviews_analisadas.csv', index=False, encoding='utf-8')
except Exception as e:
print(f"Um erro ocorreu: {e}")
print(df_reviews[['reviewText', 'sentimento']].head())
Exemplo de saída: