← Files Humanização de TextoARCHIVED FILE
skills/humanizacao-de-texto/evals/verificar.py
1.84 KB · Sep 30, 2026 · 23:15 UTC
"""Verifica invariantes selecionadas; não comprova equivalência semântica."""
import json
import re
import sys
from pathlib import Path
root = Path(__file__).resolve().parent
cases = json.loads((root / 'casos.json').read_text(encoding='utf-8'))
path = Path(sys.argv[1]) if len(sys.argv) > 1 else root / 'resultados.json'
rows = json.loads(path.read_text(encoding='utf-8'))
results = {row['id']: row['resposta'] for row in rows}
errors = []
if len(results) != len(rows):
errors.append('IDs duplicados nos resultados')
expected = {c['id'] for c in cases if c['ativar']}
if set(results) != expected:
errors.append('Conjunto de resultados difere dos casos positivos')
for case in cases:
if not case['ativar']:
continue
output = results.get(case['id'], '')
for token in case.get('preservar', []):
if token not in output:
errors.append(f"{case['id']}: trecho protegido ausente: {token!r}")
for token in case.get('proibir', []):
if token.casefold() in output.casefold():
errors.append(f"{case['id']}: adição indevida: {token!r}")
if case['id'] == 'lista-formula':
if re.findall(r'^([0-9]+)\. ', output, re.M) != ['1', '2', '3']:
errors.append('lista-formula: quantidade ou ordem dos itens mudou')
if case['id'] == 'json':
try:
value = json.loads(output)
assert set(value) == {'id', 'texto', 'aprovado'}
assert type(value['id']) is int and value['id'] == 17
assert value['aprovado'] is False
assert isinstance(value['texto'], str)
except (ValueError, TypeError, AssertionError):
errors.append('json: formato, chaves ou tipos alterados')
if errors:
print('\n'.join(errors))
sys.exit(1)
print(f'{len(expected)} casos: invariantes selecionadas preservadas. Revisão semântica ainda necessária.')
SHA-256: 2b1ce207437ca2f1b00fdb40058153984146651c13f13eb2102c6c7f39650f82