def evaluate()

in src/evaluate.py [0:0]


def evaluate(pr_pairs, gt_pairs):
    gt_set = set([tuple(x) for x in gt_pairs])
    pr_set = set([tuple(x) for x in pr_pairs])
    prec = sum([1 if x in gt_set else 0 for x in pr_set]) \
         / float(len(pr_set)) if len(pr_set) > 0 else 0
    rec = sum([1 if x in pr_set else 0 for x in gt_set]) \
        / float(len(gt_set)) if len(gt_set) > 0 else 0
    gt_src_words = set([x[0] for x in gt_pairs])
    pr_src_words = set([x[0] for x in pr_pairs])
    oov_number = sum([1 if x not in pr_src_words else 0 for x in gt_src_words])
    oov_rate = oov_number / float(len(gt_src_words))
    eval_result = {
        'oov_number': oov_number,
        'oov_rate': oov_rate,
        'precision': prec,
        'recall': rec,
        'f1': 2.0 * prec * rec / (prec + rec) if prec > 0 or rec > 0 else 0.0
    }
    return eval_result