文本分类(二)特征权重量化器(文档转向量表示)

上一节做了分词器的实现,并实现了Simple、Standar、Cn、ICTCLAS几个分词算法。本节实现文档转向量表示,并命名为特征权重量化器,特征权重量化器我只实现1个算法----TFIDF算法。

项目类图如下:

 

 

测试程序如下:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
 1namespace Waemz.ChnGlobal.Test
 2ExpandedBlockStart.gifContractedBlock.gif{
 3    class Program
 4ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 5        static void Main(string[] args)
 6ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 7            string[] docs = new string[5];
 8            docs[0= "SimpleSpliter的分词方法是以空格、或标点分词,并去掉了标点";
 9            docs[1= "StandarSpliter的粉刺方法是中文单字分词,英文以空格分词,并去掉了标点";
10            docs[2= "CnSpliter的分词方法是中文单字分词,对单个无意义的英文字母直接去掉了;-_-!";
11            docs[3= "ICTCLAS的分词方法比较适合使用,对“我们“、”是“这样的无意义中文进行了过滤,中文分词效果也比较理想。";
12            docs[4= "我自己简易封装了一个分词器,使用Lucene.Net.类图如下";
13
14            string[][] terms = new string[5][];
15
16            AbsChnSpliter spliter = new ICTCLASSpliter();
17            for (int i = 0; i < 5; i++)
18ExpandedSubBlockStart.gifContractedSubBlock.gif            {
19                string str = spliter.ChnSplit(docs[i], "|");
20                terms[i] = str.Split('|');
21            }

22
23            AbsMeasure mea = new TFIDFMeasure(terms);
24
25            double[][] vectors = new double[5][];
26            for (int i = 0; i < 5; i++)
27ExpandedSubBlockStart.gifContractedSubBlock.gif            {
28                vectors[i] = mea.GetVectorMeasure(i);
29            }

30
31            for (int i = 0; i < vectors.Length; i++)
32ExpandedSubBlockStart.gifContractedSubBlock.gif            {
33                for (int j = 0; j < vectors[i].Length; j++)
34ExpandedSubBlockStart.gifContractedSubBlock.gif                {
35                    Console.Write(vectors[i][j]+"--");
36                }

37                Console.WriteLine("\n\n");
38            }

39
40            Console.ReadKey();
41
42            
43
44        }

45    }

46}

 

 

测试结果输出如下:

需要完善的地方:

1、根据TFIDF计算出的向量表示维数很高,一般维数等于所有样本中消去重复词后词的数目,下一步进行降维。降维我现有的思路是:(1)事先进行特征选取(特征选取方法有信息增益、卡方检验),然后再用TFIDF进行特征提取;(2)计算出TFIDF后进行降维。(3)在分词阶段对停用词、标点符号等特殊字符的有效过滤也实际上起到降维的作用,而实际上标点符号对文档来说是没有作用的。(4)在文本分类中,还可以事先建立与分类相关的专业词汇库,特征提取时与词汇库比较,词汇库中不存在的词,认为是对分类没有意义的词。这样进行降维。

稍后贴出代码下载.

转载于:https://www.cnblogs.com/waemz/archive/2009/05/29/1491854.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值