AKIRA-SOFTEDGE / test_persona_parser.py
akra35567's picture
Upload 22 files
1ba56cb verified
import re
import json
import ast
def extract_json_lenient(text):
text = text.strip()
if '{' in text:
start_idx = text.find('{')
end_idx = text.rfind('}' )
if end_idx > start_idx:
return text[start_idx:end_idx+1]
else:
return text[start_idx:]
return text
def emergency_parse(response_clean):
dados_extraidos = {}
chaves_busca = ["personalidade", "vicios_linguagem", "vicioslinguagem", "gostos", "desgostos", "emocional"]
# Regex para encontrar "chave: valor (até encontrar outra chave ou o fim)"
for chave in chaves_busca:
# Pattern mais agressivo: chave seguida de : ou = ou nada, pegando ate a proxima chave ou virgula seguida de proxima chave
pattern = re.compile(rf"{chave}['\"]?\s*[:=]?\s*(.*?)(?=(?:{'|'.join(chaves_busca)})['\"]?\s*[:=]|$)", re.IGNORECASE | re.DOTALL)
match = pattern.search(response_clean)
if match:
val = match.group(1).strip()
# Remove chaves do json perdidas, aspas ou virgulas
val = re.sub(r'^[\'"{}\[\]\s:]+|[\'"{}\[\]\s,:]+$', '', val).strip()
if val:
real_key = "vicios_linguagem" if chave == "vicioslinguagem" else chave
dados_extraidos[real_key] = val
return dados_extraidos
payload = """{ personalidade: Curioso, crítico, direto., vicioslinguagem: pq, parece que, gostos: Política internacional, conflitos geopolíticos., desgostos: Prolongamento desnecessário de guerras., emocional: Que"""
print(f"Payload original: {payload}")
clean = extract_json_lenient(payload)
print(f"Clean: {clean}")
# Simula o fluxo do código atual
# json_match = re.search(r'(\{.*?\})', clean, re.DOTALL) -> Isso falharia!
json_match_old = re.search(r'(\{.*?\})', clean, re.DOTALL)
print(f"Old Regex Match: {json_match_old}")
results = emergency_parse(clean)
print(f"Resultados Emergência: {results}")