kofdai commited on
Commit
bba9f67
·
verified ·
1 Parent(s): 6df88eb

Upload certainty_calculation_formula.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. certainty_calculation_formula.py +58 -0
certainty_calculation_formula.py ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ def calculate_certainty(
2
+ initial_review: bool,
3
+ expert_count: int,
4
+ external_sources: int,
5
+ time_stability_bonus: float,
6
+ consensus_multiplier: float,
7
+ ) -> int:
8
+ """
9
+ Ilm-Athens DB層設計書に基づき、知識タイルの確実性スコアを計算します。
10
+
11
+ Args:
12
+ initial_review (bool): 初期レビューが完了したかどうか (完了で1, 未了で0)。
13
+ expert_count (int): 確認した専門家の人数。
14
+ external_sources (int): 参照された外部ソースの数。
15
+ time_stability_bonus (float): 時間的安定性によるボーナス係数 (例: 0.0-1.0)。
16
+ consensus_multiplier (float): 合意形成の度合いによる乗数 (例: 0.0-1.0)。
17
+
18
+ Returns:
19
+ int: 計算された確実性スコア (0-100)。
20
+ """
21
+
22
+ initial_review_score = 1 if initial_review else 0
23
+
24
+ score = (
25
+ initial_review_score * 30 +
26
+ expert_count * 20 +
27
+ external_sources * 10 +
28
+ time_stability_bonus * 15 +
29
+ consensus_multiplier * 25
30
+ )
31
+
32
+ return min(100, int(score))
33
+
34
+ def calculate_granularity(word_count: int) -> int:
35
+ """
36
+ Ilm-Athens DB層設計書に基づき、知識の粒度を計算します。
37
+ 単語数ベースの推定式を使用します。
38
+
39
+ Args:
40
+ word_count (int): 知識コンテンツの単語数。
41
+
42
+ Returns:
43
+ int: 計算された粒度スコア (1-1000)。
44
+ """
45
+ import math
46
+
47
+ if word_count <= 0:
48
+ return 1
49
+
50
+ # log2(0) は未定義のため、word_countが0の場合は1として扱います。
51
+ # 設計書では⌈log₂(word_count) × 100⌉となっていますが、
52
+ # 実際にはlog2(1)=0となるため、word_count=1でも結果が0になります。
53
+ # 最小値を1とするため、log2(word_count + 1)とするか、結果に+1するなどの調整が考えられます。
54
+ # ここでは簡易的に math.log2(word_count) を使用します。
55
+ granularity_score = math.ceil(math.log2(word_count) * 100) if word_count > 0 else 0
56
+
57
+
58
+ return min(1000, max(1, int(granularity_score)))