Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
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
Exemple #4
0
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()
Exemple #5
0
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()