def load_Q(self): """ This function opens the file containing the matrix R, whose name is defined by private variable rfile_name, it changes the contains of the file to a matrix and stores the contains in the private variable R. """ Q_str = fct.read_file(self.__qfile_name) Q_list = Q_str.strip().split('\n') self.__Q = np.zeros(((self.__nb_states,self.__nb_actions))) for i in range(self.__nb_states): Q_sublist = Q_list[i].strip().split(',') for j in range(len(Q_sublist)): self.__Q[i,j] = int(Q_sublist[j]) print("Matrix Q loaded ! ") return self.__Q
def load_list_grid(self): """ This function opens the file containing the matrix of all grid, whose name is defined by private variable list_grid_name, it changes the contains of the file to a matrix and stores the contains in the private variable list_grid. """ list_grid_str = fct.read_file(self.__list_grid_name)[1:-2] list_grid_list = list_grid_str.strip().split('], ') self.__list_grid = [] for i in range(len(list_grid_list)-1): list_grid_sublist = list_grid_list[i][1:].split(', ') sublist = [] for j in range(len(list_grid_sublist)): sublist.append(int(list_grid_sublist[j])) self.__list_grid.append(sublist) self.__nb_states = len(self.__list_grid) print("List of all grid loaded !") return self.__list_grid
def extract_blocks(input_file, k_base): r_input = [r for r in F.read_file(input_file)] blocks = [] for raw_terms in r_input: blocks.append(build_blocks(raw_terms, k_base)) return blocks
def evaluate_results_per_record(results, reference_file, attributes): reference = F.read_file(reference_file) record_evaluation = [] for result_record, ref in zip(results, reference): results_stats = {} reference_stats = {} right_answers = {} attr_evaluation = {} reference_record = ET.fromstring('<record>' + ref + '</record>') for reference_block in reference_record: if reference_block.tag not in reference_stats: reference_stats[reference_block.tag] = len( reference_block.text.split()) else: reference_stats[reference_block.tag] += len( reference_block.text.split()) for result_block in result_record: if result_block.attr != 'none' and result_block.attr not in results_stats: results_stats[result_block.attr] = len( result_block.value.split()) else: results_stats[result_block.attr] += len( result_block.value.split()) for result_block in result_record: for reference_block in reference_record: if result_block.value in F.normalize_str( reference_block.text ) and result_block.attr == reference_block.tag: if result_block.attr not in right_answers: right_answers[result_block.attr] = len( result_block.value.split()) else: right_answers[result_block.attr] += len( result_block.value.split()) break for attr in attributes: if attr in results_stats and attr in reference_stats and attr in right_answers: attr_evaluation[attr] = Metrics() attr_evaluation[ attr].precision = right_answers[attr] / results_stats[attr] attr_evaluation[ attr].recall = right_answers[attr] / reference_stats[attr] attr_evaluation[attr].calculate_f_measure() elif attr in results_stats and attr not in reference_stats: attr_evaluation[attr] = Metrics() record = Metrics() for attr in attr_evaluation: record.precision += attr_evaluation[attr].precision record.recall += attr_evaluation[attr].recall record.f_measure += attr_evaluation[attr].f_measure record.precision /= len(attr_evaluation) record.recall /= len(attr_evaluation) record.f_measure /= len(attr_evaluation) record_evaluation.append(record) final_metrics = Metrics() for record in record_evaluation: final_metrics.precision += record.precision final_metrics.recall += record.recall final_metrics.f_measure += record.f_measure final_metrics.precision /= len(record_evaluation) final_metrics.recall /= len(record_evaluation) final_metrics.f_measure /= len(record_evaluation) print('---------- Results Evaluation Per Record ----------') print('{:<20} {:<20} {:<18}'.format('Precision', 'Recall', 'F-Measure')) print('{:<20} {:<20} {:<18}'.format(final_metrics.precision, final_metrics.recall, final_metrics.f_measure)) print()
def evaluate_results_per_attribute(results, reference_file, attributes): reference = F.read_file(reference_file) results_stats = {} reference_stats = {} right_answers = {} attr_evaluation = {} record_evaluation = [] for attr in attributes: attr_evaluation[attr] = Metrics() for result_record, ref in zip(results, reference): reference_record = ET.fromstring('<record>' + ref + '</record>') for reference_block in reference_record: if reference_block.tag not in reference_stats: reference_stats[reference_block.tag] = len( reference_block.text.split()) else: reference_stats[reference_block.tag] += len( reference_block.text.split()) for result_block in result_record: if result_block.attr != 'none': if result_block.attr not in results_stats: results_stats[result_block.attr] = len( result_block.value.split()) else: results_stats[result_block.attr] += len( result_block.value.split()) for result_block in result_record: for reference_block in reference_record: if result_block.value in F.normalize_str( reference_block.text ) and result_block.attr == reference_block.tag: if result_block.attr not in right_answers: right_answers[result_block.attr] = len( result_block.value.split()) else: right_answers[result_block.attr] += len( result_block.value.split()) break for attr in attributes: if attr in results_stats and attr in reference_stats and attr in right_answers: attr_evaluation[ attr].precision = right_answers[attr] / results_stats[attr] attr_evaluation[ attr].recall = right_answers[attr] / reference_stats[attr] attr_evaluation[attr].calculate_f_measure() print() print('---------- Results Evaluation Per Attribute ----------') print('{:<15} {:<20} {:<20} {:<18}'.format('Attribute', 'Precision', 'Recall', 'F-Measure')) total_metrics = Metrics() non_zero_attrs = 0 for k, v in attr_evaluation.items(): if v.f_measure > 0: print('{:<15} {:<20} {:<20} {:<18}'.format(k, v.precision, v.recall, v.f_measure)) total_metrics.precision += v.precision total_metrics.recall += v.recall total_metrics.f_measure += v.f_measure non_zero_attrs += 1 total_metrics.precision /= non_zero_attrs total_metrics.recall /= non_zero_attrs total_metrics.f_measure /= non_zero_attrs print() print('{:<15} {:<20} {:<20} {:<18}'.format("Total", total_metrics.precision, total_metrics.recall, total_metrics.f_measure)) print()