Spaces:
Sleeping
Sleeping
| 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}") | |