• 文本摘要 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
  • 相关阅读:
    ASP.NET中JS简单调用webservices的方法
    WINDOWS SERVER 2003使用IIS服务配置WEB站点(转)
    Tomcat安装配置(转)
    javascript 调用.net后台的数据 和方法
    win7下,sql2005安装,提示 iis功能和com+目录要求 的解决
    Vista或windows7远程桌面控制服务器较慢 反应迟钝
    Asp.net Ajax的使用
    记录远程登陆用户的IP
    Ext.menu.Menu 属性及基础应用
    关于VS2005 无法使用切换到设计视图的解决方法
  • 原文地址:https://www.cnblogs.com/cupleo/p/15607186.html
Copyright © 2020-2023  润新知