とあるSEの手順書

個人的な技術メモです。無保証ですが参考になりましたら幸いです。

PythonとMeCabによるツイートの単純分析

今回は、Python形態素解析エンジンのMeCabをつかってTwitterに投稿されているツイートから
特定の単語と同時に登場する名詞を抽出し、頻出度を調べてみようと思います。

環境

Windows環境で下記を用いります。

PythonはAnacondaの利用が必要なライブラリが含まれており、jupyterが使用できておすすめです。

手順

手順は次のように非常にシンプルな構成で考えます。

  1. Twitterから特定の単語を含むツイートを取得
  2. MeCab形態素解析し、名詞のみ抽出
  3. 名詞の数をカウント

MeCabのインストール

公式サイトからダウンロードしてインストールで完了です。
辞書は、UTF-8が無難とのこと。
ただコマンドプロンプトの表面では文字化けするようです。

公式サイト
MeCab: Yet Another Part-of-Speech and Morphological Analyzer

インストールの参考にしたサイト
64bit Windows + python 2.7 + MeCab 0.996 な環境をつくる - Qiita

Windows+Python環境でMeCabを動かす際に、Visual Studioで再ビルドしたり
MeCabのライブラリをセットアップが必要です。

はやく動くものが見たい*1がために、
Pythonスクリプト内で、SubprocessコールでMeCabを実行しファイルを食わせて吐き出すことにしました。

Twitterのデータ収集

TwitterAPIで取得することができますし、収集アプリもあります。
私は下記のサイトからcsvでダウンロードしました。
UTF-8でダウンロードできるのが親切です。

1500ったー
http://membonia.com/1500ttr/

スクリプト

取り急ぎ、ダウンロードしたcsvを読込、MeCabを実行して、形態素を取得、名詞だけを抽出するまでの
一連のスクリプトを書いてみました。
pandasはCSVを読み込んだり、フィルタをかけたりとデータ操作に便利なライブラリです。

import subprocess
import pandas as pd
import codecs
import re

# CSVファイル読込
datas = pd.read_csv("1500ttr.csv" , header=None)
for key, row in datas.iterrows():
    # Mecab用に出力
    fout =codecs.open("in_mecab.txt", "w" , "utf-8")
    # 5列目にツイート本文
    tw = str(row[5])
    # 英数字を消し、日本語のみに
    tw = re.sub("[^ぁ-んァ-ンー一-龠]", "", tw);
    # Mecabに食わせるファイルを出力    
    fout.writelines(tw)
    fout.close()
    
    # Mecab実行 -E でEOFを出力しない、 >> で追記
    cmd = "\"C:\\Program Files (x86)\\MeCab\\bin\\mecab.exe\" < in_mecab.txt >> out_mecab.txt -E \"\" "
    subprocess.call(cmd , shell=True)

# 出力結果を読込
wordlist = pd.read_csv("out_mecab.txt" , header=None , delimiter="\t")
# 一般名詞だけ抽出 MeCabの形態素解析結果に品詞が記載されている
nounlist = wordlist[wordlist[1].str.contains("名詞,一般")]
# 名詞のカウントをする
pd.DataFrame(nounlist[0].value_counts(), columns=["COUNT"])

少し補足すると、MeCab実行の際につけている

-E \"\" "

このオプションは、通常、MeCabの出力結果にはEOS(end of string)が末尾に出力されます。
今回は「>>」で指定のファイルに追記し、一つの一覧にしたいため、つけました。

結果

ツイートから「美樹さやか*2」で検索した内の頻出名詞

順位 名詞 個数
1 299
2 魔法 244
3 少女 214
4 むら 211
5 あたし 116
6 110
7 それ 100
8 マギカ 99
9 杏子 81
10 ゾンビ 80

1位、5位の「私」「あたし」は「あたしって、ほんとバカ」のセリフの影響でしょうか。
2位、3位の「魔法」「少女」は、そのままですね。
4位の「むら」は最初わからなかったですが「暁美ほむら*3」の「むら」が形態素になっているようです。*4
10位の「ゾンビ」もキャラのセリフですね。

鹿目まどか*5」でもしてみましたが、「少女」「魔法」「マギカ」「フィギュア」「マギ」などで
特徴的な単語が上位にはありませんでした。
単純なので、このあたりの改善もすれば、もっと面白い抽出ができるかもしれませんね。

ひとまずでした。

*1:処理速度的には、きちんとライブラリのセットアップしたほうが良いと思います。

*2:魔法少女まどか☆マギカのキャラクター、魔法少女の一人。

*3:魔法少女まどか☆マギカのキャラクター、魔法少女の一人。

*4:こういう場合でもMeCabでチューニングできるようです。

*5:魔法少女まどか☆マギカのキャラクター、名の通り魔法少女で主人公。「まどか」で変換したら「まどか☆マギカ」が出てきて驚き。