JairoCesar commited on
Commit
289235b
·
verified ·
1 Parent(s): dfe76a8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -11
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
- Descompone los síntomas en palabras clave y puntúa por intersección.
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
- user_foods_text = " ".join(entities.get("alimentos", []))
712
- user_food_keywords = set(re.findall(r'\b\w+\b', sanitize_text(user_foods_text)))
 
 
 
 
 
 
 
 
 
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." # Añadir OTC a las raras
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.3:
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) # Usar la intersección como síntomas coincidentes
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):