Spaces:
Running
Running
Update scoring_calculation_system.py
Browse files- scoring_calculation_system.py +66 -67
scoring_calculation_system.py
CHANGED
@@ -1660,9 +1660,34 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
|
|
1660 |
|
1661 |
# 確保最終分數在合理範圍內
|
1662 |
return max(0.15, min(1.0, final_score))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1663 |
|
|
|
|
|
|
|
|
|
|
|
1664 |
|
1665 |
-
|
|
|
|
|
|
|
1666 |
print("\n=== 開始計算品種相容性分數 ===")
|
1667 |
print(f"處理品種: {breed_info.get('Breed', 'Unknown')}")
|
1668 |
print(f"品種信息: {breed_info}")
|
@@ -1701,27 +1726,24 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
|
|
1701 |
)
|
1702 |
}
|
1703 |
|
1704 |
-
|
1705 |
-
|
1706 |
-
|
1707 |
-
breed_info=breed_info
|
1708 |
-
)
|
1709 |
-
|
1710 |
# 計算環境適應性加成
|
1711 |
adaptability_bonus = calculate_environmental_fit(breed_info, user_prefs)
|
1712 |
-
|
1713 |
# 整合最終分數和加成
|
1714 |
final_score = (final_score * 0.9) + (adaptability_bonus * 0.1)
|
1715 |
final_score = amplify_score_extreme(final_score)
|
1716 |
-
|
1717 |
# 更新並返回完整的評分結果
|
1718 |
scores.update({
|
1719 |
'overall': final_score,
|
1720 |
'adaptability_bonus': adaptability_bonus
|
1721 |
})
|
1722 |
-
|
1723 |
return scores
|
1724 |
-
|
1725 |
except Exception as e:
|
1726 |
print(f"\n!!!!! 發生嚴重錯誤 !!!!!")
|
1727 |
print(f"錯誤類型: {type(e).__name__}")
|
@@ -1731,29 +1753,6 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
|
|
1731 |
return {k: 0.6 for k in ['space', 'exercise', 'grooming', 'experience', 'health', 'noise', 'overall']}
|
1732 |
|
1733 |
|
1734 |
-
def calculate_environmental_fit(breed_info: dict, user_prefs: UserPreferences) -> float:
|
1735 |
-
"""計算品種與環境的適應性加成"""
|
1736 |
-
adaptability_score = 0.0
|
1737 |
-
description = breed_info.get('Description', '').lower()
|
1738 |
-
temperament = breed_info.get('Temperament', '').lower()
|
1739 |
-
|
1740 |
-
# 環境適應性評估
|
1741 |
-
if user_prefs.living_space == 'apartment':
|
1742 |
-
if 'adaptable' in temperament or 'apartment' in description:
|
1743 |
-
adaptability_score += 0.1
|
1744 |
-
if breed_info.get('Size') == 'Small':
|
1745 |
-
adaptability_score += 0.05
|
1746 |
-
elif user_prefs.living_space == 'house_large':
|
1747 |
-
if 'active' in temperament or 'energetic' in description:
|
1748 |
-
adaptability_score += 0.1
|
1749 |
-
|
1750 |
-
# 氣候適應性
|
1751 |
-
if user_prefs.climate in description or user_prefs.climate in temperament:
|
1752 |
-
adaptability_score += 0.05
|
1753 |
-
|
1754 |
-
return min(0.2, adaptability_score)
|
1755 |
-
|
1756 |
-
|
1757 |
# def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreferences, breed_info: dict) -> float:
|
1758 |
# """
|
1759 |
# 改進的品種相容性評分系統
|
@@ -1846,6 +1845,39 @@ def calculate_environmental_fit(breed_info: dict, user_prefs: UserPreferences) -
|
|
1846 |
# return min(1.0, max(0.0, (final_score * 0.85) + (breed_bonus * 0.15)))
|
1847 |
|
1848 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1849 |
def calculate_compatibility_score(scores: dict, user_prefs: UserPreferences, breed_info: dict) -> float:
|
1850 |
"""
|
1851 |
計算品種與使用者的整體相容性分數
|
@@ -1993,39 +2025,6 @@ def calculate_compatibility_score(scores: dict, user_prefs: UserPreferences, bre
|
|
1993 |
|
1994 |
# 確保分數在合理範圍內並保留兩位小數
|
1995 |
return round(max(60.0, min(95.0, final_score)), 2)
|
1996 |
-
|
1997 |
-
|
1998 |
-
# def amplify_score_extreme(score: float) -> float:
|
1999 |
-
# """
|
2000 |
-
# 改進的分數轉換函數
|
2001 |
-
# 提供更大的分數範圍和更明顯的差異
|
2002 |
-
|
2003 |
-
# 轉換邏輯:
|
2004 |
-
# - 極差匹配 (0.0-0.3) -> 60-68%
|
2005 |
-
# - 較差匹配 (0.3-0.5) -> 68-75%
|
2006 |
-
# - 中等匹配 (0.5-0.7) -> 75-85%
|
2007 |
-
# - 良好匹配 (0.7-0.85) -> 85-92%
|
2008 |
-
# - 優秀匹配 (0.85-1.0) -> 92-95%
|
2009 |
-
# """
|
2010 |
-
# if score < 0.3:
|
2011 |
-
# # 極差匹配:快速線性增長
|
2012 |
-
# return 0.60 + (score / 0.3) * 0.08
|
2013 |
-
# elif score < 0.5:
|
2014 |
-
# # 較差匹配:緩慢增長
|
2015 |
-
# position = (score - 0.3) / 0.2
|
2016 |
-
# return 0.68 + position * 0.07
|
2017 |
-
# elif score < 0.7:
|
2018 |
-
# # 中等匹配:穩定線性增長
|
2019 |
-
# position = (score - 0.5) / 0.2
|
2020 |
-
# return 0.75 + position * 0.10
|
2021 |
-
# elif score < 0.85:
|
2022 |
-
# # 良好匹配:加速增長
|
2023 |
-
# position = (score - 0.7) / 0.15
|
2024 |
-
# return 0.85 + position * 0.07
|
2025 |
-
# else:
|
2026 |
-
# # 優秀匹配:最後衝刺
|
2027 |
-
# position = (score - 0.85) / 0.15
|
2028 |
-
# return 0.92 + position * 0.03
|
2029 |
|
2030 |
|
2031 |
def amplify_score_extreme(score: float) -> float:
|
|
|
1660 |
|
1661 |
# 確保最終分數在合理範圍內
|
1662 |
return max(0.15, min(1.0, final_score))
|
1663 |
+
|
1664 |
+
|
1665 |
+
def calculate_environmental_fit(breed_info: dict, user_prefs: UserPreferences) -> float:
|
1666 |
+
"""計算品種與環境的適應性加成"""
|
1667 |
+
adaptability_score = 0.0
|
1668 |
+
description = breed_info.get('Description', '').lower()
|
1669 |
+
temperament = breed_info.get('Temperament', '').lower()
|
1670 |
+
|
1671 |
+
# 環境適應性評估
|
1672 |
+
if user_prefs.living_space == 'apartment':
|
1673 |
+
if 'adaptable' in temperament or 'apartment' in description:
|
1674 |
+
adaptability_score += 0.1
|
1675 |
+
if breed_info.get('Size') == 'Small':
|
1676 |
+
adaptability_score += 0.05
|
1677 |
+
elif user_prefs.living_space == 'house_large':
|
1678 |
+
if 'active' in temperament or 'energetic' in description:
|
1679 |
+
adaptability_score += 0.1
|
1680 |
|
1681 |
+
# 氣候適應性
|
1682 |
+
if user_prefs.climate in description or user_prefs.climate in temperament:
|
1683 |
+
adaptability_score += 0.05
|
1684 |
+
|
1685 |
+
return min(0.2, adaptability_score)
|
1686 |
|
1687 |
+
|
1688 |
+
def calculate_breed_matching(breed_info: dict, user_prefs: UserPreferences) -> dict:
|
1689 |
+
"""計算品種的整體評分與匹配度"""
|
1690 |
+
try:
|
1691 |
print("\n=== 開始計算品種相容性分數 ===")
|
1692 |
print(f"處理品種: {breed_info.get('Breed', 'Unknown')}")
|
1693 |
print(f"品種信息: {breed_info}")
|
|
|
1726 |
)
|
1727 |
}
|
1728 |
|
1729 |
+
# 計算最終相容性分數
|
1730 |
+
final_score = calculate_compatibility_score(scores, user_prefs, breed_info)
|
1731 |
+
|
|
|
|
|
|
|
1732 |
# 計算環境適應性加成
|
1733 |
adaptability_bonus = calculate_environmental_fit(breed_info, user_prefs)
|
1734 |
+
|
1735 |
# 整合最終分數和加成
|
1736 |
final_score = (final_score * 0.9) + (adaptability_bonus * 0.1)
|
1737 |
final_score = amplify_score_extreme(final_score)
|
1738 |
+
|
1739 |
# 更新並返回完整的評分結果
|
1740 |
scores.update({
|
1741 |
'overall': final_score,
|
1742 |
'adaptability_bonus': adaptability_bonus
|
1743 |
})
|
1744 |
+
|
1745 |
return scores
|
1746 |
+
|
1747 |
except Exception as e:
|
1748 |
print(f"\n!!!!! 發生嚴重錯誤 !!!!!")
|
1749 |
print(f"錯誤類型: {type(e).__name__}")
|
|
|
1753 |
return {k: 0.6 for k in ['space', 'exercise', 'grooming', 'experience', 'health', 'noise', 'overall']}
|
1754 |
|
1755 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1756 |
# def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreferences, breed_info: dict) -> float:
|
1757 |
# """
|
1758 |
# 改進的品種相容性評分系統
|
|
|
1845 |
# return min(1.0, max(0.0, (final_score * 0.85) + (breed_bonus * 0.15)))
|
1846 |
|
1847 |
|
1848 |
+
# def amplify_score_extreme(score: float) -> float:
|
1849 |
+
# """
|
1850 |
+
# 改進的分數轉換函數
|
1851 |
+
# 提供更大的分數範圍和更明顯的差異
|
1852 |
+
|
1853 |
+
# 轉換邏輯:
|
1854 |
+
# - 極差匹配 (0.0-0.3) -> 60-68%
|
1855 |
+
# - 較差匹配 (0.3-0.5) -> 68-75%
|
1856 |
+
# - 中等匹配 (0.5-0.7) -> 75-85%
|
1857 |
+
# - 良好匹配 (0.7-0.85) -> 85-92%
|
1858 |
+
# - 優秀匹配 (0.85-1.0) -> 92-95%
|
1859 |
+
# """
|
1860 |
+
# if score < 0.3:
|
1861 |
+
# # 極差匹配:快速線性增長
|
1862 |
+
# return 0.60 + (score / 0.3) * 0.08
|
1863 |
+
# elif score < 0.5:
|
1864 |
+
# # 較差匹配:緩慢增長
|
1865 |
+
# position = (score - 0.3) / 0.2
|
1866 |
+
# return 0.68 + position * 0.07
|
1867 |
+
# elif score < 0.7:
|
1868 |
+
# # 中等匹配:穩定線性增長
|
1869 |
+
# position = (score - 0.5) / 0.2
|
1870 |
+
# return 0.75 + position * 0.10
|
1871 |
+
# elif score < 0.85:
|
1872 |
+
# # 良好匹配:加速增長
|
1873 |
+
# position = (score - 0.7) / 0.15
|
1874 |
+
# return 0.85 + position * 0.07
|
1875 |
+
# else:
|
1876 |
+
# # 優秀匹配:最後衝刺
|
1877 |
+
# position = (score - 0.85) / 0.15
|
1878 |
+
# return 0.92 + position * 0.03
|
1879 |
+
|
1880 |
+
|
1881 |
def calculate_compatibility_score(scores: dict, user_prefs: UserPreferences, breed_info: dict) -> float:
|
1882 |
"""
|
1883 |
計算品種與使用者的整體相容性分數
|
|
|
2025 |
|
2026 |
# 確保分數在合理範圍內並保留兩位小數
|
2027 |
return round(max(60.0, min(95.0, final_score)), 2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2028 |
|
2029 |
|
2030 |
def amplify_score_extreme(score: float) -> float:
|