twitter APIで遊んでみる #5(twitterの検索結果を形態素解析してみる)


前回までのお話

twitter APIで遊んでみる #1(環境作り)
twitter APIで遊んでみる #2(ユーザータイムラインの取得)
twitter APIで遊んでみる #3(検索結果の取得)
twitter APIで遊んでみる #4(形態素解析してみる(MeCabの環境作り))

はじめに

前回は、コマンドラインでMeCabを使えるようにしました。なんとなくMeCabがどんなものかもわかってきたので、プログラムで使いやすいように、pythonからMeCabを使ってみようと思います。

環境作り

前回までの環境作りは実施済みのうえで、以下を実施します。

# mecab-pythonをpipするときに必要っぽい(詳細までは理解していない)
sudo yum install gcc-c++ gcc swig

# PythonからMeCabを使うためのバインディングをインストール
sudo pip3 install mecab-python3

これでMeCabpythonからも呼び出せます。

とりあえずpythonからMeCabを使ってみる

まずは単純に、pythonからMeCabを使ってみます。

コード(mecab.py)

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import MeCab

req = MeCab.Tagger('-Owakati')
res = req.parse("昨日はモスバーガーを食べたので、 今日はマックを食べたいですね。")

print(res)

実行結果

昨日 は モスバーガー を 食べ た ので 、 今日 は マック を 食べ たい です ね 。

外部ファイルから文章を読みこんでみる

外部ファイルに記載されている文章を読みこんで解析します。また文章が複数行の場合は改行を削除して1行にする処理を入れました。

コード(mecabFromFile.py)

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import sys
import MeCab

# MeCabの宣言
req = MeCab.Tagger('-Owakati')

# ファイル名を引数として指定する
param = sys.argv
infile = param[1]

# ファイルを読み込みモードで開く
f = open(infile, 'r')
Allf = f.read()

# 改行コードを削除
text = Allf.replace('\n','')

# 形態素解析
res= req.parse(text)
print(res)

# ファイルを閉じる
f.close()

文章ファイル(sample.txt)

昨日はモスバーガーを食べたので、 今日はマックを食べたいですね。
そうだ、明日は趣向を変えてサブウェイで野菜をたっぷり食べよう。

実行結果

昨日 は モスバーガー を 食べ た ので 、 今日 は マック を 食べ たい です ね 。 そう だ 、 明日 は 趣向 を 変え て サブ ウェイ で 野菜 を たっぷり 食べよ う 。

twitterの検索結果を解析してみる

twitter APIで遊んでみる #3(検索結果の取得)との組み合わせです。検索キーワードと取得するtweet数を引数で与えるようにしました。

mecabFromSearchTweets.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import json
import config
import MeCab
from requests_oauthlib import OAuth1Session

# =============================================================================
# 引数の処理
# =============================================================================
# 第一引数を検索キーワードに設定
param = sys.argv
keyword = param[1]

# 第二引数を取得するtweet数に設定
param = sys.argv
tweetcount = param[2]

# =============================================================================
# Twitter API
# =============================================================================
# OAuth認証部分
CK      = config.CONSUMER_KEY
CS      = config.CONSUMER_SECRET
AT      = config.ACCESS_TOKEN
ATS     = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)

# Twitter Endpoint(検索結果を取得する)
url = 'https://api.twitter.com/1.1/search/tweets.json'

# Enedpointへ渡すパラメーター
params ={
         'q'     : keyword,    # 検索キーワード
         'count' : tweetcount, # 取得するtweet数
         }

req = twitter.get(url, params = params)

if req.status_code == 200:
    res = json.loads(req.text)
    result = ''
    for line in res['statuses']:
        # 改行コードを削除
        text = line['text'].replace('\n','')
        # resultに足しこんでいく(1行にしたいので)
        result += text
else :
    print("Failed: %d" % req.status_code)

# =============================================================================
# MeCab
# =============================================================================
req = MeCab.Tagger('-Owakati')

# 形態素解析
print(req.parse(result))

実行イメージ

$ python3 mecabFromSearchTweets.py モスバーガー 5

実行結果

RT @ sakkurusan : ハンバーガー 店 と いえ ば 札幌 民 「 やはり マクドナルド でしょ 」 旭川 民 「 モス か な 」 小樽 民 「 バーガー キング は いい ぞ 」 函館 民 「 ラッキーピエロ でしょ 」 オホーツク 沿岸 過疎 地 民 「 ハンバーガー ? そんな 店 ねー から もっぱら これ ばかり 食っ て た わ 」 https :/… モスバーガートマト 美味しい RT @ sakkurusan : ハンバーガー 店 と いえ ば 札幌 民 「 やはり マクドナルド でしょ 」 旭川 民 「 モス か な 」 小樽 民 「 バーガー キング は いい ぞ 」 函館 民 「 ラッキーピエロ でしょ 」 オホーツク 沿岸 過疎 地 民 「 ハンバーガー ? そんな 店 ねー から もっぱら これ ばかり 食っ て た わ 」 https :/… で も モス の バーガー は トマト は いっ てる から や だ … 暖かい トマト が 嫌い マン RT @ La _ Gioconda _ leo : 追記 の 追記 周辺 スーパー など ・ 渋谷 ライフ セブン イレブン Family Mart ・ 新宿 セブンイレブンモスバーガーローソンクック Y 丸正 スーパー イトーヨーカドー

終わりに

twitterAPIからの検索結果データを形態素解析できるようになりました。pythonのモジュールを使えばこんな少ない行数で書けちゃうってすごいですね。
次はこの形態素解析したデータをもとにして、なにかしたいと思います。