目的:从数据库中抽取文章关键词,并统计这些关键词在哪些文章中出现,出现多少次。(算是词袋子模型吧),然后对每篇文章形成形成VSM模型,写成weka的数据格式,然后调用weka对文章聚类。

目前“形成此代码模型一块已经完毕”

其中词袋子的数据结构如下:

map<string,vector<pair<int,int>>>&mymap),

目前已经完成此部分的serilize(save/load)以及print 功能

#include "stdafx.h"
#include<iostream>
#include<map>
#include<vector>
#include<string>
#include<iomanip>
#include<fstream>
//#include<boost/tokenizer.hpp>
using namespace std;

形成词袋子模型

nt ConstructMap(map<string,vector<pair<int,int>>>&mymap)
{
    
    vector<string> mySplit(string s);
    CoInitialize(NULL);
    _ConnectionPtr pConn(__uuidof(Connection));
    _RecordsetPtr pRst(__uuidof(Recordset));
    pConn->ConnectionString="Provider=SQLOLEDB.1;Password=xxx;Persist Security Info=True; User ID=sa;Initial Catalog=ArticleCollection";
    pConn->Open("","","",adConnectUnspecified);
    pRst=pConn->Execute("select CKeyWord,ArticleId from Article order by ArticleId",NULL,adCmdText);
    while(!pRst->rsEOF)
    {    vector<string>wordcollection;
        string keywordstr=(_bstr_t)pRst->GetCollect("CKeyWord");
        if(keywordstr!="")
        {
                wordcollection=mySplit(keywordstr);
                string tempid=(_bstr_t)pRst->GetCollect("ArticleId");
                int articleid=atoi(tempid.c_str());
                for(vector<string>::iterator strit=wordcollection.begin();strit!=wordcollection.end();strit++)
                {
                    vector<pair<int,int>>::iterator it;
                    if(mymap[*strit].empty())
                    {
                        pair<int,int>mytemppair=make_pair(articleid,1);
                        mymap[*strit].push_back(mytemppair);

}
                    else
                    {
                        for(it=mymap[*strit].begin();it!=mymap[*strit].end();it++)
                        {  
                            if(it->first==articleid)
                            {
                                it->second=++(it->second);
                                break;
                            }
                    
                        }
                        if(it==mymap[*strit].end())
                        {
                            pair<int,int>mytemppair=make_pair(articleid,1);
                            mymap[*strit].push_back(mytemppair);
                        }

}

}

}
        
        
        pRst->MoveNext();
        wordcollection.clear();
    }
    pRst->Close();
    pConn->Close();
    pRst.Release();
    pConn.Release();
    CoUninitialize();
    return 0;

}

加载词袋子模型

void load(map<string,vector<pair<int,int> > >&mymap)
{
    ifstream infile("c:\\mydict.dat",ios::binary);
    int lenMyMap;//保存词典长度
    int lenVector;//保存每个词出现的文章数目
    string key;//保存读出的map的键值
    int articleId;//文章标号
    int count;//在该文章中刚出现的数目
    string comma;
    string semicolon;
    
    infile>>lenMyMap;
    while(!infile.eof())
    {
        infile>>key;
        infile>>lenVector;
        vector<pair<int,int> >temp;
        for (int i=0;i<lenVector;i++)
        {
            infile>>articleId>>count>>semicolon;
            temp.push_back(make_pair(articleId,count));
        }
        mymap[key]=temp;
        
        
    }

infile.close();

}

保存词袋子模型

void save(map<string,vector<pair<int,int> > >&mymap)
{   ofstream outfile("c:\\mydict.dat",ios::binary);
    outfile<<mymap.size()<<endl;
    map<string,vector<pair<int,int> > >::iterator it;
    for (it=mymap.begin();it!=mymap.end();it++)
    {   outfile<<it->first<<endl;
        vector<pair<int,int>>::iterator subit;
        outfile<<it->second.size()<<endl;
        for(subit=(it->second).begin();subit!=(it->second).end();++subit)
        {
            outfile<<subit->first<<" "<<subit->second<<" "<<";"<<" ";
        }
        outfile<<endl;
    }
    //outfile.write((char *)&mymap,sizeof(mymap));

outfile.close();
}

打印词袋子模型

void print(map<string,vector<pair<int,int> > >&mymap)
{   
    cout<<mymap.size()<<endl;
    map<string,vector<pair<int,int> > >::iterator it;
    for (it=mymap.begin();it!=mymap.end();it++)
    {   cout<<it->first<<endl;
        vector<pair<int,int>>::iterator subit;
        cout<<it->second.size()<<endl;
        for(subit=(it->second).begin();subit!=(it->second).end();++subit)
        {
            cout<<subit->first<<','<<subit->second<<";";
        }
        cout<<endl;
    }
    
}

转载于:https://www.cnblogs.com/finallyliuyu/archive/2010/08/25/1808300.html

