Kmeans聚类之建立词袋子模型

来源:互联网 发布:python buffer类型 编辑:程序博客网 时间:2024/05/17 07:14

 

作者:finallyliuyu(转载请注明出处)

最近打算将自己的工作平台由C#,python等迁移到C++。这是我的第一个C++工作程序吧。

IDE:VS2008

language: C++

library:boost(安装boost库,先要安装python安装方法见《boost库安装方法》)

tools:weka

C++程序完成的功能:从数据库中读出文章-》分词(调用ICTCLAS)-》特征词选择(DF法)->VSM模型建立->把文章写成weka数据格式arff文件(此处写成的是稀疏数据的储存格式。weka教程见《教程》)

首先给出构造停用词集合的代码:

 

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

 

然后我们给出调用ICTclas进行分词的代码,注意:工程中调用ICTCLAS时要把data 文件夹,config文件,ictclas30.h ICTCLAS30.dll,ICTCLAS30.LIB放在工程所在的文件夹。将ictclas30.h加入工程,在调用ICTCLAS30.DLL的cpp文件的头部加上#pragma comment(lib, "ICTCLAS30.lib")

 

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

 

ICTclas分词结果默认的分割符是空格,在以上函数中,我们改成了“|”作为分隔符,字符串替换考率用boost的正则表达式库。因为我们要处理的是汉字字符串,所有要进行宽字符串窄字符串之间的转化,我采用的是利用win32函数的方法更多方法请见《boost正则表达式处理汉字字符串》。

 

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

 有了以上的功能,我们现在编写一个函数,函数的输入是一篇文章,输出是一个词的集合。该词集合保存的是初步去掉噪声词后的“好词”

代码如下

 

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

 上面的这个函数可以说是我们建立词袋子模型的基本单元,给上面的函数输入文章内容(rawtext),以及停用词表,那么它将返回一个词集合。下面我们开始构造词袋子模型。在构造词袋子模型之前,我们要说一下,我们词袋子模型的格式map<string,vector<pair<int,int>>>:主键为该词,pair中的第一个int 为文章标号,第二个词为在该文中出现的次数,vector<pair<int,int>>统计的是这个词在那些文章中出现,出现过几次。因为数据量比较大所以词袋子模型map,采用引用传参,如果是值传参的话,会在内存中产生拷贝,浪费内存

下面是从数据库中读文章建立词袋子模型的代码

 

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

 

 

未完,待续。。。。。
0 0
原创粉丝点击