2012-10-18 67 views
-1

我正在做一個函數,它將輸入作爲輸入(字符串,字典)並返回一個浮點數。該函數接受來自文件的文本作爲輸入來評估單詞的詞典。該函數必須返回整個文本的分數。也就是說,得分是出現的單詞得分的平均值。取得給定文件中Python得分的平均值

我有一個.csv文件,其中有一個單詞列表,每個單詞給出一個分數和std偏差。在該文件中,每行都採用表格

word{TAB}score{TAB}standard_deviation 

我將字母全部設爲小寫,並試圖取所有分數的平均值。

我有這到目前爲止,但不能找出以正確的方法來獲得平均:

def happiness_score(string , dict): 
    sum = 0 
    for word in string: 
     dict = dict() 
     if word in dict: 
     sum += word 
     word = string.lower() 
     word,score,std = line.split() 
     d[word]=float(score),float(std) 
    return sum/len(dict) 
+8

請勿將數據類型用作變量名稱(例如:'dict')。這很混亂。 – NullUserException

+0

也,如果將總是評估爲假,因爲你將字典重置爲每個字符串中的每個單詞的空值,也許張貼您當前的代碼。如果你張貼的例子,準確地確定它們(例如:line.split(),dict = dict()等) –

+0

Theres沒有辦法,甚至可以運行! –

回答

0

林不知道要執行的確切數學運算。 和im不知道你是否能夠讀取文件。

但希望這將提供一些指導。

# to hold your variables 
holder_dict = {} 

# read the file: 
with open("/path/to/file.csv", 'r') as csv_read: 
    for line in csv_read.readlines(): 
     word, score, std = line.split('\t') 
     if word in holder_dict.keys(): 
      holder_dict[word][0] += [float(score)] 
      holder_dict[word][1] += [std] 
     else: 
      holder_dict[word] = [[float(score)],[std]] 

# get average score 
for word in holder_dict.keys(): 
    average_score = sum(holder_dict[word][0])/len(holder_dict[word][0]) 
    print "average score for word: %s is %.3f" % (word, average_score) 
+0

你不需要readlines()。你可以做'對於csv行'。您也可以使用defaultdict來避免在加載之前檢查字典是否出現在字典中。 –

+0

@ juniper-是的。但'readlines'如果我沒有誤認爲'.strip()'爲你。否則你必須以醜陋的方式照顧'.strip()'。就我所知的列表清單而言,沒有默認的字典。 –

+0

根據文檔readlines()不會爲你做strip()。默認字典可以像這樣'a = defaultdict(lambda:[0,0])'。 –

0

從我讀懂你的解釋理解,這可能是你需要的。

def happiness_score(string, score_dict): 
    total = 0 
    count = 0 
    for word in string.lower().split(): 
     if word in score_dict: 
      total += score_dict[word] 
      count += 1 
    return total/count 

def compile_score_dict(filename): 
    score_dict = {} 
    with open(filename) as csvfile: 
     reader = csv.reader(csvfile, delimiter='\t') 
     for row in reader: 
      score_dict[row[0].lower()] = int(row[1]) 
    return score_dict 

score_dict = compile_score_dict('filename.csv') 
happiness_score('String to find score', score_dict) 
+0

我不明白你的幸福得分。它並沒有真正做任何事情。你只是計算所有的分數。那裏根本沒有任何與每個單詞相關的分數。 –