python—Rouge(Recall-Oriented Understudy for Gisting Evaluation)

匹配文本评估方法。python实现

准确率,召回率

X表示模型生成的结果,Y表示运营编辑的结果即reference。多reference的情况,取对应每个reference中最大的rouge-l值作为单个测试数据的结果。LCS 表示最长公共子串

# coding:utf-8
'''

'''
import math

#输入的两个字符串长度不应为0;
def Recall_lcs_Gram(str1, str2):
    lstr1 = len(str1)
    lstr2 = len(str2)
    record = [[0 for i in range(lstr2 + 1)] for j in range(lstr1 + 1)]  # 多一位
    maxNum = 0  # 最长匹配长度
    p = 0  # 匹配的起始位
    for i in range(lstr1):
        for j in range(lstr2):
            if str1[i] == str2[j]:
                # 相同则累加
                record[i + 1][j + 1] = record[i][j] + 1
                if record[i + 1][j + 1] > maxNum:
                    # 获取最大匹配长度
                    maxNum = record[i + 1][j + 1]
                    # 记录最大匹配长度的终止位置
                    p = i + 1
    Recall_lcs=maxNum/lstr2
    return Recall_lcs
def Precision_lcs_Gram(str1, str2):
    lstr1 = len(str1)
    lstr2 = len(str2)
    record = [[0 for i in range(lstr2 + 1)] for j in range(lstr1 + 1)]  # 多一位
    maxNum = 0  # 最长匹配长度
    p = 0  # 匹配的起始位
    for i in range(lstr1):
        for j in range(lstr2):
            if str1[i] == str2[j]:
                # 相同则累加
                record[i + 1][j + 1] = record[i][j] + 1
                if record[i + 1][j + 1] > maxNum:
                    # 获取最大匹配长度
                    maxNum = record[i + 1][j + 1]
                    # 记录最大匹配长度的终止位置
                    p = i + 1
    Precision_lcs=maxNum/lstr1
    return Precision_lcs

def Beta(Recall_lcs,Precision_lcs):
    beta = Precision_lcs/(Recall_lcs+(math.e)**(-12))
    return beta

def Rough(Recall_lcs,Precision_lcs,beta):
    rough = ((1+beta**2)*Recall_lcs*Precision_lcs)/(Recall_lcs+(beta**2*Precision_lcs))
    return rough

def Pinggu(str1,str2):
    ser = Precision_lcs_Gram(str1, str2)
    res = Recall_lcs_Gram(str1, str2)
    if (ser > 0)and(res > 0):
        beta = Beta(res, ser)
        rough = Rough(res, ser, beta)
        print("Recall_{lcs}=" + str(res))
        print("Precision_{lcs}=" + str(ser))
        print("beta=" + str(beta))
        print("Rough=" + str(rough))
    else:
        print("Recall_{lcs}=0")
        print("Precision_{lcs}=0")

Pinggu("X","Y")


# if __name__ == '__main__':
#     str1 = input()
#     str2 = input()
#     ser = Precision_lcs_Gram(str1, str2)
#     res = Recall_lcs_Gram(str1, str2)
#     beta = Beta(res,ser)
#     rough = Rough(res,ser,beta)
#     print("Recall_{lcs}=" + str(res))
#     print("Precision_{lcs}=" + str(ser))
#     print("beta="+str(beta))
#     print("Rough="+str(rough))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值