前回までのお話
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
これでMeCab
がpython
からも呼び出せます。
とりあえず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のモジュールを使えばこんな少ない行数で書けちゃうってすごいですね。
次はこの形態素解析したデータをもとにして、なにかしたいと思います。