TF-IDFを用いたCPS月別流行語大賞2018

この記事は、CPS Lab Advent Calendar 2018の21日目の記事です。

adventar.org

はじめに

本記事では「slackのログデータから流行語を決定する」という題材に取り組みます.

データ

この記事を参考にしました. motemen.hatenablog.com

とれました.

f:id:aj1m0n:20181221090842p:plain
データ

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月「遅れ」

f:id:aj1m0n:20181221093339p:plain
8月
ミーティングに遅刻していることが容易に想像できてしまいます.

9月「研究」

f:id:aj1m0n:20181221093041p:plain
9月
後期に入って焦っている先輩がいましたね.

10月「16」

f:id:aj1m0n:20181221094311p:plain
10月
ちょうど16生の配属が決定した時期でもありました.

11月「発表」

f:id:aj1m0n:20181221093120p:plain
11月
11月に入ると学会発表をする先輩がチラホラと

12月「画像」

f:id:aj1m0n:20181221093114p:plain
12月
12月の表は正直良くわからないです.輪郭,関数,抽出など何か画像系の作業をしている人がいるんでしょうか?

まとめ

いかがでしたか?CPS内の素性を知ることができたような気がしますね.

今回はデータが半年分しかなかったので,月毎という形になりました.

来年はログがいい感じに溜まっていると思うので,アドベントカレンダー2019でリベンジしたいと思います!

コードはgithub上で公開しています

github.com

おわり