Tweepyとjanomeで遊んでみた

SPONSORED BY

自分のことは他人の方がよく知っている

「あなたがTwitterで頻繁に発言した単語はこちら!」系のサービスを見て、
『無意識な自分を見ている他人の方がよっぽど自分のことを知っている』という下條先生の言葉を思い出し、
または『あなたはもっとも多くの時間をともに過ごしている5人の平均である。』というJim Rohnの言葉を思い出し、
ふと、自分がフォローしているアカウントの頻出キーワードを抽出したくなった。

Python3.5で書いてみた

粛々と更新されてuserstreamに対応した"Tweepy"と
辞書インストール不要でお手軽に使える形態素解析器"Janome"を使う。
janomeは他言語が混ざると即死すると知って、
しかもNLTKを使わず漢字・ひらがな・カタカナだけを抽出するのにすこし手間取った。

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

from collections import Counter
import tweepy
from janome.tokenizer import Tokenizer
import re

class JanomeStreamListener(tweepy.StreamListener):
    words = []
    t = Tokenizer()
    num = 0

    def on_status(self, status):
        print(status.author.name, ":", status.text)
        jp_only = "".join(re.findall(u"[\u4e00-\u9fa5]+|[\u3040-\u309f]+|[\u30a0-\u30ff]+", status.text))
        # 漢字 → u"[\u4e00-\u9fa5] / ひらがな → [\u3040-\u309f] / カタカナ → [\u30a0-\u30ff]
        for token in self.t.tokenize(jp_only):
            if "名詞" in token.part_of_speech.split(",")[0]:
                self.words.append(token.surface)
        self.num += 1
        if 100 == self.num:
            print(Counter(self.words).most_common(20))
            return False # => exit

    def on_error(self, status_code):
        print("ERROR: ", status_code)
        return True # => retry

if __name__ == '__main__':
    api_key = "YOUR API KEY"
    api_secret = "YOUR API SECRET"
    auth = tweepy.OAuthHandler(api_key, api_secret)
    access_token = "YOUR ACCESS TOKEN"
    access_token_secret = "YOUR ACCESS TOKEN SECRET"
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)
    jStreamListener = JanomeStreamListener()
    jStream = tweepy.Stream(auth = api.auth, listener = jStreamListener)
    jStream.userstream()

自分のタイムラインをStreaming APIで叩いて、100ツイート分の名詞を抜き出し、Counterで最頻20個を表示する。

('人', 34), ('狼', 20), ('さん', 14), ('鯖', 12), ('男', 11), ('ん', 10), ('の', 9), ('選び', 9), ('ゑびす', 8), ('坂', 8), ('阪大', 8), ('村', 7), ('募集', 6), ('竹田', 6), ('中', 6), ('圭吾', 6), ('こと', 6), ('話題', 6), ('これ', 6), ('初心者', 5)

人狼…最近やれてないんだけどなぁ。

人生/愛/未来

ついでに、最後の1行を書き換えて、「人生」「愛」「未来」の共起語も調べてみる。
こっちはPublic Streamなので、自分とは関係ない。

    jStream.filter(track = ["人生"])

tweepy

('人生', 126), ('人', 23), ('こと', 22), ('名言', 21), ('成功', 14), ('好き', 10), ('自由', 9), ('幸せ', 8), ('歩', 8), ('さん', 7), ('俺', 7), ('自分', 7), ('高橋', 7), ('無駄', 6), ('現実', 6), ('ん', 6), ('望月', 6), ('成人', 6), ('今', 6), ('敏彰', 6)

人生とは成功、自由。そして無駄。

('愛', 49), ('人', 43), ('さん', 34), ('お迎え', 26), ('気', 21), ('フォロー', 20), ('ジャス', 18), ('濵田崇', 18), ('裕', 18), ('民', 18), ('櫻井', 15), ('翔', 15), ('俺', 13), ('大好き', 11), ('私', 11), ('くん', 10), ('希望', 10), ('譲', 9), ('ジャニスト', 9), ('拡散', 9)

愛とはジャニーズ、ジャニーズとは愛。そして拡散。

('未来', 113), ('まま', 78), ('コブ', 46), ('クロ', 46), ('の', 29), ('好き', 28), ('雨', 26), ('心', 26), ('身', 26), ('想い', 23), ('人', 16), ('二', 14), ('神', 14), ('君', 9), ('僕', 9), ('恋', 9), ('日', 8), ('中', 7), ('創世', 7), ('遊四葉', 7)

未来はコブクロ、雨と想いと人と神。

日本人のつぶやきってこんなに薄っぺらいのか。

SPONSORED BY