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
  • 相关阅读:
    WEP编码格式
    OSK VFS read数据流分析
    科学剖析濒死体验 "复生"者讲述"死"前1秒钟
    Android的开发相对于tizen的开发难度
    minix文件系统分析
    贴给小程序(1) 查找第一个0值
    Linux下的QQ
    OSK USB 驱动
    LRU算法之hash+list实现(转)
    插入排序
  • 原文地址:https://www.cnblogs.com/chenyaling/p/5597885.html
Copyright © 2011-2022 走看看