def encode_best_rules(obj): """ Given the resulting rule clusters, package them into renderable JSON objects """ from scorpion.learners.cn2sd.rule import rule_to_json results = [] for yalias, rules in obj.rules.items(): for rule in rules: result = rule_to_json(rule, yalias=yalias) results.append(result) return results
def encode_top_k(obj): """ extract the top_k per c_value and encode as a dictionary: { c_val: [json_rules in descending influence order] } """ from scorpion.learners.cn2sd.rule import rule_to_json results = [] #defaultdict(lambda: defaultdict(list)) for yalias, top_k_rules in obj.top_k_rules.items(): for c_val, rules in top_k_rules.iteritems(): for rule in rules: rule.c_range = [c_val, c_val] result = rule_to_json(rule, yalias=yalias) result['c'] = round(c_val, 3) results.append(result) #results[yalias][c_val].append(result) return results
def update_rules(self, label, rules): q = """update rules set val=%s where reqid=%s and label = %s; insert into rules select %s, %s, %s where not exists ( select 1 from rules where reqid=%s and label = %s ); """ from scorpion.learners.cn2sd.rule import rule_to_json jsons = [] for rule in rules: if isinstance(rule, dict): jsons.append(rule) else: jsons.append(rule_to_json(rule, yalias=label)) val = json.dumps(jsons) self.db.execute(q, val, self.reqid, label, self.reqid, label, val, self.reqid, label)