JairoCesar commited on
Commit
a82ce60
·
verified ·
1 Parent(s): 29cac73

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -12
app.py CHANGED
@@ -55,7 +55,20 @@ def load_data():
55
  st.error(f"Error cargando los archivos de datos: {e}")
56
  return None, None
57
  alimentos_data, foodb_index = load_data()
58
-
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  MASTER_SYMPTOM_MAP = {
60
  "dolor abdominal": {
61
  "frases_es": ["dolor de estómago", "dolor de panza", "dolor abdominal", "retortijones", "cólicos", "calambres abdominales"],
@@ -859,7 +872,7 @@ if st.session_state.search_results is not None:
859
  if foodb_index:
860
  with st.popover("🔬 Componentes Moleculares Relevantes"):
861
 
862
- REMEDIAL_PREFIXES = ("anti", "preventive", "remedy", "treatment", "inhibitor")
863
 
864
  st.info("Compuestos en el alimento más relevante que podrían estar relacionados con tus síntomas.")
865
 
@@ -869,29 +882,37 @@ if st.session_state.search_results is not None:
869
  if not user_foods_mentioned or not user_symptoms_es:
870
  st.warning("Se necesita al menos un alimento y un síntoma para el análisis molecular.")
871
  else:
872
- # 1. Encontrar la mejor y única coincidencia de alimento
873
  best_food_match_key = find_best_foodb_match(user_foods_mentioned, foodb_index.keys(), FOOD_NAME_TO_FOODB_KEY)
874
 
875
  if not best_food_match_key:
876
  st.warning("No se encontraron datos moleculares para los alimentos específicos mencionados.")
877
  else:
878
- # 2. Realizar el análisis solo en la mejor coincidencia
879
  st.subheader(f"Análisis de: {best_food_match_key.capitalize()}")
880
 
881
  compounds_data = foodb_index[best_food_match_key]
882
- symptom_keywords_en = []
883
- for symptom_es in user_symptoms_es:
884
- if symptom_es in MASTER_SYMPTOM_MAP:
885
- symptom_keywords_en.extend(MASTER_SYMPTOM_MAP[symptom_es].get('keywords_en', []))
886
 
887
  causative_compounds = []
888
  remedial_compounds = []
889
 
890
  for item in compounds_data:
 
891
  effects_en = item.get("effects", [])
 
 
 
 
 
 
 
 
 
 
 
 
 
892
  is_causative = False
893
  is_remedial = False
894
-
895
  for effect in effects_en:
896
  if any(keyword in effect.lower() for keyword in symptom_keywords_en):
897
  if effect.lower().startswith(REMEDIAL_PREFIXES):
@@ -909,11 +930,15 @@ if st.session_state.search_results is not None:
909
  st.markdown("###### 🔬 Posibles Compuestos Desencadenantes:")
910
  for item in causative_compounds[:5]:
911
  st.write(f"**Compuesto:** {item['compound']}")
912
- relevant_effects = [eff for eff in item['effects'] if any(kw in eff.lower() and not eff.lower().startswith(REMEDIAL_PREFIXES) for kw in symptom_keywords_en)]
913
- st.write(f"**Efectos Relevantes:** {', '.join(relevant_effects)}")
 
 
 
 
914
  elif remedial_compounds:
915
  st.markdown("###### 💊 Compuestos con Efectos Potencialmente Beneficiosos:")
916
- st.caption("No se encontraron compuestos desencadenantes directos. Sin embargo, se encontraron estos compuestos con efectos potencialmente positivos.")
917
  for item in remedial_compounds[:5]:
918
  st.write(f"**Compuesto:** {item['compound']}")
919
  relevant_effects = [eff for eff in item['effects'] if any(kw in eff.lower() and eff.lower().startswith(REMEDIAL_PREFIXES) for kw in symptom_keywords_en)]
 
55
  st.error(f"Error cargando los archivos de datos: {e}")
56
  return None, None
57
  alimentos_data, foodb_index = load_data()
58
+ KNOWN_TRIGGERS_MAP = {
59
+ "Histamine": ["dolor de cabeza", "migraña", "inflamación", "congestión nasal", "picazón", "erupción"],
60
+ "Tyramine": ["dolor de cabeza", "migraña"],
61
+ "Phenylethylamine": ["dolor de cabeza", "migraña"],
62
+ "Gluten": ["niebla mental", "dolor abdominal", "diarrea", "inflamación", "dolor articular"],
63
+ "Casein": ["niebla mental", "inflamación", "acné"],
64
+ "Lactose": ["hinchazón", "gases", "diarrea", "dolor abdominal"],
65
+ "Fructans": ["hinchazón", "gases", "dolor abdominal"],
66
+ "Caffeine": ["ansiedad", "dolor de cabeza", "insomnio"], # Puede causar y remediar dolores de cabeza
67
+ "Alcohol": ["dolor de cabeza", "niebla mental", "inflamación"],
68
+ "Capsaicin": ["dolor", "acidez"],
69
+ "Solanine": ["dolor articular", "inflamación"],
70
+ "Lectins": ["inflamación", "dolor articular", "hinchazón"]
71
+ }
72
  MASTER_SYMPTOM_MAP = {
73
  "dolor abdominal": {
74
  "frases_es": ["dolor de estómago", "dolor de panza", "dolor abdominal", "retortijones", "cólicos", "calambres abdominales"],
 
872
  if foodb_index:
873
  with st.popover("🔬 Componentes Moleculares Relevantes"):
874
 
875
+ REMEDIAL_PREFIXES = ("anti", "preventive", "remedy", "treatment", "inhibitor", "anxiolytic", "analgesic")
876
 
877
  st.info("Compuestos en el alimento más relevante que podrían estar relacionados con tus síntomas.")
878
 
 
882
  if not user_foods_mentioned or not user_symptoms_es:
883
  st.warning("Se necesita al menos un alimento y un síntoma para el análisis molecular.")
884
  else:
 
885
  best_food_match_key = find_best_foodb_match(user_foods_mentioned, foodb_index.keys(), FOOD_NAME_TO_FOODB_KEY)
886
 
887
  if not best_food_match_key:
888
  st.warning("No se encontraron datos moleculares para los alimentos específicos mencionados.")
889
  else:
 
890
  st.subheader(f"Análisis de: {best_food_match_key.capitalize()}")
891
 
892
  compounds_data = foodb_index[best_food_match_key]
893
+ symptom_keywords_en = {kw for sym in user_symptoms_es if sym in MASTER_SYMPTOM_MAP for kw in MASTER_SYMPTOM_MAP[sym].get('keywords_en', [])}
 
 
 
894
 
895
  causative_compounds = []
896
  remedial_compounds = []
897
 
898
  for item in compounds_data:
899
+ compound_name = item['compound']
900
  effects_en = item.get("effects", [])
901
+
902
+ # --- LÓGICA DE PRIORIDAD ---
903
+ # 1. ¿Es un desencadenante conocido para ESTE síntoma?
904
+ is_known_trigger = False
905
+ if compound_name in KNOWN_TRIGGERS_MAP:
906
+ if any(symptom in KNOWN_TRIGGERS_MAP[compound_name] for symptom in user_symptoms_es):
907
+ causative_compounds.append(item)
908
+ is_known_trigger = True
909
+
910
+ if is_known_trigger:
911
+ continue # Si ya es un culpable, no lo analizamos más
912
+
913
+ # 2. Si no, analizar efectos para causas o remedios
914
  is_causative = False
915
  is_remedial = False
 
916
  for effect in effects_en:
917
  if any(keyword in effect.lower() for keyword in symptom_keywords_en):
918
  if effect.lower().startswith(REMEDIAL_PREFIXES):
 
930
  st.markdown("###### 🔬 Posibles Compuestos Desencadenantes:")
931
  for item in causative_compounds[:5]:
932
  st.write(f"**Compuesto:** {item['compound']}")
933
+ # Mostramos por qué es un desencadenante conocido, o los efectos relevantes
934
+ if item['compound'] in KNOWN_TRIGGERS_MAP:
935
+ st.write(f"**Efectos Relevantes:** Desencadenante conocido de {', '.join([s for s in user_symptoms_es if s in KNOWN_TRIGGERS_MAP[item['compound']]])}")
936
+ else:
937
+ relevant_effects = [eff for eff in item['effects'] if any(kw in eff.lower() and not eff.lower().startswith(REMEDIAL_PREFIXES) for kw in symptom_keywords_en)]
938
+ st.write(f"**Efectos Relevantes:** {', '.join(relevant_effects)}")
939
  elif remedial_compounds:
940
  st.markdown("###### 💊 Compuestos con Efectos Potencialmente Beneficiosos:")
941
+ st.caption("No se encontraron compuestos desencadenantes directos en la base de datos.")
942
  for item in remedial_compounds[:5]:
943
  st.write(f"**Compuesto:** {item['compound']}")
944
  relevant_effects = [eff for eff in item['effects'] if any(kw in eff.lower() and eff.lower().startswith(REMEDIAL_PREFIXES) for kw in symptom_keywords_en)]