代碼太多,編輯的時候卡的很,於是再整個(二)
前面貼完了分類器的代碼,下面主程式如下(樣本仍然採用原文的例子):
Code
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5using AspxOn.Search.FenLei;
6
7namespace AspxOn.Search.ConsoleTest
8{
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 string s = "北京時間今天淩晨3:45(歐洲當地時間24日晚20:45),歐冠聯賽1/8淘汰賽的首回合較量在日爾蘭球場上演焦點戰,法甲霸主裡昂迎戰西甲領頭羊巴薩,儒尼尼奧在第7分鐘利用自由球破門得分,埃托奧和本澤馬先後擊中對方門框一次,亨利在第67分鐘的俯身沖頂破門為巴薩扳平比分,最終裡昂和巴薩在日爾蘭球場戰成1-1平,兩周后的次回合將移師諾坎普。";
14 string result = ChineseSpliter.Split(s, "|");
15 Console.WriteLine(result);
16 //TrainingDataManager tdm = new TrainingDataManager();
17 //Console.WriteLine(tdm.GetFilesPath("C000020")[0]);
18
19 string[] res = result.Split('|');
20 for (int k = 0; k < res.Length; k++)
21 {
22 Console.WriteLine(res[k]);
23 }
24
25 BayesClassifier bcf = new BayesClassifier();
26 List<ClassifyResult> crs = bcf.Classify(s);
27 Console.WriteLine(crs.Count.ToString());
28
29 for (int i = 0; i < crs.Count; i++)
30 {
31 Console.WriteLine(crs[i].classification + ":" + crs[i].probability.ToString());
32 }
33
34
35 //string defaultDir = "D:\\SogouC.mini.20061127\\SogouC.mini\\Sample\\C000007";
36
37 //string[] filespath=System.IO.Directory.GetFiles(defaultDir);
38
39 //Console.WriteLine(filespath.Length.ToString());
40
41 Console.ReadKey();
42 }
43 }
44}
45
運行後結果如下:
其中,樣本資料同樣採用搜狗實驗室的mini版本,共10個分類,
冒號前是分類編碼,冒號後面是機率結果。
分類編碼和分類名稱對應如下:
C000007 汽車
C000008 財經
C000010 IT
C000013 健康
C000014 體育
C000016 旅遊
C000020 教育
C000022 招聘
C000023 文化
C000024 軍事
因此,測試資料歸到 體育 分類下。
在原來的貼來的分詞器中,還對停用詞進行了過濾,由於ICTCLAS分詞器內建了停用詞過濾,因此我對原文代碼中的相關代碼進行了調整。
ICTCLAS分詞器對停頓詞的過濾代碼(見本文(一)中的ICTCLAS中文分詞for Lucene.Net介面代碼(實現Analyzer)):
Code
result = new StopFilter(result, CHINESE_ENGLISH_STOP_WORDS);
其原理也是基於詞典的過濾,字典目錄的指定見本文(一)中的ICTCLAS中文分詞for Lucene.Net介面代碼(實現Analyzer))。
Code
public string NoisePath = Environment.CurrentDirectory + "\\data\\stopwords.txt";
開啟\data\檔案夾下的stopwords.txt,可見:
這裡面是一些常用停頓詞。
還沒有對批量資料進行分類測試,稍後貼出測試結果和代碼下載。