Spaces:
Running
Running
Update breed_recommendation.py
Browse files- breed_recommendation.py +41 -0
breed_recommendation.py
CHANGED
@@ -9,6 +9,47 @@ from scoring_calculation_system import UserPreferences, calculate_compatibility_
|
|
9 |
from recommendation_html_format import format_recommendation_html, get_breed_recommendations
|
10 |
from search_history import create_history_tab, create_history_component
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
def create_recommendation_tab(UserPreferences, get_breed_recommendations, format_recommendation_html, history_component):
|
13 |
|
14 |
with gr.TabItem("Breed Recommendation"):
|
|
|
9 |
from recommendation_html_format import format_recommendation_html, get_breed_recommendations
|
10 |
from search_history import create_history_tab, create_history_component
|
11 |
|
12 |
+
|
13 |
+
def filter_breed_matches(user_prefs: UserPreferences, top_n: int = 10) -> List[Dict]:
|
14 |
+
"""
|
15 |
+
根據使用者偏好篩選並推薦狗狗品種。
|
16 |
+
|
17 |
+
Parameters:
|
18 |
+
user_prefs: 使用者偏好設定
|
19 |
+
top_n: 要返回的推薦數量
|
20 |
+
|
21 |
+
Returns:
|
22 |
+
List[Dict]: 排序後的推薦品種列表
|
23 |
+
"""
|
24 |
+
all_breeds = []
|
25 |
+
for breed_info in breed_database:
|
26 |
+
score = calculate_compatibility_score(breed_info, user_prefs)
|
27 |
+
if score is not None: # 只添加未被過濾的品種
|
28 |
+
all_breeds.append({
|
29 |
+
'breed': breed_info['Breed'],
|
30 |
+
'final_score': score['overall'],
|
31 |
+
'base_score': score.get('base_score', 0),
|
32 |
+
'bonus_score': score.get('bonus_score', 0),
|
33 |
+
'size': breed_info['Size'],
|
34 |
+
'scores': score
|
35 |
+
})
|
36 |
+
|
37 |
+
# 根據體型偏好過濾
|
38 |
+
if user_prefs.size_preference != "no_preference":
|
39 |
+
filtered_breeds = [b for b in all_breeds if b['size'].lower() == user_prefs.size_preference.lower()]
|
40 |
+
# 如果符合體型的品種太少,調整返回數量
|
41 |
+
if len(filtered_breeds) < 5: # 設定最少要有5種品種
|
42 |
+
top_n = len(filtered_breeds)
|
43 |
+
else:
|
44 |
+
filtered_breeds = all_breeds
|
45 |
+
|
46 |
+
# 為每個品種添加排名
|
47 |
+
sorted_breeds = sorted(filtered_breeds, key=lambda x: x['final_score'], reverse=True)
|
48 |
+
for i, breed in enumerate(sorted_breeds, 1):
|
49 |
+
breed['rank'] = i
|
50 |
+
|
51 |
+
return sorted_breeds[:top_n]
|
52 |
+
|
53 |
def create_recommendation_tab(UserPreferences, get_breed_recommendations, format_recommendation_html, history_component):
|
54 |
|
55 |
with gr.TabItem("Breed Recommendation"):
|