Upload app.py
Browse files
app.py
CHANGED
|
@@ -161,12 +161,31 @@ def preparar_textos(file_bytes: bytes, n_samples: int) -> List[str]:
|
|
| 161 |
textos = [s for line in linhas if (s := line.strip()) and len(s.split()) > 3]
|
| 162 |
return textos[:n_samples]
|
| 163 |
|
| 164 |
-
def
|
| 165 |
-
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 166 |
try:
|
| 167 |
-
df = pd.read_csv(io.BytesIO(file_bytes), encoding="utf-8")
|
| 168 |
except UnicodeDecodeError:
|
| 169 |
-
df = pd.read_csv(io.BytesIO(file_bytes), encoding="latin-1")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 170 |
|
| 171 |
if text_column not in df.columns:
|
| 172 |
available = ", ".join(df.columns.tolist()[:10])
|
|
@@ -179,13 +198,11 @@ def preparar_textos_csv(file_bytes: bytes, text_column: str, n_samples: int) ->
|
|
| 179 |
|
| 180 |
def get_csv_columns(file_bytes: bytes) -> List[str]:
|
| 181 |
"""Retorna lista de colunas de um arquivo CSV."""
|
| 182 |
-
|
| 183 |
-
df = pd.read_csv(io.BytesIO(file_bytes), nrows=0, encoding="utf-8")
|
| 184 |
-
except UnicodeDecodeError:
|
| 185 |
-
df = pd.read_csv(io.BytesIO(file_bytes), nrows=0, encoding="latin-1")
|
| 186 |
return df.columns.tolist()
|
| 187 |
|
| 188 |
|
|
|
|
| 189 |
def processar_pipeline(textos: List[str]) -> (pd.DataFrame, np.ndarray):
|
| 190 |
logging.info(f"Iniciando pipeline para {len(textos)} textos...")
|
| 191 |
model = load_retriever()
|
|
|
|
| 161 |
textos = [s for line in linhas if (s := line.strip()) and len(s.split()) > 3]
|
| 162 |
return textos[:n_samples]
|
| 163 |
|
| 164 |
+
def detect_csv_separator(file_bytes: bytes) -> str:
|
| 165 |
+
"""Detecta separador do CSV (vírgula ou ponto-e-vírgula)."""
|
| 166 |
+
sample = file_bytes[:4096].decode("utf-8", errors="ignore")
|
| 167 |
+
first_line = sample.split('\n')[0]
|
| 168 |
+
|
| 169 |
+
# Conta ocorrências de cada separador na primeira linha
|
| 170 |
+
commas = first_line.count(',')
|
| 171 |
+
semicolons = first_line.count(';')
|
| 172 |
+
|
| 173 |
+
return ';' if semicolons > commas else ','
|
| 174 |
+
|
| 175 |
+
def read_csv_smart(file_bytes: bytes, nrows=None) -> pd.DataFrame:
|
| 176 |
+
"""Lê CSV com detecção automática de separador e encoding."""
|
| 177 |
+
sep = detect_csv_separator(file_bytes)
|
| 178 |
+
|
| 179 |
try:
|
| 180 |
+
df = pd.read_csv(io.BytesIO(file_bytes), sep=sep, encoding="utf-8", nrows=nrows)
|
| 181 |
except UnicodeDecodeError:
|
| 182 |
+
df = pd.read_csv(io.BytesIO(file_bytes), sep=sep, encoding="latin-1", nrows=nrows)
|
| 183 |
+
|
| 184 |
+
return df
|
| 185 |
+
|
| 186 |
+
def preparar_textos_csv(file_bytes: bytes, text_column: str, n_samples: int) -> List[str]:
|
| 187 |
+
"""Prepara textos de arquivo CSV extraindo coluna especificada."""
|
| 188 |
+
df = read_csv_smart(file_bytes)
|
| 189 |
|
| 190 |
if text_column not in df.columns:
|
| 191 |
available = ", ".join(df.columns.tolist()[:10])
|
|
|
|
| 198 |
|
| 199 |
def get_csv_columns(file_bytes: bytes) -> List[str]:
|
| 200 |
"""Retorna lista de colunas de um arquivo CSV."""
|
| 201 |
+
df = read_csv_smart(file_bytes, nrows=0)
|
|
|
|
|
|
|
|
|
|
| 202 |
return df.columns.tolist()
|
| 203 |
|
| 204 |
|
| 205 |
+
|
| 206 |
def processar_pipeline(textos: List[str]) -> (pd.DataFrame, np.ndarray):
|
| 207 |
logging.info(f"Iniciando pipeline para {len(textos)} textos...")
|
| 208 |
model = load_retriever()
|