自然言語処理100本ノック2020から逃げるな「19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる」

これは自然言語処理100本ノック2020に挑んだ、とある人間の記録
他の問題はこちら → 自然言語処理100本ノック2020から逃げるな まとめ

19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる

各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ.

Pythonコード

import sys

path = sys.argv[1]

dict = {}
with open(path) as f:
    for l in f:
        key = l.split('\t')[0]
        dict[key] = dict.get(key, 0) + 1

for key, value in sorted(dict.items(), key=lambda kv: kv[1], reverse=True):
    print(str(value) + ' ' + str(key))

確認用UNIXコマンド

私の環境は少し特殊(fish)なので、もしかしたら動かないかも。

cut -f 1 ../popular-names.txt | sort | uniq -c | sort -r | tee output_unix.txt

実行結果

長いので冒頭のみ。

118 James
111 William
108 John
108 Robert
92 Mary
75 Charles
74 Michael
73 Elizabeth
70 Joseph
60 Margaret
58 George
58 Thomas
57 David
51 Richard
45 Helen
43 Frank
43 Christopher
41 Anna
40 Edward
...