35. 単語の出現頻度
問題文
文章中に出現する単語とその出現頻度を求め,出現頻度の高い順に並べよ.
nlp100.github.io
ソースコード
# MeCabのインポート import MeCab m = MeCab.Tagger('-Ochasen') # ファイル名の指定 filename = 'neko.txt.mecab' # ファイルの読み込みfilename = "neko.txt.mecab" with open(filename,mode='rt',encoding='utf-8') as f: blockList = f.read().split('EOS\n') # 文章ごとに分割 # 空白行を削除する blockList = list(filter(lambda x: x!='', blockList)) # 単語リストの作成 res = [] for block in blockList: for line in block.split("\n"): if line == "": continue surface = line.split("\t")[0] attr = line.split("\t")[1].split(",") lineDict = { 'surface': surface, 'base': attr[6], 'pos': attr[0], 'pos1': attr[1] } res.append(lineDict) # 出現頻度の算出 ans = {} for r in res: key = r['base'] if key in ans: value = ans[key] ans[key] = value + 1 else: ans[key] = 1 # 出現頻度の高い順に並び替え ans = sorted(ans.items(), key = lambda x:x[1], reverse=True) # 答えの出力 print("出現頻度の高い順に40位まで出力") print(ans[:40])
出力
出現頻度の高い順に40位まで出力
[('の', 9194), ('。', 7486), ('て', 6848), ('、', 6772), ('は', 6420), ('に', 6243), ('を', 6071), ('だ', 5975), ('と', 5508), ('が', 5337), ('た', 4267), ('する', 3657), ('「', 3231), ('」', 3225), ('ない', 3052), ('も', 2479), ('ある', 2320), ('*', 2191), ('で', 2081), ('から', 2031), ('いる', 1777), ('ん', 1568), ('か', 1529), ('云う', 1408), ('事', 1207), ('です', 1164), ('ます', 1146), ('なる', 1120), ('へ', 1034), ('う', 987), ('もの', 981), ('君', 973), ('主人', 932), ('ぬ', 719), ('よう', 696), ('見る', 675), ('ね', 657), ('この', 649), ('御', 636), ('ば', 617)]