-1

有一个名为 Count 的类。

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]?

4

2 回答 2

1

像其他人一样,我不确定我是否有足够的背景来提供全面的信息。但是这一行:

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

对我说counter.form,最终将包含每个令牌/文件名组合的单独计数。这得到了您所说的计数器初始化的支持:

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

那就是说这self.form是一个默认字典,其默认值是实例collection.Counter(基本上defaultdict(int)是一些额外的方法,IIRC)。所以,基本上,一个二维计数器。

如果您想要令牌计数而不管它们在哪个文件中,那么您基本上不想file_name成为计数器的参数,并且计数器需要是一维的。所以我会考虑将你的计数器的初始化更改为:

self.form = collections.Counter()

并将您的计数递增更改为:

counter.form[token] += 1

根据程序其余部分的结构,您可能需要进行更多更改。但希望这会让你朝着正确的方向前进。

于 2012-04-23T01:22:41.803 回答
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

我必须承认我发现你的问题有点含糊。这是我对您要查找的内容的最佳猜测。

于 2012-04-23T00:33:33.447 回答