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

## 前回までのお話
[twitter APIで遊んでみる #1(環境作り)](https://qiita.com/tomozo6/items/747036c49a8b6bca49e4)
[twitter APIで遊んでみる #2(ユーザータイムラインの取得)](https://qiita.com/tomozo6/items/18ce99726ec9af168faf)
[twitter APIで遊んでみる #3(検索結果の取得)](https://qiita.com/tomozo6/items/d7fac0f942f3c4c66daf)
[twitter APIで遊んでみる #4(形態素解析してみる(MeCabの環境作り))](https://qiita.com/tomozo6/items/14ef4e95384a259da6c8)

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

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

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

# PythonからMeCabを使うためのバインディングをインストール
sudo pip3 install mecab-python3
```
これで`MeCab`が`python`からも呼び出せます。

## とりあえずpythonからMeCabを使ってみる
まずは単純に、pythonからMeCabを使ってみます。

**コード(mecab.py)**

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

import MeCab

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

print(res)
```

**実行結果**

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

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

**コード(mecabFromFile.py)**

```python
#!/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(検索結果の取得)](https://qiita.com/tomozo6/items/d7fac0f942f3c4c66daf)との組み合わせです。検索キーワードと取得するtweet数を引数で与えるようにしました。

**mecabFromSearchTweets.py**

```python
#!/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))
```

**実行イメージ**

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

**実行結果**

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

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