asilvamaia commited on
Commit
b44a018
·
verified ·
1 Parent(s): e209770

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +56 -6
src/streamlit_app.py CHANGED
@@ -5,8 +5,8 @@ from urllib.parse import urlparse
5
  import io
6
 
7
  # --- CONFIGURAÇÕES ---
8
- # ⚠️ IMPORTANTE: Substitua "SEU_USUARIO/NOME_DO_SEU_MODELO" pelo seu ID real no Hugging Face
9
- MODEL_ID = "SEU_USUARIO/NOME_DO_SEU_MODELO"
10
 
11
  st.set_page_config(page_title="Validador .BR", page_icon="🇧🇷")
12
 
@@ -49,7 +49,7 @@ def load_model():
49
  try:
50
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
51
  model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID)
52
- # Força uso de CPU no Space gratuito
53
  model.to("cpu")
54
  model.eval()
55
  return tokenizer, model
@@ -81,6 +81,56 @@ if uploaded_file and tokenizer:
81
  for i, linha in enumerate(linhas):
82
  original = linha.strip()
83
 
84
- # --- CORREÇÃO DA LINHA PROBLEMÁTICA ---
85
- # Verifica se a linha é vazia ou é metadado
86
- if not original or original.startswith("")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  import io
6
 
7
  # --- CONFIGURAÇÕES ---
8
+ # Seu ID do modelo (Correto conforme você enviou)
9
+ MODEL_ID = "asilvamaia/ident_br"
10
 
11
  st.set_page_config(page_title="Validador .BR", page_icon="🇧🇷")
12
 
 
49
  try:
50
  tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
51
  model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID)
52
+ # Força uso de CPU no Space gratuito para evitar erros
53
  model.to("cpu")
54
  model.eval()
55
  return tokenizer, model
 
81
  for i, linha in enumerate(linhas):
82
  original = linha.strip()
83
 
84
+ # --- CORREÇÃO DA LINHA QUE ESTAVA COM ERRO ---
85
+ # Verifica se a linha é vazia ou se começa com metadados [source: ...]
86
+ if not original or original.startswith("[source:"):
87
+ continue
88
+
89
+ # Aplica limpeza
90
+ limpo = limpar_entrada(original)
91
+
92
+ # Inferência (Classificação)
93
+ inputs = tokenizer(limpo, return_tensors="pt", truncation=True, max_length=128)
94
+ with torch.no_grad():
95
+ outputs = model(**inputs)
96
+ pred = torch.argmax(outputs.logits, dim=1).item()
97
+
98
+ # REGRA DE APROVAÇÃO:
99
+ # 1. Modelo diz que é Classe 1 (BR)
100
+ # 2. Tem ponto na string
101
+ # 3. Não tem @
102
+ if pred == 1 and "." in limpo and "@" not in limpo:
103
+ validos.append(limpo)
104
+ else:
105
+ rejeitados.append(original)
106
+
107
+ # Atualiza barra de progresso a cada 10 itens
108
+ if i % 10 == 0:
109
+ progress_bar.progress(min((i + 1) / total_linhas, 1.0))
110
+
111
+ progress_bar.progress(1.0)
112
+
113
+ # --- DEDUPLICAÇÃO (Remove repetidos) ---
114
+ validos_unicos = sorted(list(set(validos)))
115
+ rejeitados_unicos = sorted(list(set(rejeitados)))
116
+
117
+ st.success("Processamento Concluído!")
118
+
119
+ # Exibe métricas
120
+ col1, col2 = st.columns(2)
121
+ with col1:
122
+ st.metric("✅ Aprovados (Únicos)", len(validos_unicos), help="Domínios .br válidos")
123
+ with col2:
124
+ st.metric("🔴 Rejeitados (Únicos)", len(rejeitados_unicos), help="Itens descartados")
125
+
126
+ # Botão de Download
127
+ st.download_button(
128
+ label="⬇️ Baixar Lista Limpa (.txt)",
129
+ data="\n".join(validos_unicos),
130
+ file_name="dominios_limpos.txt",
131
+ mime="text/plain"
132
+ )
133
+
134
+ # Mostra amostra
135
+ with st.expander("Ver amostra dos resultados"):
136
+ st.write(validos_unicos[:50])