Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -695,12 +695,10 @@ def reinforce_entities_with_keywords(entities, query, food_map, master_symptom_m
|
|
| 695 |
|
| 696 |
entities["sintomas"] = list(set(current_symptoms))
|
| 697 |
return entities
|
| 698 |
-
|
| 699 |
-
|
| 700 |
def find_best_matches_hybrid(entities, data):
|
| 701 |
"""
|
| 702 |
-
Motor de búsqueda semántico y ponderado.
|
| 703 |
-
|
| 704 |
"""
|
| 705 |
if not entities or not data: return []
|
| 706 |
|
|
@@ -708,13 +706,22 @@ def find_best_matches_hybrid(entities, data):
|
|
| 708 |
user_symptoms_text = " ".join(entities.get("sintomas", []))
|
| 709 |
user_symptom_keywords = set(re.findall(r'\b\w+\b', sanitize_text(user_symptoms_text)))
|
| 710 |
|
| 711 |
-
|
| 712 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 713 |
|
| 714 |
RARE_CONDITIONS = [
|
| 715 |
"Porfiria Aguda Intermitente (PAI).", "Enfermedad de Refsum del Adulto.",
|
| 716 |
"Ataxia por Gluten.", "Encefalopatía por Gluten.", "Enfermedad de Wilson.",
|
| 717 |
-
"Deficiencia de Ornitina Transcarbamilasa."
|
| 718 |
]
|
| 719 |
|
| 720 |
results = []
|
|
@@ -730,12 +737,12 @@ def find_best_matches_hybrid(entities, data):
|
|
| 730 |
|
| 731 |
# 3. COMPARACIÓN INTELIGENTE Y PUNTUACIÓN
|
| 732 |
|
| 733 |
-
# Puntuación de Alimento
|
| 734 |
food_intersection = user_food_keywords.intersection(db_food_keywords)
|
| 735 |
if food_intersection:
|
| 736 |
score_details['food'] = 20
|
| 737 |
# Bonus por alta confianza
|
| 738 |
-
if len(food_intersection) / len(user_food_keywords.union(db_food_keywords)) > 0.
|
| 739 |
score_details['bonus'] = 30
|
| 740 |
|
| 741 |
# Puntuación de Síntomas por intersección
|
|
@@ -757,12 +764,11 @@ def find_best_matches_hybrid(entities, data):
|
|
| 757 |
results.append({
|
| 758 |
'entry': entry,
|
| 759 |
'score': score_details,
|
| 760 |
-
'matched_symptoms': list(symptom_intersection)
|
| 761 |
})
|
| 762 |
|
| 763 |
if not results: return []
|
| 764 |
return sorted(results, key=lambda x: x['score']['total'], reverse=True)
|
| 765 |
-
|
| 766 |
@retry(wait=wait_random_exponential(min=1, max=10), stop=stop_after_attempt(3))
|
| 767 |
@retry(wait=wait_random_exponential(min=1, max=10), stop=stop_after_attempt(3))
|
| 768 |
def translate_symptoms_with_gemini(symptoms_list, master_symptom_map):
|
|
|
|
| 695 |
|
| 696 |
entities["sintomas"] = list(set(current_symptoms))
|
| 697 |
return entities
|
|
|
|
|
|
|
| 698 |
def find_best_matches_hybrid(entities, data):
|
| 699 |
"""
|
| 700 |
+
Motor de búsqueda semántico y ponderado final.
|
| 701 |
+
Reintegra el conocimiento de FOOD_TO_COMPOUND_MAP en la búsqueda de alimentos.
|
| 702 |
"""
|
| 703 |
if not entities or not data: return []
|
| 704 |
|
|
|
|
| 706 |
user_symptoms_text = " ".join(entities.get("sintomas", []))
|
| 707 |
user_symptom_keywords = set(re.findall(r'\b\w+\b', sanitize_text(user_symptoms_text)))
|
| 708 |
|
| 709 |
+
user_foods_raw = entities.get("alimentos", [])
|
| 710 |
+
user_food_keywords_base = set(re.findall(r'\b\w+\b', sanitize_text(" ".join(user_foods_raw))))
|
| 711 |
+
|
| 712 |
+
# --- PASO CRUCIAL: REINTEGRAR EL CONOCIMIENTO EXPERTO ---
|
| 713 |
+
user_food_keywords_expanded = set(user_food_keywords_base)
|
| 714 |
+
for food in user_foods_raw:
|
| 715 |
+
if food in FOOD_TO_COMPOUND_MAP:
|
| 716 |
+
user_food_keywords_expanded.update(FOOD_TO_COMPOUND_MAP[food])
|
| 717 |
+
|
| 718 |
+
# Usamos la lista expandida para la búsqueda
|
| 719 |
+
user_food_keywords = user_food_keywords_expanded
|
| 720 |
|
| 721 |
RARE_CONDITIONS = [
|
| 722 |
"Porfiria Aguda Intermitente (PAI).", "Enfermedad de Refsum del Adulto.",
|
| 723 |
"Ataxia por Gluten.", "Encefalopatía por Gluten.", "Enfermedad de Wilson.",
|
| 724 |
+
"Deficiencia de Ornitina Transcarbamilasa."
|
| 725 |
]
|
| 726 |
|
| 727 |
results = []
|
|
|
|
| 737 |
|
| 738 |
# 3. COMPARACIÓN INTELIGENTE Y PUNTUACIÓN
|
| 739 |
|
| 740 |
+
# Puntuación de Alimento con la lista expandida
|
| 741 |
food_intersection = user_food_keywords.intersection(db_food_keywords)
|
| 742 |
if food_intersection:
|
| 743 |
score_details['food'] = 20
|
| 744 |
# Bonus por alta confianza
|
| 745 |
+
if len(food_intersection) / len(user_food_keywords.union(db_food_keywords)) > 0.1: # Umbral más bajo
|
| 746 |
score_details['bonus'] = 30
|
| 747 |
|
| 748 |
# Puntuación de Síntomas por intersección
|
|
|
|
| 764 |
results.append({
|
| 765 |
'entry': entry,
|
| 766 |
'score': score_details,
|
| 767 |
+
'matched_symptoms': list(symptom_intersection)
|
| 768 |
})
|
| 769 |
|
| 770 |
if not results: return []
|
| 771 |
return sorted(results, key=lambda x: x['score']['total'], reverse=True)
|
|
|
|
| 772 |
@retry(wait=wait_random_exponential(min=1, max=10), stop=stop_after_attempt(3))
|
| 773 |
@retry(wait=wait_random_exponential(min=1, max=10), stop=stop_after_attempt(3))
|
| 774 |
def translate_symptoms_with_gemini(symptoms_list, master_symptom_map):
|