2012-04-23 39 views
-1

有一個名爲Count的類。我應該如何使用defaultdict?

def __init__(self, caters): 
    self.form = collections.defaultdict(collection.Counter) 
    self.caters = {caters: Catergory(caters) for caters in cats} 

,我讀了一些文件信息,並把它的值,

def read_file(file_name, level, counters): 
    data = open(file_name).read() 
    counters.caters[level].docs.add(file_name) 
    for token in blabla: 
     counter.form[token][file_name] += 1 

我怎麼會,如果我想每個令牌的總次數,無論哪個文件是在做什麼?

如何獲得某個級別的某個單詞的頻率,例如。令牌的名稱是dog,level = 1,我想獲得freq [dog] [1]?

+0

你正在讀入一個'data'文件,然後我們再也看不到'data'。某種程度上它是相關的嗎? – 2012-04-23 00:42:21

+0

添加一些上下文並澄清您的問題將鼓勵回答,並幫助防止您的問題downvotes。 (p.s.這不是我!) – 2012-04-23 00:56:09

+0

哈哈。這是一個長期的計劃,我不知道是否明智地把所有東西都帶進去...... – juju 2012-04-23 01:35:06

回答

1

和其他人一樣,我不確定我有足夠的背景來給予全面的評價。但是,這條線:

counter.form[token][file_name] += 1 

對我說,counter.form即將結束包含每個令牌/ FILE_NAME組合的獨立計數。

self.form = collections.defaultdict(collections.Counter) 

,指出self.form是一個默認的字典,它的默認值是collection.Counter情況下(這基本上是defaultdict(int)有一些額外的方法,IIRC:這是你說的是計數器的初始化備份)。所以,基本上是一個二維計數器。

如果你想要記號的數量,而不管它們在哪個文件中,那麼你基本上不希望file_name是計數器的參數,並且計數器需要是一維的。所以我想看看改變你的計數器的初始化到:

self.form = collections.Counter() 

,改變你的計數遞增到:

counter.form[token] += 1 

您可能需要更多的變化的基礎上,其餘部分的結構的程序。但希望這會讓你朝正確的方向發展。

+0

這就是我的意思!現在,在我改變任何東西之前,如何在特定的層面上獲得某個詞的頻率,例如。 token = dog,level = 1,我想獲得freq [token] [level]? – juju 2012-04-23 01:33:52

+0

@ user1325302然後你回到使用2維計數器,但使用'level'作爲第二維,而不是'file_type' ... – Ben 2012-04-23 02:04:46

+0

偉大的工作唾棄了一個具有挑戰性的問題,@Ben。 +1 – 2012-04-24 04:33:50

0

我使用collections.defaultdict(int)來計算令牌的實例。您可以應用這樣的代碼橫跨你感興趣的所有文件,使用相同的令牌計數器收集每個文件(在我的例子token_counts):

token_counts = collections.defaultdict(int) 
with open('foo.txt') as f: 
    for line in f: 
     for token in line.split(): 
      token_counts[token] += 1 
for token, count in token_counts.items(): 
    print token, count 

我必須承認,我發現你的問題有點含糊不清。這是我對你要找的東西的最好猜測。

+0

如果我想打印每個'數',該怎麼辦?寫一個循環? print count [0],count [1] 我無法列出所有我想要打印的東西。 – juju 2012-04-23 01:24:33