2022-06-08 17:01:39 +08:00
|
|
|
from DBHelper.MongoHelperInstance import DB_GUA
|
2022-06-06 16:58:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
class ScoreUtils(object):
|
|
|
|
"""打分工具类"""
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def ladder_score_positive(x, ref):
|
|
|
|
"""正相关阶梯打分"""
|
|
|
|
|
|
|
|
w, b1, b2, b3, b4, b5 = ref['weight'], ref['b1'], ref['b2'], ref['b3'], ref['b4'], ref['b5']
|
|
|
|
|
|
|
|
if x is None:
|
|
|
|
s = 0
|
|
|
|
elif x > b1:
|
|
|
|
s = w
|
|
|
|
elif b2['s'] < x <= b2['e']:
|
|
|
|
s = w * 0.9
|
|
|
|
elif b3['s'] < x <= b3['e']:
|
|
|
|
s = w * 0.8
|
|
|
|
elif b4['s'] < x <= b4['e']:
|
|
|
|
s = w * 0.7
|
|
|
|
elif x <= b5:
|
|
|
|
s = w * 0.6
|
|
|
|
else:
|
|
|
|
s = 0
|
2022-06-08 17:01:39 +08:00
|
|
|
return round(s, 2)
|
2022-06-06 16:58:08 +08:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def ladder_score_negative(x, ref):
|
|
|
|
"""反相关阶梯打分"""
|
|
|
|
|
|
|
|
w, b1, b2, b3, b4, b5 = ref['weight'], ref['b1'], ref['b2'], ref['b3'], ref['b4'], ref['b5']
|
|
|
|
|
|
|
|
if x is None:
|
|
|
|
s = 0
|
|
|
|
elif x < b1:
|
|
|
|
s = w
|
|
|
|
elif b2['s'] <= x < b2['e']:
|
|
|
|
s = w * 0.9
|
|
|
|
elif b3['s'] <= x < b3['e']:
|
|
|
|
s = w * 0.8
|
|
|
|
elif b4['s'] <= x < b4['e']:
|
|
|
|
s = w * 0.7
|
|
|
|
elif x >= b5:
|
|
|
|
s = w * 0.6
|
|
|
|
else:
|
|
|
|
s = 0
|
2022-06-08 17:01:39 +08:00
|
|
|
return round(s, 2)
|
2022-06-06 16:58:08 +08:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def ladder_score_centered(x, ref):
|
|
|
|
"""居中相关阶梯打分"""
|
|
|
|
|
|
|
|
w, b1, b2, b3, b4, b5 = ref['weight'], ref['b1'], ref['b2'], ref['b3'], ref['b4'], ref['b5']
|
|
|
|
|
|
|
|
if x is None:
|
|
|
|
s = 0
|
|
|
|
elif b1['s'] <= x <= b1['e']:
|
|
|
|
s = w
|
|
|
|
elif (b2['s1'] <= x < b2['e1']) or (b2['s2'] < x <= b2['e2']):
|
|
|
|
s = w * 0.9
|
|
|
|
elif (b3['s1'] < x < b3['e1']) or (b3['s2'] < x <= b3['e2']):
|
|
|
|
s = w * 0.8
|
|
|
|
elif b4['s'] < x < b4['e']:
|
|
|
|
s = w * 0.7
|
|
|
|
elif x >= b5['r'] or x <= b5['l']:
|
|
|
|
s = w * 0.6
|
|
|
|
else:
|
|
|
|
s = 0
|
2022-06-08 17:01:39 +08:00
|
|
|
return round(s, 2)
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def eval_rank_level(score):
|
|
|
|
"""
|
|
|
|
评测信用级别
|
|
|
|
注意: 级别参考必须以分数从大到小排序
|
|
|
|
"""
|
|
|
|
|
|
|
|
rank_ref_items = DB_GUA.find_all_data_with_single_sort(
|
|
|
|
"模型数据",
|
|
|
|
"RankRefs_v0.1",
|
|
|
|
{},
|
|
|
|
["rank", "score"],
|
|
|
|
{"score": -1}
|
|
|
|
)
|
|
|
|
|
|
|
|
rank_level = None
|
|
|
|
rank_refs = dict()
|
|
|
|
for item in rank_ref_items:
|
|
|
|
rank_refs = {**rank_refs, **{item['rank']: item['score']}}
|
|
|
|
|
|
|
|
for ref_key in rank_refs:
|
|
|
|
if score >= rank_refs[ref_key]:
|
|
|
|
rank_level = ref_key
|
|
|
|
break
|
|
|
|
return rank_level
|