LoginSignup
2
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-07

前回までのお話

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のモジュールを使えばこんな少ない行数で書けちゃうってすごいですね。
次はこの形態素解析したデータをもとにして、なにかしたいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1