from string import letters def frequent_words(filename, n): wordlist = filter(len, [filter(lambda chr: chr in letters, word.lower()) for word in open(filename).read().split()]) counts = dict((word, wordlist.count(word)) for word in wordlist) return [(word, counts[word]) for word in sorted(counts, key=lambda word: counts[word], reverse=True)][:n]