Madras1 commited on
Commit
f23dc10
·
verified ·
1 Parent(s): 7613840

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -8
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 preparar_textos_csv(file_bytes: bytes, text_column: str, n_samples: int) -> List[str]:
165
- """Prepara textos de arquivo CSV extraindo coluna especificada."""
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- try:
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()