2015-09-02 63 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)