単語数カウント
まじめにやろうとすると、sentence split して tokenize しないといけないんだけど、まぁ、さすがにその辺は手抜き。なので、U.S.A. だとか Mr. だとかはうまく処理できない。
しかし、fileinput を使っている人が案外少ない。
import sys, re, fileinput import itertools WORD_PATTERN = re.compile(r'[\w][\w\']*') def words(s): return WORD_PATTERN.findall(s) def normalized_words(s): return (word.lower() for word in words(s)) def main(args): fp = fileinput.input(args) counts = dict() for word in itertools.chain(*(normalized_words(line) for line in fp)): counts[word] = counts.get(word, 0) + 1 items = counts.items() items.sort(lambda x, y: cmp(y[1], x[1])) for word, count in items: print '%-5d %s' % (count, word) if __name__ == '__main__': main(sys.argv[1:])