【感情分析】PythonでIBM Tone Analyzerを使ってTwitter Streamingを感情分析してみた
PythonでIBM Language Translatorを使ってTwitter Streamingを翻訳してみた の続き。
今回の目的
今回の目的は、IBM Tone Analyzerを使って、Twitter Streaming APIを使って取得したつぶやきを感情分析してみる。
問題点
残念ながら、IBM Tone Analyzerは日本語対応していない。そのため、IBM Language Translatorで英訳したものを分析してもらう。
APIキー取得
1. カタログから、Tone Analyzerを選択。
2. サービスを作成
3. ユーザー名・パスワードを表示して控えておく。
環境構築とか
前回と同じ。
ソースコード
lib/tone_analyze.pyを作成する。
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# -*- coding: utf-8-*- from watson_developer_cloud import ToneAnalyzerV3 as ToneAnalyzer class ToneAnalyze(object): def __init__(self): self.tone_analize = ToneAnalyzer( version="2017-09-21", username="**ユーザー名**", password="**パスワード**" ) def analyze_text(self, text, content_type="text/plain;charset=utf-8"): tone = self.tone_analize.tone( tone_input=text, content_type=content_type ) return tone if __name__ == '__main__': tone_analyze = ToneAnalyze() print(tone_analyze.analyze_text( "Yay! I bought an Iphone! https://iphone.com")) |
実行してみる。
Shell
1 |
{'document_tone': {'tones': [{'score': 0.896776, 'tone_id': 'joy', 'tone_name': 'Joy'}]}, 'sentences_tone': [{'sentence_id': 0, 'text': 'Yay! I bought an Iphone!', 'tones': [{'score': 0.896776, 'tone_id': 'joy', 'tone_name': 'Joy'}]}, {'sentence_id': 1, 'text': 'https://iphone.com', 'tones': []}]} |
Joyと判定された!
Twitter Streamingで取得したツイートを翻訳する
main.pyを書き換える。
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# -*- coding: utf-8 -*- import re from datetime import timedelta from lib.translate import Translate from lib.tone_analyze import ToneAnalyze import tweepy customer_key = "CONSUMER KEY" customer_secret = "CONSUMER SECRET" access_token = "ACCESS TOKEN" access_token_secret = "ACCESS TOKEN SECRET" class Listener(tweepy.StreamListener): def on_status(self, status): translate = Translate() tone_analyze = ToneAnalyze() text = status.text if(re.search("[\u3041-\u3093]", text)): screen_name = status.author.screen_name created_at = status.created_at + timedelta(hours=9) translated_text = translate.translate_text(text) tone = tone_analyze.analyze_text(translated_text) print("------------------------------------") print("@{0} {1}".format(screen_name, created_at)) print("ツイート: {0}".format(text)) print("翻訳ツイート: {0}".format(translated_text)) if not tone["document_tone"]["tones"]: print("トーンを判定できませんでした。") else: print("トーン: {0}".format(tone["document_tone"]["tones"][0]["tone_id"])) return True def on_error(self, status_code): print('Error: ' + str(status_code)) return True def on_timeout(self): print('Timeout...') return True def main(): # Twitterオブジェクトの生成 auth = tweepy.OAuthHandler(customer_key, customer_secret) auth.set_access_token(access_token, access_token_secret) # Listenerクラスのインスタンス listener = Listener() # 受信開始 stream = tweepy.Stream(auth, listener) stream.filter(track=["python"]) # 指定の検索ワードでフィルタ if __name__ == '__main__': main() |
以下、実行結果。
実行結果
Shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
------------------------------------ @chocco110 2018-06-24 23:51:36 ツイート: 2時間弱~。レベルアップが楽しい~ Python 学習コース Ⅰを修了しました! https://t.co/HWZMzwXgBj #Progate 翻訳ツイート: It's just under two hours.I've completed the 'Python Learning Course I' ~ level-up! https://t.co/HWZMzwXgBj #Progate トーン: tentative ------------------------------------ @wqv5mbs2 2018-06-24 23:52:36 ツイート: Pythonを使ってRospeexで音声合成してみた https://t.co/fz4SzW8r4x 翻訳ツイート: I tried to use Python to synthesized it on Rospeex, https://t.co/fz4SzW8r4x. トーンを判定できませんでした。 ------------------------------------ @okaimonoweb 2018-06-24 23:53:47 ツイート: 【PC・システム開発部門】現在売れ筋ランキング1位 [楽天市場の部]: Pythonデータサイエンスハンドブック Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習… https://t.co/UFEumCSrpK 翻訳ツイート: [PC System Development Department] Current top-selling selling muscle ranking [Rakuten Market Division]: PythonData Science Handbook: Data Analysis using NumPy, NumPy, pandas, Matplotlib, scikit-learn to analyze data, machine learning ... https://t.co/UFEumCSrpK トーン: analytical ------------------------------------ @umekichinano 2018-06-24 23:53:55 ツイート: Pythonで感情分析してみている。楽しい〜。 翻訳ツイート: I have an emotional analysis in Python.It's fun. トーン: joy ------------------------------------ @san5w 2018-06-24 23:57:25 ツイート: Pythonの本、読書。 CSS書き書き。 #100DaysOfCode 8日目 翻訳ツイート: Python books, reading. A CSS write. #100DaysOfCode 8 days トーン: joy ------------------------------------ @uowuow 2018-06-24 23:57:35 ツイート: 結構マイナーなファイル形式だと思うんだけど、BlenderファイルからPythonのバイトコンパイルファイルまでRenee Undeleterが対応しててすごいぞ Rene.E LaboratoryにBlendererがいるのかな… https://t.co/pXznsghtzp 翻訳ツイート: I think it's a pretty mynament file format, but the Renee Undeleter can handle the Renee Undeleter, from the Blender file to the Python bytcompile file, and the Rene.E Laboratory has a Blenderer in the Rene.E Laboratory ... https://t.co/pXznsghtzp トーン: joy |
実際には正確かどうかの数値なども取得されているけど、とりあえず結果だけ出力。いろいろ活用できそうだけど、無料枠が月2,500回までなので、お金払わないと実用性なさそうだなぁ。
関連
PythonでIBM Language Translatorを使ってTwitter Streamingを翻訳してみた。
タイトルなげー。 API KEY 取得 1. IBM Cloudにアクセスして登録だのなんだのを済ま…
2018年6月23日
_
[雑][Python] ローカルでも動くSlackのBot管理ツールを作成してみた(Bottle + jinja2 + Slacker)
とても雑なSlackのBot管理ツールを作成してみた。 はてブからデータを取得してくるもの。 次回以…
2015年6月18日
bottle
Raspberry Piにミクさんボイスでタイムラインをしゃべらせた(OpenJTalk)
Raspberry Piでやる意味があまりないのだけれど。 前提 以下を実行できるようにしておく。 …
2016年8月1日
_