def main(): argc = len(sys.argv) if argc < 2: sys.stderr.write("Error: bad parameters\n") print_help() sys.exit(1) csv_file = sys.argv[1] csv_fd = open(csv_file, "r") csv_file = os.path.basename(csv_file) normal_msgs = con_par.get_messages(csv_fd) parser = con_par.IEC104Parser(normal_msgs) parser.parse_conversations() lines = parser.get_all_conversations(abstraction) index = int(len(lines)*TRAINING) training, testing = lines[:index], lines[index:] tree = fpt.FPT() for line in training: tree.add_string(line) alpha = 0.05 t0 = int(math.log(index, 2)) aut = alergia.alergia(tree, alpha, t0) aut.rename_states() fa = aut.normalize() store_filename = os.path.splitext(os.path.basename(csv_file))[0] store_filename = "{0}a{1}t{2}".format(store_filename, alpha, t0) fa_fd = open("{0}.fa".format(store_filename), "w") fa_fd.write(fa.to_fa_format(True)) fa_fd.close() legend = "File: {0}, alpha: {1}, t0: {2}".format(csv_file, alpha, t0) dot_fd = open("{0}.dot".format(store_filename), "w") dot_fd.write(fa.to_dot(aggregate=False, legend=legend)) dot_fd.close() miss = 0 for line in testing: prob = fa.string_prob_deterministic(line) if prob is None: miss += 1 print("File: {0}".format(csv_file)) print("alpha: {0}, t0: {1}".format(alpha, t0)) print("States {0}".format(len(aut.get_states()))) print("Testing: {0}/{1} (missclassified/all)".format(miss, len(testing))) if len(testing) > 0: print("Accuracy: {0}".format((len(testing)-miss)/float(len(testing)))) csv_fd.close()
def learn_proc_pa(training): tree = fpt.FPT() tree.add_string_list(training) alpha = 0.05 if len(training) > 0: t0 = int(math.log(len(training), 2)) else: t0 = 1 aut = alergia.alergia(tree, alpha, t0) aut.rename_states() return aut.normalize()
def learn_proc_pta(training): tree = fpt.FPT() tree.add_string_list(training) aut = tree aut.rename_states() return aut.normalize()
def create_fpt(ln, ren_dict): tree = fpt.FPT() lines = con_par.rename_values(ln, ren_dict) tree.add_string_list(ln) return tree