有一个名为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]?
答案 0 :(得分:1)
和其他人一样,我不确定我是否有足够的背景来提供任何全面的内容。但是这一行:
counter.form[token][file_name] += 1
对我说,counter.form
最终将包含每个token / file_name组合的单独计数。这可以通过您所说的计数器初始化来支持:
self.form = collections.defaultdict(collections.Counter)
这表示self.form
是一个默认字典,其默认值是collection.Counter
的实例(基本上defaultdict(int)
有一些额外的方法,IIRC)。所以,基本上是一个二维计数器。
如果您想要令牌数量而不管他们所处的文件是什么,那么您基本上不希望file_name
成为计数器的参数,并且计数器需要是1维的。所以我想把你的计数器的初始化改为:
self.form = collections.Counter()
并将您的计数递增至:
counter.form[token] += 1
根据程序其余部分的结构,您可能需要进行更多更改。但希望这会让你朝着正确的方向前进。
答案 1 :(得分: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
我必须承认我发现你的问题有点模糊。这是我对你要找的东西的最好猜测。