我的第一个C++程序,还像个C++c程序的样子吧相关推荐

  1. 【我的故事】一个还不成熟的女程序员的苦恼

    我是阿曌,90后,一只还不成熟的女程序猿. 去年7月份,我毕业了,在大学学习了C++和Java,现在在深圳一家企业从事Android/iOS开发. 在今年过年以前,我还沉浸在跟着项目学知识的阶段,会因 ...

  2. 系统要关闭,可我程序还有事要处理?

    系统要关闭,可我程序还有事要处理? 问题1描述: 运行了一个客户端程序,服务端表明客户端在线,突然运行客户端程序的电脑关机了,但服务端并不知道客户端下线了,服务端的状态并不能及时更新为下线. 解决方法 ...

  3. python写一个表白程序_用Python写一个能算出自己年龄的小程序

    用Python写一个能算出自己年龄的小程序. 其实我连我今年多少岁都不知道,最近看到了python的datetime库里面有很多好用的方法,于是就写了这样一个程序作为练习,然后又写了这样一篇文章来梳理 ...

  4. 徐磊(Devops):一名写了十几年代码但还没写够的程序员

    徐磊(Devops 社区领袖) [个人介绍] 徐磊,微软MVP(微软最有价值专家,大中华区域社区技术总监,Devops 社区领袖),从事过网管.技术支持.网络.软件开发等工作,一名写了十几年代码但还没 ...

  5. 利用css transition属性实现一个带动画显隐的微信小程序部件

    我们先来看效果图 像这样的一个带过渡效果的小部件在我们实际开发中的应用几率还是比较大的,但是在开发微信小程序的过程中可能有的小伙伴发现transition这个属性它不好使(下面说明)所以我们这个时候会 ...

  6. 易语言程序应用程序错误退出_为什么我退出Google并构建了一个向孩子们教授个人理财的应用程序

    易语言程序应用程序错误退出 Many of my friends thought I was crazy to leave a great position at Google to help par ...

  7. [js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走?

    [js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走? 在浏览器环境下JS 解析器解析到未定义变量时,会抛出 Uncaught ReferenceError 错误,JS 引擎会停 ...

  8. 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)

    知乎小白第一次写专栏,还请多指教. 先放成果. GitHub源码: lrioxh/HAR-applet-of-Wechat​github.com b站演示视频: 居然不需要服务器?!如何制作一个简单的 ...

  9. 多个 小程序_最简单的小程序制作方法,不会代码也能撸一个

    前言 / 小程序从17年上线到现在已经构造了新的开发环境和开发者生态,现在已经有超过150万的开发者加入到开发,小程序应用数量超过100万,覆盖200多个行业.虽然开发难度较app减少了很多,但是对于 ...

  10. 微信小程序傻瓜制作_微信小程序模板制作:手把手教你做一个生鲜小程序

    传统线下生鲜水果类商家如今正面临诸多问题,包括服务范围有限.客户源不稳定.缺少订单导致新鲜食材过期等等.新零售概念的提出,很多商家虽然懂得要打通线上渠道,但通常都是仅仅局限于普通O2O外卖平台,其实这 ...

最新文章

  1. Gini指数、Gini系数、Gini不纯是一回事吗?
  2. 如何让VS根据编译环境选择相应的配置文件
  3. 基于DGCNN和概率图的轻量级信息抽取模型
  4. 面试必谈的哈希,.Net 程序员温故而知新
  5. php替换中文,PHP中文替换
  6. ADO.NET基本运用随笔
  7. 【Elasticsearch】Elasticsearch 动态模板(Dynamic templates)
  8. 猜算式,四个两位数字不可以重复(一)
  9. Codeforces Round #750 (Div. 2)
  10. jQuery图片LightBox插件 点击图片放大 支持移动手机
  11. react中使用sass报错SassError: Expected newline.
  12. 动态网站数据采集 - 时光网电影信息爬虫
  13. Android开发者面试如何系统复习?成功入职阿里
  14. 技术培训 | 青云QingCloud 对象存储应用与实践
  15. 新库上线 | CnOpenData日本专利及引用被引用数据
  16. 在网页中插入百度地图(Wayde-实例)
  17. 设计一个高性能三维渲染服务器,第一人称视角三维实景漫游系统渲染流水线架构研究.pdf...
  18. java初级程序员提高_初级Java程序员如何发展、晋升?
  19. kafka Java客户端之consumer 流量控制 以及 Rebalance解析
  20. Python调用OpenCV的目标跟踪算法(csrt、kcf、boosting、mil、tld、medianflow、mosse)

热门文章

  1. 上传身份证照片js_国际快递为什么需要上传身份证,怎么上传?
  2. can总线短距离不用双绞线_汽车中的总线系统——以太网(2)博通出世
  3. QT保留小数点后几位
  4. linux python2.7 mssqlserver_连接到linux上的MSSQL Server 2008
  5. 邀请人数排行榜代码 php,成功邀请好友人数排行榜.PDF
  6. 单片机ADC采样算法----中位值平均滤波法
  7. 用十万级数据进行讲解MySQL索引基础
  8. View与Model绑定注意事项 (视图无数据显示)
  9. 以setuptools版本太高为例,版本太高问题的解决方案
  10. 音视频技术傻瓜版解析:带你解锁RTMP