Falta pouco!

0 dias

0 horas

0 min

0 seg

1
resposta

Erro análise de sentimento de reviews

Estou seguindo os passos do professor para usar a LLM para classificar o sentimento de cada feedback (positivo, negativo, neutro) e adicionar essa classificação ao DataFrame. Porém nessa parte de usar a LLM por algum motivo a minha padronização (conteudo do print()), só está sendo aplicada na primeira linha. Creio ser um erro de identação do for, mas já mexi de tudo e não consigo. Alguem consegue me ajudar?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Nathan!

Olhando o seu código e, principalmente, o resultado do seu print, tenho uma excelente notícia: o seu loop for e a chamada à API estão funcionando perfeitamente!

Veja que o seu print está mostrando a saída para cada um dos feedbacks: Feedback 0, Feedback 1, Feedback 2, e assim por diante. Além disso, os sentimentos estão variando ("Neutro", "Positivo", "Negativo"), o que prova que a LLM está analisando cada feedback individualmente, como deveria. Sua lógica de percorrer a coluna, chamar a API e guardar na lista está correta.

Isso significa que o problema provavelmente não é um erro de indentação no for.

O mais provável é que o erro esteja na etapa seguinte, que não está no seu print: a forma como você está tentando adicionar a lista_de_avaliacoes ao seu DataFrame.

Depois que o seu loop termina, você terá uma lista completa com todos os sentimentos, na ordem correta. Para adicionar essa lista como uma nova coluna ao seu DataFrame (vou supor que ele se chama df), o comando é bem simples e deve ser feito fora e depois do loop:

import pandas as pd
import random
import time

# --- 1. PREPARAÇÃO: Criando um DataFrame de exemplo ---
# Em um caso real, você carregaria seus dados de um arquivo.
feedbacks_dos_clientes = [
    "Eu adorei esse produto, a qualidade é incrível!",
    "A entrega demorou muito e a embalagem veio amassada.",
    "É um produto ok, cumpre o que promete, mas nada demais.",
    "Simplesmente o melhor que já comprei, recomendo a todos!",
    "Péssima experiência, o produto quebrou no segundo dia de uso.",
    "Não tenho uma opinião formada ainda, preciso usar mais.",
]

df = pd.DataFrame(feedbacks_dos_clientes, columns=['feedback_texto'])
print("--- DataFrame Original ---")
print(df)
print("\n" + "="*40 + "\n")


# --- 2. SIMULAÇÃO DA LLM: Loop para classificar cada feedback ---
# Esta função finge ser a LLM, para não precisarmos fazer uma chamada real à API.
def simular_analise_sentimento(texto):
    """Simula uma chamada de API para classificar o sentimento."""
    texto = texto.lower()
    if "adorei" in texto or "melhor" in texto or "incrível" in texto:
        return "Positivo"
    elif "péssima" in texto or "demorou" in texto or "quebrou" in texto:
        return "Negativo"
    else:
        return "Neutro"

# Lista vazia para guardar os resultados, exatamente como você fez.
lista_de_sentimentos = []

print("--- Iniciando a análise de sentimentos (simulação) ---")
# Loop 'for' para percorrer a coluna de feedbacks do DataFrame.
for feedback_numero, feedback in enumerate(df['feedback_texto']):
    
    # Aqui seria sua chamada real: resposta = client.models.generate_content(...)
    sentimento_gerado = simular_analise_sentimento(feedback)
    
    # Adicionando o resultado à nossa lista.
    lista_de_sentimentos.append(sentimento_gerado)
    
    # Imprimindo o progresso, como no seu exemplo.
    print(f"Feedback {feedback_numero}: '{feedback[:30]}...' -> Sentimento: {sentimento_gerado}")
    time.sleep(0.5) # Uma pequena pausa para simular o tempo da API

print("\n" + "="*40 + "\n")


# --- 3. ETAPA CRÍTICA: Adicionando a lista de volta ao DataFrame ---
# Esta linha é executada UMA ÚNICA VEZ, somente APÓS o loop 'for' ter terminado.
# Ela cria a nova coluna 'sentimento' e atribui todos os itens da lista a ela.
print("--- Adicionando a lista de sentimentos ao DataFrame ---")
df['sentimento'] = lista_de_sentimentos


# --- 4. VERIFICAÇÃO: Exibindo o resultado final ---
print("\n--- DataFrame Final com os Sentimentos ---")
print(df)

Muitas vezes, um erro comum é tentar atribuir o valor errado ou fazer a atribuição dentro do loop, o que pode causar o sintoma que você descreveu (parecer que só a primeira linha foi afetada).

Resumindo: Seu código de análise está ótimo! O problema deve ser apenas no comando que adiciona a lista de resultados ao DataFrame. Tente usar o código acima e veja se resolve.