帮我分析一下这个代码的运行模式以及用到的Python知识class ElderDietModel:
def __init__(self):
self.knowledge_graph = self.load_knowledge_graph()
self.health_rules = {
'高血压': {'max_sodium': 1500, 'avoid': ['腌菜','腊肉']},
'糖尿病': {'max_gi': 55, 'avoid': ['粘豆包','拔丝地瓜']},
'骨质疏松': {'min_calcium': 1000, 'recommend': ['冻豆腐','奶皮子']},
'缺牙': {'hardness': '软烂', 'avoid': ['冻梨','锅巴']}
}
def recommend(self, user_profile):
menu = self._generate_base_menu(user_profile)
adjusted_menu = self._apply_health_rules(menu, user_profile)
return self._add_cultural_adaptation(adjusted_menu, user_profile)
def _generate_base_menu(self, user):
base_dishes = []
if "黑龙江" in user["location"]:
base_dishes = ["土豆炖大鹅", "地三鲜", "苏泊汤"]
elif "吉林" in user["location"]:
base_dishes = ["清蒸白鱼", "酱骨架", "冷面"]
for fav in user["traditional_favs"]:
if fav in self.knowledge_graph.get("改良食谱库", []):
base_dishes.append(fav + "(健康版)")
return base_dishes
def _apply_health_rules(self, menu, user):
adjusted_menu = []
for dish in menu:
current_dish = dish
nutrition = self.knowledge_graph["菜品营养表"].get(dish, {})
if "高血压" in user["conditions"]:
if nutrition.get("钠(mg)", 0) > self.health_rules["高血压"]["max_sodium"]:
current_dish = self._find_low_sodium_alternative(current_dish)
if "缺牙" in user["conditions"]:
if self.knowledge_graph["质地分级"].get(current_dish, "") != "软烂":
current_dish += "(慢炖版)"
adjusted_menu.append(current_dish)
return adjusted_menu
def _add_cultural_adaptation(self, menu, user):
cultural_adjustments = {
"酸菜白肉": {
"改良方案": ["酸菜(乳酸菌发酵减钠30%)", "五花肉→梅花肉(脂肪降40%)"],
"营养变化": {"热量": "-35%", "钠": "-42%"}
},
"锅包肉": {
"改良方案": ["糖醋汁→赤藓糖醇", "裹糊用全麦粉"],
"GI值变化": "68→52"
}
}
final_menu = []
for dish in menu:
if dish in cultural_adjustments:
adjusted = f"{dish}☆改良版({cultural_adjustments[dish]['营养变化']})"
final_menu.append(adjusted)
else:
final_menu.append(dish)
return {
"推荐菜单": final_menu,
"健康提示": self._generate_health_tips(menu, user),
"文化适配": self._generate_cultural_notes(menu, user)
}
# 以下为需补充的辅助方法(示意)
def load_knowledge_graph(self):
"""模拟加载知识图谱数据"""
return {
"改良食谱库": ["酸菜白肉", "锅包肉"],
"菜品营养表": {
"酸菜白肉": {"钠(mg)": 1200},
"地三鲜": {"钠(mg)": 800}
},
"质地分级": {
"锅包肉": "酥脆",
"酸菜白肉": "软烂"
}
}
def _find_low_sodium_alternative(self, dish):
"""模拟查找低钠替代品"""
return dish + "(低钠版)"
def _generate_health_tips(self, menu, user):
"""生成健康提示"""
tips = {}
if "高血压" in user["conditions"]:
total_sodium = sum(self.knowledge_graph["菜品营养表"][d].get("钠(mg)",0) for d in menu)
tips["钠控制"] = f"今日预估摄入钠{total_sodium}mg(<1500mg标准)"
return tips
def _generate_cultural_notes(self, menu, user):
"""生成文化适配说明"""
return {
"传统保留项": "保留酸菜风味但钠含量降低",
"替代方案": "提供冻梨果泥替代传统冻梨"
}