Spaces:
Sleeping
Sleeping
fschwartzer
commited on
Commit
•
2c05d82
1
Parent(s):
2237b4d
Update app.py
Browse files
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 |
-
|
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 |
-
|
|
|
|
|
86 |
if not df_filtrado.empty:
|
87 |
-
# Return the filtered DataFrame as soon as we get any results
|
88 |
return df_filtrado
|
89 |
-
|
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 |
-
|
|
|
|
|
|
|
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)
|
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
|