示例文本文件:
airport, 2007, 175702
airport, 2008, 173294
request, 2005, 646179
request, 2006, 677820
request, 2007, 697645
request, 2008, 795265
wandered, 2005, 83769
wandered, 2006, 87688
wandered, 2007, 108634
wandered, 2008, 171015
此文本文件包含一个单词(例如:'airport');一年和该年度使用该词的次数。我所做的是创造了一个课程,使这个词成为一个关键,并有那一年的年份和事件。现在我想要做的是找到从a到z的每个字母的出现次数。这是通过查找字母中每个字母出现的次数然后乘以该数字,但该字的出现总数加上其他单词的相同数来完成的。
示例:
'A';在漫步和机场出现一次,所以我们得到1(83769 + 87688 + 108634 + 171015)= 451106总共出现'a'在徘徊和1(175702 + 173294)= 348996总出现'a'在机场来到字母a总共出现了800102次。为了找到'a'出现的频率,我们将800102除以所有字母的总数25770183,并给出字母'a'的频率0.013047。 'b'和'c'将为0.0,因为目前没有任何单词使用这些字母。
这是我到目前为止所得到的,但它根本不起作用,我的想法是:
from wordData import*
def letterFreq(words):
totalLetters = 0
letterDict = {'a':0,'b':0,'c':0,'d':0,'e':0,'f':0,'g':0,'h':0,'i':0,'j':0,'k':0,'l':0,'m':0,'n':0,'o':0,'p':0,'q':0,
'r':0,'s':0,'t':0,'u':0,'v':0,'w':0,'x':0,'y':0,'z':0}
for word in words:
totalLetters += totalOccurances(word,words)*len(word)
for char in range(0,len(word)):
for letter in letterDict:
if letter == word[char]:
for year in words[word]:
letterDict[letter] += year.count
for letters in letterDict:
letterDict[letters] /= totalLetters
print(letterDict)
def main():
filename = "data/very_short.csv"
words = readWordFile(filename)
letterFreq(words)
if __name__ == '__main__':
main()
答案 0 :(得分:3)
如果您想要文件中所有字母的计数,请使用collections.Counter字典:
from collections import Counter
c = Counter()
with open("input.txt") as f:
for line in f:
c.update(line.split(",")[0])
print(c)
Counter({'e': 16, 'r': 12, 'd': 8, 'a': 6, 't': 6, 'n': 4, 'q': 4, 's': 4, 'u': 4, 'w': 4, 'i': 2, 'o': 2, 'p': 2})
要使总数乘以它出现的次数:
from collections import Counter
c = Counter()
with open("input.txt") as f:
for line in f:
word, year, count = line.split()
c.update(word*int(count))
print(c["a"] / float(sum(c.values())))