2016-11-08 1 views
-3

텍스트의 엔트로피를 찾아야합니다.엔트로피로 파이썬에서 텍스트 사용

섀넌 엔트로피를 사용하고 싶습니다.

내 입력은 책의 텍스트 문서 (모든 단어)와 빈도로 구성된 사전입니다. 출력은 모든 단어의 관측 확률에 대한 엔트로피 여야합니다. 지금 내 코드는 다음과 같다 :

BOE는 사전 단어와 주파수로 구성된 코드가 작동하도록 내가 먼저 문자열로 그것을 TRANSFROM입니다
import math 

def shannon(string): 
     prob = [ float(string.count(c))/len(string) for c in dict.fromkeys(list(string)) ] 
     entropy = sum([ p * math.log(p)/math.log(2.0) for p in prob ]) 
     return entropy 

. 그러나 이것이 올바른 경우 엔트로피인지 확실하지 않습니다.

+1

당신의 함수는'word_map'을 사용하지 않습니다. –

+0

모든 작업을 다시하고 계속 실행을 반복합니다. 예 : 'boe'는'dict'이고,'str'으로 변환 한 다음'list'로 변환 한 다음'dict'으로 되돌립니다. 그게 뭐야? –

+1

나는 당신이하고 싶은 일, 당신의 의견이 무엇인지, 어떻게 사용하고 싶은지에 대해 신중하게 생각할 필요가 있다고 생각합니다. 그런 다음 (다시 신중하게) 생각을 코드에 작성하십시오. 네가 여기에있는 것은 경계선이 횡설수설하는 것이다. –

답변

2

텍스트의 단어 엔트로피를 원한다고 가정합니다.

from math import log2 

def shannon(boe): 
    total = sum(boe.values()) 
    return sum(freq/total * log2(total/freq) for freq in boe.values()) 

shannon(boe) 

확률은 총 단어 수를 필요로 : 또한, 당신은 P(w)을 정의하는 텍스트에서 단어의 총 개수로 나눈 단어의 빈도 수 있습니다. 외부로 전달하지 않으면 모든 주파수의 합계로 얻을 수 있습니다 : sum(boe.values()). 함수의 반환 값은 p * log2(1/p)이며 pfreq/total입니다.

관련 문제