文本分类程序的实现过程(C++语言)——特征选择的预处理

    近几天在看一个文本分类的程序,写一下具体的实现过程。有的时候看了算法,感觉很明白了,但是自己实现的时候却又无从下手。这次从一个实际程序出发,或许能够更好的理解。

    首先是训练数据集和测试数据集。每个文档一行, 主要包括 <class>1</class><title>asdfgh</title><content>asdfghjkl</content>等项目。届时程序会按行读取,每行读一个文档。

特征选择分以下几个步骤:

1.设置特征向量的维数:一般以3000为佳;

2.对训练数据做处理;

3.加载停用词;

4.针对不同特征选择算法的处理;

4.是否检查某些词语(?啥);

5.输出选择的特征项;

主要是第二步的预处理:

    1.首先按行读取文件,每行是一个文档,doc;注意,以下几项都是对一个文档的处理;然后循环处理每个文档,直至文件结束;

    2.对每个文档做处理,提取出其中的各个item,包括label,即class标签内的。title和content等;

    3.若是中文数据集,调用分词模块做分词,英文数据集直接用字符流处理。分词结果保存在一个vector中;

    4.接下来这一步是至关重要的,生成全局词典:

(1)将分词结果保存在一个map变量中,map<string, uint> wordsMap;第一项为词语,第二项为该词出现的次数;同时,定义变量wordsNum,记录该文档中出现的总词数;

(2)保存每个类别中的总文档数目和总词数;定义一个结构体,包含三个变量,一个类标,一个是总文档数;一个是总词数;放入一个全局的vector;

(3)这一步处理的信息很重要,生成全局词典:这个map的第一项为相应的term,第二项是一个结构体的vector,这个结构体包括类标名、文档数、该词出现的次数;因为一个term可能在多个类中出现,所以用vector来存储。vector的长度就是该term属于哪个类。


4(3)中生成的这个全局词典非常重要,后面各个算法都是用的这里面的信息。待续……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值