文本分類程式的實現過程(C++語言)——特徵選取的預先處理

來源:互聯網
上載者:User

    近幾天在看一個文本分類的程式,寫一下具體的實現過程。有的時候看了演算法,感覺很明白了,但是自己實現的時候卻又無從下手。這次從一個實際程式出發,或許能夠更好的理解。

    首先是訓練資料集和測試資料集。每個文檔一行, 主要包括 <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)中產生的這個全域詞典非常重要,後面各個演算法都是用的這裡面的資訊。待續……

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.