Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -686,12 +686,13 @@ def find_best_matches_hybrid(entities, data):
|
|
| 686 |
|
| 687 |
def find_best_foodb_match(user_foods_es, foodb_index_keys, food_name_map):
|
| 688 |
"""
|
| 689 |
-
Encuentra la mejor y única coincidencia de alimento en la base de datos de FoodB
|
|
|
|
| 690 |
"""
|
| 691 |
if not user_foods_es:
|
| 692 |
return None
|
| 693 |
|
| 694 |
-
# 1. Traducir y
|
| 695 |
search_terms_en = set()
|
| 696 |
for food_es in user_foods_es:
|
| 697 |
for key_es, value_en_list in food_name_map.items():
|
|
@@ -703,25 +704,30 @@ def find_best_foodb_match(user_foods_es, foodb_index_keys, food_name_map):
|
|
| 703 |
|
| 704 |
sorted_terms = sorted(list(search_terms_en), key=len, reverse=True)
|
| 705 |
|
| 706 |
-
# 2. Búsqueda por prioridades
|
| 707 |
-
|
|
|
|
| 708 |
for term in sorted_terms:
|
| 709 |
for key in foodb_index_keys:
|
| 710 |
if term == key.lower():
|
|
|
|
| 711 |
return key
|
| 712 |
|
| 713 |
-
# Prioridad 2: Coincidencia de
|
| 714 |
for term in sorted_terms:
|
| 715 |
for key in foodb_index_keys:
|
| 716 |
if key.lower().startswith(term):
|
|
|
|
| 717 |
return key
|
| 718 |
|
| 719 |
-
# Prioridad 3: Coincidencia
|
| 720 |
for term in sorted_terms:
|
| 721 |
for key in foodb_index_keys:
|
| 722 |
if term in key.lower():
|
|
|
|
| 723 |
return key
|
| 724 |
|
|
|
|
| 725 |
return None # No se encontró ninguna coincidencia
|
| 726 |
|
| 727 |
def generate_detailed_analysis(query, match):
|
|
|
|
| 686 |
|
| 687 |
def find_best_foodb_match(user_foods_es, foodb_index_keys, food_name_map):
|
| 688 |
"""
|
| 689 |
+
Encuentra la mejor y única coincidencia de alimento en la base de datos de FoodB
|
| 690 |
+
utilizando un algoritmo de "embudo de especificidad".
|
| 691 |
"""
|
| 692 |
if not user_foods_es:
|
| 693 |
return None
|
| 694 |
|
| 695 |
+
# 1. Traducir y ordenar los términos de búsqueda del más al menos específico
|
| 696 |
search_terms_en = set()
|
| 697 |
for food_es in user_foods_es:
|
| 698 |
for key_es, value_en_list in food_name_map.items():
|
|
|
|
| 704 |
|
| 705 |
sorted_terms = sorted(list(search_terms_en), key=len, reverse=True)
|
| 706 |
|
| 707 |
+
# 2. Búsqueda por prioridades (Embudo de Especificidad)
|
| 708 |
+
|
| 709 |
+
# Prioridad 1: Coincidencia Perfecta
|
| 710 |
for term in sorted_terms:
|
| 711 |
for key in foodb_index_keys:
|
| 712 |
if term == key.lower():
|
| 713 |
+
logger.info(f"Coincidencia Perfecta encontrada para '{term}': {key}")
|
| 714 |
return key
|
| 715 |
|
| 716 |
+
# Prioridad 2: Coincidencia de Inicio de Palabra
|
| 717 |
for term in sorted_terms:
|
| 718 |
for key in foodb_index_keys:
|
| 719 |
if key.lower().startswith(term):
|
| 720 |
+
logger.info(f"Coincidencia de Inicio encontrada para '{term}': {key}")
|
| 721 |
return key
|
| 722 |
|
| 723 |
+
# Prioridad 3: Coincidencia General (contiene)
|
| 724 |
for term in sorted_terms:
|
| 725 |
for key in foodb_index_keys:
|
| 726 |
if term in key.lower():
|
| 727 |
+
logger.info(f"Coincidencia General encontrada para '{term}': {key}")
|
| 728 |
return key
|
| 729 |
|
| 730 |
+
logger.warning(f"No se encontró ninguna coincidencia molecular para los términos: {sorted_terms}")
|
| 731 |
return None # No se encontró ninguna coincidencia
|
| 732 |
|
| 733 |
def generate_detailed_analysis(query, match):
|