zoukankan      html  css  js  c++  java
  • 文本摘要 Rouge 指标计算 python

    #Rouge gram-1,2,4,SU4
    def Rouge_1(pred, true):
        #结巴精准分词
        gram_1_true = list(jieba.cut(true))
        gram_1_pred = list(jieba.cut(pred))
        
        #统计参考摘要长度、预测摘要长度、预测正确的摘要长度
        total_num = len(gram_1_true)
        pred_num = len(gram_1_pred)
        correct_num =  len(set(gram_1_pred) & set(gram_1_true))
        return total_num, pred_num, correct_num
    
    
    def Rouge_2(pred, true):
        terms_true = list(jieba.cut(true))
        terms_pred = list(jieba.cut(pred))
        gram_2_pred = []
        gram_2_true = []
        temp = 0
    
        for i in range(len(terms_pred)-1):
             gram_2_pred.append(terms_pred[i] + terms_pred[i+1])
        for i in range(len(terms_true)-1):
             gram_2_true.append(terms_true[i] + terms_true[i+1])
        
        total_num = len(gram_2_true)
        pred_num = len(gram_2_pred)
        correct_num =  len(set(gram_2_pred) & set(gram_2_true))
        return total_num, pred_num, correct_num
    
    
    def Rouge_4(pred, true):
        terms_true = list(jieba.cut(true))
        terms_pred = list(jieba.cut(pred))
        gram_4_pred = []
        gram_4_true = []
    
        for i in range(len(terms_pred)-3):
             gram_4_pred.append(terms_pred[i] + terms_pred[i+1] + terms_pred[i+2] + terms_pred[i+3])
        for i in range(len(terms_true)-3):
             gram_4_true.append(terms_true[i] + terms_true[i+1] + terms_true[i+2] + terms_true[i+3])
        
        total_num = len(gram_4_true)
        pred_num = len(gram_4_pred)
        correct_num =  len(set(gram_4_pred) & set(gram_4_true))
        return total_num, pred_num, correct_num
    
    
    def update_rouge_score(rouge,data=None,mode='1'):
        if data:
            rouge['Rouge_'+ mode]['total_gram'] += int(data[0])
            rouge['Rouge_'+ mode]['pred_gram'] += int(data[1])
            rouge['Rouge_'+ mode]['correct_gram'] += int(data[2])
        else:
            corr = rouge['Rouge_'+ mode]['correct_gram']
            total = rouge['Rouge_'+ mode]['total_gram']
            pred = rouge['Rouge_'+ mode]['pred_gram']
            rouge['Rouge_'+ mode]['precision'] =  corr/(e + pred)
            rouge['Rouge_'+ mode]['recall'] = corr/(e + total)
            precision = rouge['Rouge_'+ mode]['precision']
            recall = rouge['Rouge_'+ mode]['recall']
            rouge['Rouge_'+ mode]['f1'] = (2*precision*recall) / (e + precision + recall) 
        return rouge
  • 相关阅读:
    腾讯TencentOS正式开放测试:支持“傻瓜式刷机”-android
    glob.h and glob.c for the Android NDK
    (OK) 在CentOS7—编译OpenSSL 静态库—for—Android
    Android
    Pass data to CGI script and back with jQuery.ajax
    yum—repo—How to Enable EPEL Repository for RHEL/CentOS 7/6/5
    裸机版的hello world
    CodeBlock 使用手册
    (NOT OK) How To Build CyanogenMod Android for Motorola Defy ("jordan")
    error: .repo/manifests/: contains uncommitted changes 解决办法
  • 原文地址:https://www.cnblogs.com/cupleo/p/15607186.html
Copyright © 2011-2022 走看看