2011-09-27 19 views
1

我使用一個1.6M的鳴叫語料庫來訓練一個樸素的貝葉斯情緒引擎。計算兩個數據集--C#中的文本分析和情緒的概率分佈的熵

我有正克兩個字典(Dictionary<string,int>其中string是我的n-gram和int是n-gram中的出現在我的語料庫#)。第一個列表是從正面推文中拉出的,第二個列表是從負面推文中拉出的。在一篇關於這個主題的文章中,作者拋棄了常見的n-gram(即n-gram並不強烈地表示任何情緒,也沒有指出句子的客觀性,這種n-gram在所有數據集中均勻地出現)。我在概念上理解得非常好,但他們提供的公式根植於數學,而不是代碼,我無法破譯我應該做的事情。

我花了幾個小時在網上搜索如何做到這一點。我找到了搜索引擎熵計算的例子,通常是計算一個字符串的熵,最常用的代碼塊是Shannons熵。

我對這個空間也比較陌生,所以我確信我的無知在這方面起了一點作用,但我希望有人能幫助我在正確的方向推動我。總結:

給定兩個詞典,PosDictionary & NegDictionary,我該如何計算相同n元克的熵?

僞碼是好的,和我想象它看起來是這樣的:

foreach(string myNGram in PosDictionary) { 
    if(NegDictionary.ContainsKey(myNGram) { 
     double result = CalculateEntropyOfNGram(myNGram); 
     if(result > someThetaSuchAs0.80) { 
      PosDictionary.Remove(myNGram); 
      NegDictionary.Remove(myNGram); 
     } 
    } 
} 

認爲是這樣的過程,我需要服用。我不知道是什麼CalculateEntropyOfNGram函數看起來像...

(編輯) Here is the link用來形容熵/突顯過程中的PDF格式的(5.3節)

+1

您可以給出版物的鏈接嗎? – rocksportrocker

+0

添加鏈接。我很抱歉。 –

回答

1

式(10)論文給出了定義。如果您在閱讀方程時遇到問題,這是一個簡短的表示方法

H(..) = -log(p(S1|g)) * p(S1|g) - log(p(S2|g)) * p(S2|g) - .... 
+0

所以說「給定g給出的S1的概率」 - 就像給定一個n-gram一樣,它在我的S1列表中的概率是多少?所以像(my_nGram_Count)/(my_nGram_Count + Total_nGram_Count)? –

+0

我沒有深入地閱讀這篇論文,知道S1和g是什麼。但是你必須從計數中估計概率。類似於「p(g)= ng/N」,如果ng計數g,N是您引用的集合的大小。 – rocksportrocker

+0

正是我所需要的。謝謝! –