1
resposta

Estou recebendo o seguinte erro

Traceback (most recent call last):
  File "c:\Clarissa\desafio_final.py", line 17, in <module>
    resenha_dict = json.loads(resenha_json)
  File "C:\Users\clarissasilva\AppData\Local\Programs\Python\Python314\Lib\json\__init__.py", line 352, in loads
    return _default_decoder.decode(s)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^
  File "C:\Users\clarissasilva\AppData\Local\Programs\Python\Python314\Lib\json\decoder.py", line 345, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
               ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\clarissasilva\AppData\Local\Programs\Python\Python314\Lib\json\decoder.py", line 361, in raw_decode
    obj, end = self.scan_once(s, idx)
               ~~~~~~~~~~~~~~^^^^^^^^
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 3 (char 5)
1 resposta

Ei, Clarissa, tudo bem?

O erro diz que o Python que tentou ler uma string como JSON mas o formato dela está inválido.

Peço que revise todo o seu código, dando atenção à sintaxe, por exemplo, o JSON é muito sensível e todas as chaves (nomes de propriedades) precisam estar entre aspas duplas (") e não simples (') ou sem aspas.

Deixo o código aqui para a conferência:

# Etapa 1: Ler o arquivo de resenhas
lista_de_resenhas = []
with open("resenhas-app-gpt.txt", "r", encoding="utf-8") as arquivo:
    for linha in arquivo:
        lista_de_resenhas.append(linha.strip())

print(lista_de_resenhas)
# contato_com_llm.py
from openai import OpenAI

client_openai = OpenAI(
    base_url="http://127.0.0.1:1234/v1",
    api_key="lm-studio"
)

def recebe_linha_e_retorna_json(linha):
    resposta_do_llm = client_openai.chat.completions.create(
        model="google/gemma-3-1b",
        messages=[
            {"role": "system", "content": """
            Você é um especialista em análise de dados e conversão de dados para JSON.
            Você receberá uma linha de texto que é uma resenha de um aplicativo em um marketplace online.
            Eu quero que você analise essa resenha, e me retorne um JSON com as seguintes chaves:
            - 'usuario': o nome do usuário que fez a resenha
            - 'resenha_original': a resenha no idioma original que você recebeu
            - 'resenha_pt': a resenha traduzida para o português
            - 'avaliacao': uma avaliação se essa resenha foi 'Positiva', 'Negativa' ou 'Neutra' (apenas uma dessas opções)
            """},
            {"role": "user", "content": f"Resenha: {linha}"}
        ],
        temperature=0.0
    )
    return resposta_do_llm.choices[0].message.content
from contato_com_llm import recebe_linha_e_retorna_json
import json

lista_de_resenhas_json = []

for resenha in lista_de_resenhas:
    resenha_json = recebe_linha_e_retorna_json(resenha)
    resenha_dict = json.loads(resenha_json)
    lista_de_resenhas_json.append(resenha_dict)

print(lista_de_resenhas_json)
def contador_e_juntador(lista_de_dicionarios):
    contador_positivas = 0
    contador_negativas = 0
    contador_neutras = 0

    for dicionario in lista_de_dicionarios:
        if dicionario['avaliacao'] == 'Positiva':
            contador_positivas += 1
        elif dicionario['avaliacao'] == 'Negativa':
            contador_negativas += 1
        else:
            contador_neutras += 1

    lista_de_dicionarios_str = [str(dicionario) for dicionario in lista_de_dicionarios]
    textos_unidos = "#####".join(lista_de_dicionarios_str)

    return contador_positivas, contador_negativas, contador_neutras, textos_unidos

pos, neg, neut, textos = contador_e_juntador(lista_de_resenhas_json)

print(f"Positivas: {pos}")
print(f"Negativas: {neg}")
print(f"Neutras: {neut}")
print(textos)

Espero que dê certinho, se o erro persistir, compartilhe o seu código para podermos investigar melhor.

Bons estudos e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado