zoukankan      html  css  js  c++  java
  • C++处理reuters21578(二)

    作者finallyliuyu 出处博客园

     通过C++处理reuters21578(一)的代码,初步形成了两张表单存放训练语料库和测试语料库,由于这两个语料库的个别类别不一致,所以要找到这两个语料库类别的交集,然后最终形成文本分类的训练语料库和测试语料库。以下主函数中完成此功能。

    class GT_clss
     {
     
    public:
         GT_clss(
    string &s):comparepart(s){}
         
    bool operator()(const string &elem)
         {
             
    return elem==comparepart;

         }
     
    private:
         
    string comparepart;
     };
    数据库中共有多少个类别
    vector<string>GetLabels(string tablename)
     {   vector
    <string>labels;
     
    char * selectbySpecificId=new char [1000];
     memset(selectbySpecificId,
    0,1000);
     sprintf_s(selectbySpecificId,
    1000,"select Categorization from %s ",tablename.c_str());
     CoInitialize(NULL);
     _ConnectionPtr pConn(__uuidof(Connection));
     _RecordsetPtr pRst(__uuidof(Recordset));
     pConn
    ->ConnectionString="Provider=SQLOLEDB.1;Password=finally;Persist Security Info=True; User ID=sa;Initial Catalog=NewsInfo";
     pConn
    ->Open("","","",adConnectUnspecified);
     pRst
    =pConn->Execute(selectbySpecificId,NULL,adCmdText);
     
    while(!pRst->rsEOF)
     {
         
    string label=(_bstr_t)pRst->GetCollect("Categorization");
         
    if (!count_if(labels.begin(),labels.end(),GT_clss(label)))
         {
             labels.push_back(label);
         }

         pRst
    ->MoveNext();

     }
     pRst
    ->Close();
     pConn
    ->Close();
     pRst.Release();
     pConn.Release();
     CoUninitialize();
     delete []selectbySpecificId;

     
    return labels;



     }
    主函数
    int _tmain(int argc, _TCHAR* argv[])
    {
         
    int end;
        
    //set<string>labels;
        vector<string>labelsTrain=GetLabels("ReteursTrain");
        vector
    <string>labelsTest=GetLabels("ReteursTest");
        vector
    <string>finalLabels;
        
    for (vector<string>::iterator it=labelsTrain.begin();it!=labelsTrain.end();it++)
        {
            trim(
    *it," ");
        }
        
    for(vector<string>::iterator it=labelsTest.begin();it!=labelsTest.end();it++)
        {
            trim(
    *it," ");

        }
        
        
    for (vector<string>::iterator it=labelsTrain.begin();it!=labelsTrain.end();it++)
        {
            
    if (count_if(labelsTest.begin(),labelsTest.end(),GT_clss(*it)))
            {
                finalLabels.push_back(
    *it);
            }
        }

        
    char * selectbySpecificId=new char [1000];
        memset(selectbySpecificId,
    0,1000);
        sprintf_s(selectbySpecificId,
    1000,"select CArticleName,CAbstract,Categorization from ReteursTest");
        CoInitialize(NULL);
        _ConnectionPtr pConn(__uuidof(Connection));
        _RecordsetPtr pRst(__uuidof(Recordset));
        _ConnectionPtr pConn2(__uuidof(Connection));
        pConn
    ->ConnectionString="Provider=SQLOLEDB.1;Password=finally;Persist Security Info=True; User ID=sa;Initial Catalog=NewsInfo";
        pConn2
    ->ConnectionString="Provider=SQLOLEDB.1;Password=finally;Persist Security Info=True; User ID=sa;Initial Catalog=FinallyCorpus";
        pConn
    ->Open("","","",adConnectUnspecified);
        pConn2
    ->Open("","","",adConnectUnspecified);
        pRst
    =pConn->Execute(selectbySpecificId,NULL,adCmdText);
        
    while(!pRst->rsEOF)
        {
            
    string label=(_bstr_t)pRst->GetCollect("Categorization");
            trim(label,
    " ");

            
    if (count_if(finalLabels.begin(),finalLabels.end(),GT_clss(label)))
            {
                
    string ArticleTitle=(_bstr_t)pRst->GetCollect("CArticleName");
                
    string ArticleText=(_bstr_t)pRst->GetCollect("CAbstract");
                ArticleTitle
    =ProcessforMSSQL(ArticleTitle);
                ArticleText
    =ProcessforMSSQL(ArticleText);
                
    char *sqlInsert=new char[1000000];
                _variant_t RecordsAffected;
                memset(sqlInsert,
    0,1000000);
                sprintf_s(sqlInsert,
    1000000,"insert into ReteursTestingCorpus(CArticleName,CAbstract,Categorization) values('%s','%s','%s')",ArticleTitle.c_str(),ArticleText.c_str(),label.c_str());
                pConn2
    ->Execute(sqlInsert,&RecordsAffected,-1);
                delete []sqlInsert;

                


                
            }
            

            pRst
    ->MoveNext();

        }
        pRst
    ->Close();
        pConn
    ->Close();
        pRst.Release();
        pConn.Release();
        pConn2
    ->Close();
        pConn2.Release();
        CoUninitialize();
        delete []selectbySpecificId;

        
        cout
    <<"两标签集交集为"<<endl;

        cout
    <<finalLabels.size()<<endl;

        
    //DictionaryToDataBase();
        
        
    //FindFile(L"E:\\新闻语料\\reuters21578");
        

        
    //pRst=pConn->Execute(,NULL,adCmdText);


        
       cout
    <<"finish"<<endl;
        
        
        cin
    >>end;






    }
  • 相关阅读:
    一起学习Avalonia(三)
    一起学习Avalonia(一)
    .NetCore(Avalonia) 项目dll混淆,deb安装包解压,重新打包
    .Net 桌面程序(winform,wpf,跨平台avalonia)打安装包部署到windows 入门
    .net 跨平台桌面程序 avalonia:从项目创建到打包部署linux-64系统deepin 或 ubuntu。
    【JAVA习题十八】求1+2!+3!+...+20!的和
    【JAVA习题十七】有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
    【JAVA习题十六】打印菱形
    【JAVA习题十五】两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
    【JAVA习题十四】猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩 下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  • 原文地址:https://www.cnblogs.com/finallyliuyu/p/1918042.html
Copyright © 2011-2022 走看看