zoukankan      html  css  js  c++  java
  • 分词结果准确率、召回率计算-python

    使用python计算crf根据模型的分词结果的准确率,召回率和F值

    测试文件output.txt,第一列是字,第二列是人工标注的分词结果,第三列是根据模型使用crf得到的分词结果,

    字母B:单词的首字母;字母E:单词的尾字母;字母BE:单词的中间字母

    格式如下:

    团    B    B
    圆    E    E
    是    BE    BE
    春    B    B
    节    E    E
    千    B    B
    年    E    E
    不    B    B
    变    E    E
    的    BE    BE
    ...     ...     ....

    python代码如下:

    1、读入output.txt文件,并建立相应的列名为'character','train','test'的dataframe

    import pandas
    line=[]
    file=open(r'E:大三下王东波CRF 相关CRF 相关crf++ toolsoutput.txt','r',encoding='utf-8')
    for i in file.readlines():
        i=i[0:-1]
        if len(i)!=0 and len(i)!=1:
            line.append(i.split('	'))
    df=pandas.DataFrame(line,columns=['character','train','test'])   

    【注:使用df.loc添加新行的速度太慢,因而使用列表向dataframe转化】

    2、构建新的dataframe保存分词准确的部分

    correct=df[df.train==df.test]

    3、计算召回率、准确率和F值

    for i in ('B','C','E','BE'):
        R=sum(correct.test==i)/sum(df.train==i)
        P=sum(correct.test==i)/sum(df.test==i)
        F=R*P*2/(R+P)
        print(i,':
    ','R=',R,' P=',P,' F=',F)

    计算结果如下:

    B :
     R= 0.915480621852  P= 0.87615255658  F= 0.895384944855
    C :
     R= 0.674981658107  P= 0.757201646091  F= 0.713731574864
    E :
     R= 0.919001751313  P= 0.879715004191  F= 0.898929336188
    BE :
     R= 0.865064695009  P= 0.940703517588  F= 0.901299951854
  • 相关阅读:
    JSON的数据格式
    KMP 算法
    爬虫原理
    快速求小于N的所有素数
    对程序员最具影响的书籍
    实现下拉更新UITableView EGORefreshTableHeaderView
    温习C/C++笔记——浅谈琐碎知识点(1)
    C++内存对齐
    SQL Server 安装程序无法获取 ASPNET 帐户的系统帐户信息
    Asp.Net生命周期事件
  • 原文地址:https://www.cnblogs.com/chenyaling/p/5597885.html
Copyright © 2011-2022 走看看