fschwartzer commited on
Commit
2c05d82
1 Parent(s): 2237b4d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -15
app.py CHANGED
@@ -22,16 +22,16 @@ def fetch_data_to_dataframe(query, limit=50, source="mercadolibre"):
22
  return df
23
  return pd.DataFrame()
24
 
25
- def refinar_resultados(df):
26
- # Ensure 'Title' is treated as a string and handle NaN values by replacing them with an empty string
27
- df['Title'] = df['Title'].astype(str).fillna('')
28
-
29
- # Now apply your filtering condition
30
  df_refinado = df[~df['Title'].str.contains("kit", case=False, na=False)]
31
  padrao_unidades = r'\b(\d+)\s*(unidade|unidades|pacote|pacotes|caixa|caixas)\b'
32
-
33
- # Since 'Title' is ensured to be a string, this should not raise the TypeError
34
  df_refinado = df_refinado[~df_refinado['Title'].str.contains(padrao_unidades, case=False, regex=True)]
 
 
 
 
 
35
  return df_refinado
36
 
37
  def get_best_match(query, choices, limit=15):
@@ -77,16 +77,17 @@ def select_nearest_items(df, query):
77
  return reasonable_price_df.sort_values(['Distance', 'Title_Similarity'], ascending=[True, False]).head(5)
78
 
79
  def search_with_fallback(query, df, limit=15):
80
- # Start with the most specific query and progressively simplify it
81
  query_parts = query.split()
 
 
82
  for i in range(len(query_parts), 0, -1):
83
- # Construct a simplified query by progressively removing the least important terms
84
  simplified_query = " ".join(query_parts[:i])
85
- df_filtrado = filtrar_itens_similares(df, simplified_query, limit=limit)
 
 
86
  if not df_filtrado.empty:
87
- # Return the filtered DataFrame as soon as we get any results
88
  return df_filtrado
89
- # If no results are found for any simplification of the query, return an empty DataFrame
90
  return pd.DataFrame()
91
 
92
  def integrated_app(query, titulo, EC, PU):
@@ -96,17 +97,19 @@ def integrated_app(query, titulo, EC, PU):
96
  if df_combined.empty:
97
  return "Nenhum dado encontrado. Tente uma consulta diferente.", pd.DataFrame()
98
 
99
- df_refined = refinar_resultados(df_combined)
 
 
 
100
  df_similares = search_with_fallback(query, df_refined)
101
 
102
  if df_similares.empty:
103
  return "Nenhum item similar encontrado.", pd.DataFrame()
104
 
105
- df_nearest = select_nearest_items(df_similares, query) # Ensure this function is adapted to use the query for relevance
106
  if df_nearest.empty:
107
  return "Nenhum resultado próximo encontrado.", pd.DataFrame()
108
 
109
- # Calculate valuation factor and final valuation based on the nearest items
110
  fator_avaliacao = calcular_fator_avaliacao(titulo, EC, PU)
111
  valor_avaliacao = df_nearest['Price'].mean() * fator_avaliacao
112
  return f"Valor Médio do Bem: R$ {df_nearest['Price'].mean():.2f}, Fator de Avaliação: {fator_avaliacao*100:.2f}%, Valor de Avaliação: R$ {valor_avaliacao:.2f}", df_nearest
 
22
  return df
23
  return pd.DataFrame()
24
 
25
+ def refinar_resultados(df, exclude_word="conjunto", include_word=False):
26
+ df['Title'] = df['Title'].astype(str)
 
 
 
27
  df_refinado = df[~df['Title'].str.contains("kit", case=False, na=False)]
28
  padrao_unidades = r'\b(\d+)\s*(unidade|unidades|pacote|pacotes|caixa|caixas)\b'
 
 
29
  df_refinado = df_refinado[~df_refinado['Title'].str.contains(padrao_unidades, case=False, regex=True)]
30
+
31
+ if not include_word:
32
+ # Exclude results containing "conjunto" if it's not part of the original query
33
+ df_refinado = df_refinado[~df_refinado['Title'].str.contains(exclude_word, case=False)]
34
+
35
  return df_refinado
36
 
37
  def get_best_match(query, choices, limit=15):
 
77
  return reasonable_price_df.sort_values(['Distance', 'Title_Similarity'], ascending=[True, False]).head(5)
78
 
79
  def search_with_fallback(query, df, limit=15):
 
80
  query_parts = query.split()
81
+ include_conjunto = "conjunto" in query.lower()
82
+
83
  for i in range(len(query_parts), 0, -1):
 
84
  simplified_query = " ".join(query_parts[:i])
85
+ df_refinado = refinar_resultados(df, include_word=include_conjunto)
86
+ df_filtrado = filtrar_itens_similares(df_refinado, simplified_query, limit=limit)
87
+
88
  if not df_filtrado.empty:
 
89
  return df_filtrado
90
+
91
  return pd.DataFrame()
92
 
93
  def integrated_app(query, titulo, EC, PU):
 
97
  if df_combined.empty:
98
  return "Nenhum dado encontrado. Tente uma consulta diferente.", pd.DataFrame()
99
 
100
+ # Pass whether "conjunto" is part of the original query
101
+ include_conjunto = "conjunto" in query.lower()
102
+ df_refined = refinar_resultados(df_combined, include_word=include_conjunto)
103
+
104
  df_similares = search_with_fallback(query, df_refined)
105
 
106
  if df_similares.empty:
107
  return "Nenhum item similar encontrado.", pd.DataFrame()
108
 
109
+ df_nearest = select_nearest_items(df_similares, query)
110
  if df_nearest.empty:
111
  return "Nenhum resultado próximo encontrado.", pd.DataFrame()
112
 
 
113
  fator_avaliacao = calcular_fator_avaliacao(titulo, EC, PU)
114
  valor_avaliacao = df_nearest['Price'].mean() * fator_avaliacao
115
  return f"Valor Médio do Bem: R$ {df_nearest['Price'].mean():.2f}, Fator de Avaliação: {fator_avaliacao*100:.2f}%, Valor de Avaliação: R$ {valor_avaliacao:.2f}", df_nearest