zoukankan      html  css  js  c++  java
  • 文本分类step by step(二)

    (注:如有转载请标明作者:finallyliuyu, 和出处:博客园)

    文本分类 step by step(一)

      在《文本分类step by step(一》中,我们从处理语料库开始讲起,一直讲到利用分类器进行分类。文章末尾还随机抽取了一篇文章,给出了这篇文章的标题、正文、实际类别,分类器所分类别等信息。在此篇博客中我们将介绍分类器的评估,以及代码的一些介绍,最后给出程序和实验语料库的下载地址。

    (一)分类器评估

    关于查准率,查全率,F值的定义以及的代码实现见博文《评估分类器》

    主函数调用如下:

     

    计算准确率,召回率,F值
    map<string,vector<double> >evaluation;
    for(vector<string>::iterator it=labels.begin();it!=labels.end();it++)
    {
        
    double precision=p.getPrecision(*it,classifyResults,"TestingCorpus");
        
    double recall=p.getRecall(*it,classifyResults,"TestingCorpus");
        
    double F=p.getFscore(*it,classifyResults,"TestingCorpus");
        vector
    <double>temp;
        temp.push_back(precision);
        temp.push_back(recall);
        temp.push_back(F);
        evaluation[
    *it]=temp;
        temp.clear();
    }
    for(map<string,vector<double> >::iterator it=evaluation.begin();it!=evaluation.end();it++)
    {
        cout
    <<it->first<<endl;
        cout
    <<"precison"<<(it->second)[0]<<endl;
        cout
    <<"recall"<<(it->second)[1]<<endl;
        cout
    <<"Fscore"<<(it->second)[2]<<endl;
        cout
    <<"*************************"<<endl;
    }
    double avaP=0.;//平均准确率
    double avaR=0.;//平均召回率
    double avaF=0.;//平均F值

    for(map<string,vector<double> >::iterator  it=evaluation.begin();it!=evaluation.end();it++)
    {
        avaP
    +=(it->second)[0];
        avaR
    +=(it->second)[1];
        avaF
    +=(it->second)[2];
        
    }
    cout
    <<evaluation.size();
    avaP
    /=evaluation.size();
    avaR
    /=evaluation.size();
    avaF
    /=evaluation.size();
    cout
    <<"平均准确率为"<<avaP<<endl;
    cout
    <<"平均召回率"<<avaR<<endl;
    cout
    <<"平均F值"<<avaF<<endl;

    实验结果:

     

     

    (二)代码说明:

    运行的时候,采用release模式运行,debug模式下运行速度很慢

    1.       涉及数据库交互函数:数据库的链接字符串写死在了下列函数中,如果需要改变所链接数据库则在下列函数中修改链接字符串

    涉及数据库交互操作的函数
    int ConstructDictionary(DICTIONARY& mymap,FUNCSEG seg,string tablename);
    int GetArticleIdinEachClass(vector<string > labels,string tablename,map<string,vector<int> >&articleIdinEachClass );
            vector
    <string >GetClassification(string articleIds);//获得该篇文章对应的类别
    string GetCategorizationInfoById(int articleId,string tablename);
    int  Preprocess::GetManyVSM(int begin,int end,string tablename,DICTIONARY& mymap,DOCMATRIX& testingsetVSM,char*keywordsaddress)

    2.       涉及硬盘存取交互函数

     

    涉及硬盘IO交互操作的函数
    //保存词袋子到硬盘
            void SaveDictionary(DICTIONARY& mymap,char *address);
            
    //从内存中加载词袋子模型
            void LoadDictionary(DICTIONARY& mymap,char *address);
    void SaveContingencyTable(CONTINGENCY& contingencyTable,char *address);
            
    void LoadContingencyTable(CONTINGENCY& contingencyTable,char *address);
            
    void SaveVSM(DOCMATRIX& VSMmatrix,char *dest);
            
    void LoadVSM(DOCMATRIX& VSMmatrix,char *dest);
    vector
    <string> GetFinalKeyWords(char* address);
    void ChiSquareFeatureSelection(vector<string > classLabels,DICTIONARY& mymap,CONTINGENCY& contingencyTable,int N,char * address);
    oid DFcharicteristicWordSelection(DICTIONARY
    & mymap,int DFthreshold,char * address);

     

      

    3.       分词

    头文件中定义了一个指向指向类的成员函数的指针,分别指向两种不同的切分模式。其中一种切分模式调用计算所的ICTCLAS;另一种切分模式以空格作为分界符进行分割,对应的函数如下:

     

    vector<string>goodWordsinPieceArticle(string rawtext,set<string> stopwords);
    vector
    <string> mySplit(string s,set<string> stopwords);//分割关键词

    (三)资源下载地址(资源作者:finallyliuyu,空间提供方:博客园)

     1.语料库资源 下载地址 注意:语料库为MSSQL2000备份格式,如何还原请大家自己查阅相关资料,网络上有很多这方面的知识也就不赘述了。

    2. 程序资源 下载地址   程序包中目前有DF,chi-square特征词选择算法,以及KNN分类算法。如果时间允许,我会继续往程序包中添加 IG,point-wise MI特征词选择算法,以及多项式贝叶斯分类器。另外再次声明我是一个C++新手,编程有很多不规范的地方,希望不要误人子弟。另外,如果有高手愿意指教我会非常高兴。 目前程序是控制台程序,如果有人愿意用MFC编写演示界面,那就最好不过了。呵呵。

     

  • 相关阅读:
    ASP.NET MVC应用程序更新相关数据
    HTML5 教程
    Nginx+Tomcat+Keepalived+Memcache 负载均衡动静分离技术
    Bootstrap 模态框
    Routing(路由) & Multiple Views(多个视图) step 7
    构建日均千万PV Web站点1
    基础模块
    Visual Studio 换颜色
    动手实现Expression翻译器1
    ASP.NET SignalR 2.0入门指南
  • 原文地址:https://www.cnblogs.com/finallyliuyu/p/1838745.html
Copyright © 2011-2022 走看看