■
TF-IDFを用いたCPS月別流行語大賞2018
この記事は、CPS Lab Advent Calendar 2018の21日目の記事です。
はじめに
本記事では「slackのログデータから流行語を決定する」という題材に取り組みます.
データ
この記事を参考にしました. motemen.hatenablog.com
とれました.
1万件の制約上8月までしか遡れませんでした.
データ加工
本題ですね.
ここを参考にしてスプレッドシートと対話していきます. note.nkmk.me
会話本文を抽出してリストで管理します.
wb = {} for i in [8,9,10,11,12]: wb[i] = openpyxl.load_workbook("../input/iwailab/2018-%s.xlsx"%(str(i).zfill(2))) test = {} for i in [8,9,10,11,12]: test[i] = [] sheets = wb[i].sheetnames sheets.remove("シート1") for sheet in sheets: wb_sheet = wb[i][sheet] # print(wb_sheet) for cell_obj in list(wb_sheet.columns)[2]: test[i].append(cell_obj.value)
分かち書きをして,単語を抽出します.
df = {} import sys import MeCab mecab = MeCab.Tagger ("-Owakati") for i in [8,9,10,11,12]: df[i] = [] for textdata in test[i]: # print(textdata) text = mecab.parse(str(textdata)) df[i].extend(text.split(' '))
TF-IDF
最低限の処理を施します.
自然言語処理の世界ではStop wordsと呼ばれるような単語の除去
単純な登場回数ではなく、他の年にあまり出てこない単語を重要視して評価
slothlib_path = 'http://svn.sourceforge.jp/svnroot/slothlib/CSharp/Version1/SlothLib/NLP/Filter/StopWord/word/Japanese.txt' slothlib_file = urllib.request.urlopen(slothlib_path) slothlib_stopwords = [line.decode("utf-8").strip() for line in slothlib_file] slothlib_stopwords = [ss for ss in slothlib_stopwords if not ss==u''] slothlib_stopwords.append("です") slothlib_stopwords.append("ます")
結果発表
どの月でも出てくる単語を除き,その月を振り返りながら流行語を決定します.
それでは,発表したいと思います!!
8月「遅れ」
ミーティングに遅刻していることが容易に想像できてしまいます.
9月「研究」
後期に入って焦っている先輩がいましたね.
10月「16」
ちょうど16生の配属が決定した時期でもありました.
11月「発表」
11月に入ると学会発表をする先輩がチラホラと
12月「画像」
12月の表は正直良くわからないです.輪郭,関数,抽出など何か画像系の作業をしている人がいるんでしょうか?
まとめ
いかがでしたか?CPS内の素性を知ることができたような気がしますね.
今回はデータが半年分しかなかったので,月毎という形になりました.
来年はログがいい感じに溜まっていると思うので,アドベントカレンダー2019でリベンジしたいと思います!
コードはgithub上で公開しています
おわり