aac-metrics 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/aac-metrics/loader.rb +2 -0
- data/lib/aac-metrics/metrics.rb +43 -17
- data/sets/l84ns-2f9h2f9.en.obfset +82466 -0
- data/sets/wp108-c428d7f2dc.en.analysis +16243 -15551
- data/sets/wp108-c428d7f2dc.en.obfset +7906 -2634
- data/sets/wp20-163743e671.obfset +266 -78
- data/sets/wp42-f67dc6f4a9.obfset +3767 -1549
- data/sets/wp60-ce5120b0d2.obfset +5694 -2385
- data/sets/wp80-dad3aeda5e.common.en.analysis +15423 -14787
- data/sets/wp80-dad3aeda5e.common.en.obfset +8049 -2846
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bddb8e430a21868a5b26312fb5924f36b914446dc212d849330462768fd9b233
|
4
|
+
data.tar.gz: c5ddd0e2b835678f0dabf8743099b29d462612d94a4aa4dd261e1cb7337eaa02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 876e09d6be2b2e2b7579c11bb06367296ee7fbba627db0f8d421b4e60d2b7042d9a41433f9b1af10c78a6fc8ac84077170224e059a5a5ba30db6b217cab56936
|
7
|
+
data.tar.gz: 5072598db0226690da77985e4e1ed760b24f0d0edc2bc99a5961e59d7f8e8bfa549073f4d0b223559ba48d7d2348556041d8b513944e5427c9c158db3b467f6c
|
data/lib/aac-metrics/loader.rb
CHANGED
@@ -20,6 +20,7 @@ module AACMetrics::Loader
|
|
20
20
|
}
|
21
21
|
if button['load_board'] && button['load_board']['id']
|
22
22
|
new_button['load_board'] = {'id' => button['load_board']['id']}
|
23
|
+
new_button['load_board']['add_to_sentence'] = true if button['load_board']['add_to_sentence']
|
23
24
|
end
|
24
25
|
new_board['buttons'].push(new_button)
|
25
26
|
end
|
@@ -177,6 +178,7 @@ module AACMetrics::Loader
|
|
177
178
|
else
|
178
179
|
puts "Link found with no access #{btn['load_board'].to_json}"
|
179
180
|
end
|
181
|
+
new_btn['load_board']['add_to_sentence'] = true if new_btn['load_board'] && btn['load_board']['add_to_sentence']
|
180
182
|
elsif btn['action']
|
181
183
|
# TODO: track keyboard actions and don't
|
182
184
|
# treat action buttons for metrics
|
data/lib/aac-metrics/metrics.rb
CHANGED
@@ -124,9 +124,9 @@ module AACMetrics::Metrics
|
|
124
124
|
button_id = (board[:board]['grid']['order'][row_idx] || [])[col_idx]
|
125
125
|
button = board[:board]['buttons'].detect{|b| b['id'] == button_id }
|
126
126
|
if button && button['clone_id'] && set_pcts[button['clone_id']]
|
127
|
-
reuse_discount +=
|
127
|
+
reuse_discount += REUSED_CLONE_FROM_OTHER_BONUS * set_pcts[button['clone_id']]
|
128
128
|
elsif button && button['semantic_id'] && set_pcts[button['semantic_id']]
|
129
|
-
reuse_discount +=
|
129
|
+
reuse_discount += REUSED_SEMANTIC_FROM_OTHER_BONUS * set_pcts[button['semantic_id']]
|
130
130
|
end
|
131
131
|
end
|
132
132
|
end
|
@@ -195,9 +195,13 @@ module AACMetrics::Metrics
|
|
195
195
|
button_effort = board_effort
|
196
196
|
if board_pcts[button['semantic_id']]
|
197
197
|
# TODO: Pull out these magic numbers
|
198
|
+
prior = button_effort
|
198
199
|
button_effort = [button_effort, button_effort * SAME_LOCATION_AS_PRIOR_DISCOUNT / board_pcts[button['semantic_id']]].min
|
200
|
+
# puts " #{button['label']} #{prior.round(1)} - #{prior - button_effort}"
|
199
201
|
elsif board_pcts["upstream-#{button['semantic_id']}"]
|
202
|
+
prior = button_effort
|
200
203
|
button_effort = [button_effort, button_effort * RECOGNIZABLE_SEMANTIC_FROM_PRIOR_DISCOUNT / board_pcts["upstream-#{button['semantic_id']}"]].min
|
204
|
+
# puts " #{button['label']} #{prior.round(1)} - #{prior - button_effort}"
|
201
205
|
end
|
202
206
|
if board_pcts[button['clone_id']]
|
203
207
|
button_effort = [button_effort, button_effort * SAME_LOCATION_AS_PRIOR_DISCOUNT / board_pcts[button['clone_id']]].min
|
@@ -246,6 +250,10 @@ module AACMetrics::Metrics
|
|
246
250
|
effort += board[:prior_effort] || 0
|
247
251
|
prior_buttons += 1
|
248
252
|
|
253
|
+
# TODO: If any board links are sticky, or if
|
254
|
+
# the board set isn't auto-home, or any board links
|
255
|
+
# are add_to_sentence, then the logic will be different
|
256
|
+
# for calculating effort scores, since the route matters
|
249
257
|
if button['load_board']
|
250
258
|
try_visit = false
|
251
259
|
# For linked buttons, only traverse if
|
@@ -274,7 +282,8 @@ module AACMetrics::Metrics
|
|
274
282
|
})
|
275
283
|
end
|
276
284
|
end
|
277
|
-
|
285
|
+
end
|
286
|
+
if !button['load_board'] || button['load_board']['add_to_sentence']
|
278
287
|
word = button['label']
|
279
288
|
existing = known_buttons[word]
|
280
289
|
if !existing || effort < existing[:effort] #board[:level] < existing[:level]
|
@@ -335,11 +344,11 @@ module AACMetrics::Metrics
|
|
335
344
|
SKIPPED_VISUAL_SCAN_DISTANCE_MULTIPLIER = 0.5
|
336
345
|
SAME_LOCATION_AS_PRIOR_DISCOUNT = 0.1
|
337
346
|
RECOGNIZABLE_SEMANTIC_FROM_PRIOR_DISCOUNT = 0.5
|
338
|
-
RECOGNIZABLE_SEMANTIC_FROM_OTHER_DISCOUNT = 0.
|
347
|
+
RECOGNIZABLE_SEMANTIC_FROM_OTHER_DISCOUNT = 0.5
|
348
|
+
REUSED_SEMANTIC_FROM_OTHER_BONUS = 0.0025
|
339
349
|
RECOGNIZABLE_CLONE_FROM_PRIOR_DISCOUNT = 0.33
|
340
|
-
RECOGNIZABLE_CLONE_FROM_OTHER_DISCOUNT = 0.
|
341
|
-
|
342
|
-
REUSED_CLONE_FROM_OTHER_DISCOUNT = 0.005
|
350
|
+
RECOGNIZABLE_CLONE_FROM_OTHER_DISCOUNT = 0.33
|
351
|
+
REUSED_CLONE_FROM_OTHER_BONUS = 0.005
|
343
352
|
|
344
353
|
def self.button_size_effort(rows, cols)
|
345
354
|
BUTTON_SIZE_MULTIPLIER * (rows + cols) / 2
|
@@ -486,6 +495,7 @@ module AACMetrics::Metrics
|
|
486
495
|
res[:cores] = {
|
487
496
|
:common => {name: "Common Word List", list: common_words, average_effort: common_effort, comp_effort: comp_effort}
|
488
497
|
}
|
498
|
+
res[:care_components] = {}
|
489
499
|
target_effort_tally = 0.0
|
490
500
|
comp_effort_tally = 0.0
|
491
501
|
# For each core list, find any missing words, and compute
|
@@ -515,6 +525,7 @@ module AACMetrics::Metrics
|
|
515
525
|
end
|
516
526
|
# Fallback penalty for missing word
|
517
527
|
effort ||= spelling_effort(word)
|
528
|
+
reffort = effort
|
518
529
|
list_effort += effort
|
519
530
|
|
520
531
|
effort = comp_efforts[word]
|
@@ -523,6 +534,7 @@ module AACMetrics::Metrics
|
|
523
534
|
end
|
524
535
|
effort ||= spelling_effort(word)
|
525
536
|
comp_effort += effort
|
537
|
+
# puts "#{word} - #{reffort.round(1)} - #{effort.round(1)}"
|
526
538
|
end
|
527
539
|
if missing.length > 0
|
528
540
|
# puts "MISSING FROM #{list['id']} (#{missing.length}):"
|
@@ -535,8 +547,10 @@ module AACMetrics::Metrics
|
|
535
547
|
comp_effort_tally += comp_effort
|
536
548
|
res[:cores][list['id']] = {name: list['name'], list: list['words'], average_effort: list_effort, comp_effort: comp_effort}
|
537
549
|
end
|
538
|
-
|
539
|
-
|
550
|
+
res[:care_components][:core] = (target_effort_tally / core_lists.to_a.length) * 5.0
|
551
|
+
target_effort_tally = res[:care_components][:core]
|
552
|
+
res[:care_components][:comp_core] = (comp_effort_tally / core_lists.to_a.length) * 5.0
|
553
|
+
comp_effort_tally = res[:care_components][:comp_core]
|
540
554
|
|
541
555
|
# TODO: Assemble or allow a battery of word combinations,
|
542
556
|
# and calculate the level of effort for each sequence,
|
@@ -584,8 +598,10 @@ module AACMetrics::Metrics
|
|
584
598
|
comp_effort_score = comp_effort_score / words.length
|
585
599
|
res[:sentences] << {sentence: words.join(' '), words: words, effort: target_effort_score, comp_effort: comp_effort_score}
|
586
600
|
end
|
587
|
-
|
588
|
-
|
601
|
+
res[:care_components][:sentences] = res[:sentences].map{|s| s[:effort] }.sum.to_f / res[:sentences].length.to_f * 3.0
|
602
|
+
target_effort_tally += res[:care_components][:sentences]
|
603
|
+
res[:care_components][:comp_sentences] = res[:sentences].map{|s| s[:comp_effort] }.sum.to_f / res[:sentences].length.to_f * 3.0
|
604
|
+
comp_effort_tally += res[:care_components][:comp_sentences]
|
589
605
|
|
590
606
|
res[:fringe_words] = []
|
591
607
|
fringe.each do |word|
|
@@ -596,6 +612,7 @@ module AACMetrics::Metrics
|
|
596
612
|
if !effort
|
597
613
|
synonym_words.each{|w| effort ||= target_efforts[w] }
|
598
614
|
end
|
615
|
+
# puts "!#{word}" unless effort
|
599
616
|
effort ||= spelling_effort(word)
|
600
617
|
target_effort_score += effort
|
601
618
|
|
@@ -607,8 +624,10 @@ module AACMetrics::Metrics
|
|
607
624
|
comp_effort_score += effort
|
608
625
|
res[:fringe_words] << {word: word, effort: target_effort_score, comp_effort: comp_effort_score}
|
609
626
|
end
|
610
|
-
|
611
|
-
|
627
|
+
res[:care_components][:fringe] = res[:fringe_words].map{|s| s[:effort] }.sum.to_f / res[:fringe_words].length.to_f * 2.0
|
628
|
+
target_effort_tally += res[:care_components][:fringe]
|
629
|
+
res[:care_components][:comp_fringe] = res[:fringe_words].map{|s| s[:comp_effort] }.sum.to_f / res[:fringe_words].length.to_f * 2.0
|
630
|
+
comp_effort_tally += res[:care_components][:comp_fringe]
|
612
631
|
|
613
632
|
res[:common_fringe_words] = []
|
614
633
|
common_fringe.each do |word|
|
@@ -630,16 +649,23 @@ module AACMetrics::Metrics
|
|
630
649
|
comp_effort_score += effort
|
631
650
|
res[:common_fringe_words] << {word: word, effort: target_effort_score, comp_effort: comp_effort_score}
|
632
651
|
end
|
633
|
-
|
634
|
-
|
652
|
+
res[:care_components][:common_fringe] = res[:common_fringe_words].map{|s| s[:effort] }.sum.to_f / res[:common_fringe_words].length.to_f * 1.0
|
653
|
+
target_effort_tally += res[:care_components][:common_fringe]
|
654
|
+
res[:care_components][:comp_common_fringe] = res[:common_fringe_words].map{|s| s[:comp_effort] }.sum.to_f / res[:common_fringe_words].length.to_f * 1.0
|
655
|
+
comp_effort_tally += res[:care_components][:comp_common_fringe]
|
635
656
|
|
636
657
|
target_effort_tally += 70 # placeholder value for future added calculations
|
637
658
|
comp_effort_tally += 70
|
638
659
|
|
660
|
+
# puts target_effort_tally
|
661
|
+
# puts comp_effort_tally
|
662
|
+
# puts (target_effort_tally - comp_effort_tally).abs
|
663
|
+
# puts JSON.pretty_generate(res[:care_components])
|
664
|
+
# raise 'arf'
|
639
665
|
|
640
666
|
|
641
|
-
res[:target_effort_score] = target_effort_tally
|
642
|
-
res[:comp_effort_score] = comp_effort_tally
|
667
|
+
res[:target_effort_score] = [0.0, 350.0 - target_effort_tally].max
|
668
|
+
res[:comp_effort_score] = [0.0, 350.0 - comp_effort_tally].max
|
643
669
|
# puts "CONSIDER MAKING EASIER"
|
644
670
|
res[:high_effort_words] = too_hard
|
645
671
|
# puts too_hard.join(' ')
|