Esempio n. 1
0
def pronunciation_performance(target, source, env):
    with meta_open(source[0].rstr()) as gold_fd, meta_open(source[1].rstr()) as gen_fd:
        tp, fp, fn = 0, 0, 0
        gold = Pronunciations(gold_fd)
        gen = Pronunciations(gen_fd)
        logging.info("gold phone inventory: %s", " ".join(gold.phones()))
        logging.info("generated phone inventory: %s", " ".join(gen.phones()))
        for x in gen.get_words().intersection(gold.get_words()):
            gold_prons = set(map(tuple, [map(str.lower, y) for y in gold[x].values()]))
            gen_prons = set(map(tuple, [map(str.lower, y) for y in gen[x].values()]))            
            for go_p in gold_prons:
                if go_p in gen_prons:
                    tp += 1
                else:
                    fn += 1
            for ge_p in gen_prons:
                if ge_p not in gold_prons:
                    fp += 1
        prec = float(tp) / (tp + fp)
        rec = float(tp) / (tp + fn)
        f = 2 * (prec * rec) / (prec + rec)
        with meta_open(target[0].rstr(), "w") as ofd:
            ofd.write("%f %f %f\n" % (prec, rec, f))
    return None