2015-09-02 32 views
1

的熵公式詞法豐富是詞彙豐富性爲香農熵;蟒

enter image description here

的概率p-i個是由N,其中N是在文本和V-第i是代幣的總數除以V-第i個計算特定類型發生的次數(至少這是我的理解)。

所以,如果我有一個字符串the, the, the, a, a, over, love, one, tree 有9 tokens,但只有6 types

V-'theth'(據我所知)將是3因此p-'theth'將計算爲3/9 = 0.33V-'ath'然後將是0.22,依此類推。 H在這種情況下將-100*((0.33*log0.33 + 0.22*log0.22 + 0.11*log0.11 + 0.11*log0.11 + 0.11*log0.11+ 0.11*log0.11)/log9)

雖然我可以得到一個字符串的Python的長度(標記):

string = ['the', 'the', 'the', 'a', 'a', 'over', 'love', 'one', 'tree'] 
len(string) 
9 

和種類數量:

len(set(string)) 
6 

我不完全當然我該如何在Python中計算這個公式。 謝謝。

來源:Dale,Moisl和Somers(p.551)。 「自然語言處理手冊」(2000年)。 https://books.google.at/books?id=VoOLvxyX0BUC&pg=PA551&lpg=PA551&dq=entropy+vocabulary+richness&source=bl&ots=wucWFF1Rn_&sig=Hms1qwhXlcOaPEXI84eDqxsTEdo&hl=en&sa=X&ved=0CC8Q6AEwAmoVChMIjvvQnvPVxwIVhJ5yCh35ZAb_#v=onepage&q&f=false

回答

-1

要計算西格瑪,你可以這樣做:

def calculateEntropy(freqDict,total): 
    entropy=0 
    nbElements=0 
    for element in freqDict: 
     p=float(freqDict[element])/total 
     entropy-=p*math.log(p,2) 
     nbElements+=1 
    if nbElements==total: 
     return entropy 
    else: 
     return calculateEntropy(freqDict,nbElements) 

要獲得令牌的頻率,你可以使用帶有標記的關鍵事件,並作爲值的簡單的字典。要獲得完整的配方,您仍然必須獲得100*entropy/math.log(nbElements,2)