分词效果的评测算法(原创)

一、背景:菜鸟一枚,boss让对不同的分词工具进行测评,发现网上很多都是杨尚川同志的完美率计算法,boss不太满意,只能自己写了。

二、适用范围:HanLP中的索引分词不适用,其余均可,LTP、NIPIR均可。

废话不说,上算法:

/**计算正确率的核心算法*/
public class EvaluationTools {
    /**读取单个分词结果文件,与已知答案文件,分行进行处理
     * @param  resultFileName:分词结果文件的绝对路径~E:\\NLP\\CePing\\result-BaseAnalysis.txt
     * @return 测评结果对象 */
    public static ResultNum compute(String resultFileName) throws IOException{
        ResultNum resultNum=new ResultNum();
        resultNum.ModelNameString=resultFileName.substring(resultFileName.indexOf("-")+1, resultFileName.indexOf("."));
        String standardFileName="E:/NLP/中文分词评测语料/616500/中文分词评测测试+训练语料/中文分词评测测试语料(山西大学提供)/测试语料答案(ANSI格式).txt";
        InputStream resultIn = new FileInputStream(resultFileName);
        InputStream standardIn = new FileInputStream(standardFileName);
        BufferedReader resultbufferedReader = new BufferedReader(new InputStreamReader(resultIn, "GBK"));
        BufferedReader standardbufferedReader = new BufferedReader(new InputStreamReader(standardIn, "GBK"));
        String resultline = null;
        String standardline = null;
        while ((resultline = resultbufferedReader.readLine())!=null&&(standardline=standardbufferedReader.readLine())!=null) {
            computeLine(resultline, standardline, resultNum);
            resultNum.ResultLineNum++;
        }
        resultbufferedReader.close();
        standardbufferedReader.close();
        return resultNum;
    }
    /**根据每行的结果,计算分词效果
     * @param  resultline:分词结果(行)
     * @param  standardline:分词标准答案(行)
     * @param  resultNum:正确分词的数量*/
    public static void computeLine(String resultline,String standardline,ResultNum resultNum){
        String[] resultStrings=resultline.split("( )+");
        String[] standsrdStrings=standardline.split("( )+");
        resultNum.Resulttotalword+=resultStrings.length;
        resultNum.Standardtotalword+=standsrdStrings.length;
        String passResult="";
        String passStandard="";
        int j=0;
        //外循环控制 答案的数组
        for(int i=0;i             //内循环要求控制结果数组角标不越界、已审的答案字符串长度要>=已审核结果字符串长度;
            for(;j=passResult.length();passResult+=resultStrings[j],j++){
                if(standsrdStrings[i].equals(resultStrings[j])&&passStandard.equals(passResult)){
                    //System.out.println(standsrdStrings[i]+"----"+resultStrings[j]);            
                    resultNum.rightword++;
                    break;
                }
            }            
            passStandard+=standsrdStrings[i];
        }
        standsrdStrings=null;
        resultStrings=null;        
    }
    public static void main(String[] args) throws IOException{
        ResultNum resultNum=compute("E:\\NLP\\CePing\\Result\\result-HanLp-IndexAnalysis.txt");
        System.out.println(resultNum);
    }    
}

//用到的分级结果类

public class ResultNum {
    /**分词模型名称*/
    public String ModelNameString="";
    /**结果正确的词数*/
    public int rightword=0;
    /**分词结果的总词数*/
    public int Resulttotalword=0;
    /**标准答案的总词数*/
    public int Standardtotalword=0;
    /**分词结果的总行数*/
    public int ResultLineNum=0;
    /**分词答案的总行数*/
    public int StandardLineNum=0;
    /**分词的总耗时*/
    public long time=0;
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "分词模型名称:"+ModelNameString
                +",正确分词数:"+rightword+
                ",分词结果的总词数"+Resulttotalword+
                ",标准答案的总词数"+Standardtotalword+
                ",分词结果总行数"+ResultLineNum+
                ",分词总耗时"+time;
    }
}

备注:

  1、compute()中传入经过分词处理后,输出的文件,要求词和词之间适用空格分开

  2、 String standardFileName="E:/NLP/中文分词评测语料/616500/中文分词评测测试+训练语料/中文分词评测测试语料(山西大学提供)/测试语料答案(ANSI格式).txt";

为自己本地的答案文本的绝对路径。

3、分词效果:

专访  老瓦  :  可能  参加  北京奥运  中国  领先  不是  悲剧  2007  年  06  月  18  日  14  :  52  大江网  。  
本报  南昌  讯  记者  鄢卫华  报道  :  17  日  上午  ,  由  本报  和  圣象  ·  康树  联合  主办  的  瓦尔德内尔  挑战赛  在  南昌  圆满  落幕  。  
通过  海选  决出  的  五  位  民间  乒乓  高手  宝左群  、  欧阳思  铭  、  张波  、  洪佳铭  、  何明  轮番  上台  挑战  老瓦  。  
正如  赛前  所  预料  的  那样  ,  乒坛  常青树  老瓦  “  惊险  地  ”  以  3  比  2  的  总比分  取得  了  最终  的  胜利  。 

     答案文本:

专访  老瓦  :  可能  参加  北京  奥运  中国  领先  不  是  悲剧  2007  年  06  月  18  日  14:52  大江网  。
本  报  南昌  讯  记者  鄢卫华  报道  :  17  日  上午  ,  由  本  报  和  圣象·康树  联合  主办  的  瓦尔德内尔  挑战赛  在  南昌  圆满  落幕  。
通过  海选  决  出  的  五  位  民间  乒乓  高手  宝左群  、  欧阳思铭  、  张波  、  洪佳铭  、  何明  轮番  上台  挑战  老瓦  。

你可能感兴趣的:(NLP)