日本語 English
インターステラ株式会社の技術ブログです

【インターンステラ】Twitterのツイートを形態素解析

こんにちはyouです.今回はTwitterAPIとMeCabを用いて形態素解析をやってみました.

手順はまずTwitterAppのページからcustomer key、customer key secret、access token、access token secretの4つのキーを入手し、public streamで全世界のツイートを取得し、MeCabで形態素解析をするといった流れです.

以下ソースコードです.
全世界のツイートから日本語を含むツイートのみに絞り、ハッシュタグやURLを削除した後にMeCabに投げています

#! /usr/bin/env python3
# encoding=utf-8
# twitter-stream1.py
import re
import tweepy
import unicodedata
import MeCab
from datetime import timedelta

CK = ""
CS = ""
AT = ""
AS = ""


# StreamListenerを継承するクラスListener作成
class Listener(tweepy.StreamListener):
    def on_status(self, status):
        status.created_at += timedelta(hours=9)  # 世界標準時から日本時間

        if is_japanese(status.text):
            tweet = format_text(status.text)
            print(tweet)
            print(MeCab.Tagger("").parse(tweet.encode("utf-8")))


        return True

    def on_error(self, status_code):
        print('エラー発生: ' + str(status_code))
        return True

    def on_timeout(self):
        print('Timeout...')
        return True

def format_text(text):
    '''
            ツイートから不要な情報を削除
            '''
    text = re.sub(r'https?://[w/:%#$&?()~.=+-…]+', "", text)
    text = re.sub(r'@[w/:%#$&?()~.=+-…]+', "", text)
    text = re.sub(r'&[w/:%#$&?()~.=+-…]+', "", text)
    text = re.sub(r'https?://[w/:%#$&?()~.=+-…]+', "", text)
    text = re.sub('RT', "", text)
    text = re.sub('お気に入り', "", text)
    text = re.sub('まとめ', "", text)
    text = re.sub(r'[!-~]', "", text)  # 半角記号,数字,英字
    text = re.sub(r'[︰-@]', "", text)  # 全角記号
    text = re.sub('n', " ", text)  # 改行文字
    text = re.sub(';', "", text)
    text = re.sub('RT', "", text)
    text = re.sub('n', " ", text)
    return text

def is_japanese(string):
    for ch in string:
        name = unicodedata.name(ch)
        if ("CJK UNIFIED" in name and ("HIRAGANA" in name or "KATAKANA" in name)) 
                or ("HIRAGANA" in name or "KATAKANA" in name):
            return True
        return False

    def name(ch):
        try:
            return unicodedata.name

        except ValueError:
            return None


# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)

# Listenerクラスのインスタンス
listener = Listener()
# 受信開始
stream = tweepy.Stream(auth, listener)
stream.sample()
SNSでフォローする
PAGE TOP