PythonでIBM Language Translatorを使ってTwitter Streamingを翻訳してみた。
タイトルなげー。
API KEY 取得
1. IBM Cloudにアクセスして登録だのなんだのを済ませて、IBM Language Translatorにアクセス。ライトアカウントを登録する。
2. サービスを作成する。日本リージョンはない模様。IBM cloud自体がないのかな・・・・・・・?
環境構築
pip でインストールする。
1 2 |
pip install --upgrade pip pip install watson-developer-cloud tweepy |
ソースコードを書く
プロジェクトディレクトリ/lib配下にtranslate.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 |
# -*- coding: utf-8-*- from watson_developer_cloud import LanguageTranslatorV3 as LanguageTranslator class Translate(object): def __init__(self): self.translator = LanguageTranslator( version="2018-05-01", url="https://gateway.watsonplatform.net/language-translator/api", iam_api_key="**** 取得したAPIキー ****" ) def translate_text(self, text, source="ja", target="en"): translated_data = self.translator.translate( text=text, source=source, target=target ) translated_text = translated_data['translations'][0]['translation'] return translated_text if __name__ == "__main__": trans = Translate() print(trans.translate_text("こんにちは!お元気ですか?")) |
lib/translate.pyを実行してみると以下のように表示される。
Shell
1 2 |
python lib/translate.py Hello!How are you? |
プロジェクトディレクトリ配下に、main.pyを作成。Twitter の開発者情報の取得方法は割愛。
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 |
# -*- coding: utf-8 -*- import re from datetime import timedelta from lib.translate import Translate import tweepy customer_key = "CUSTOMER KEY" customer_secret = "CUSTOMER 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) print("------------------------------------") print("@{0} {1}".format(screen_name, created_at)) print("ツイート: {0}".format(text)) print("翻訳ツイート: {0}".format(translated_text)) 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() |
main.pyを実行してみる。
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 39 40 41 42 |
python main.py ------------------------------------ @skoji 2018-06-23 23:52:14 ツイート: RT @mhiramat: やっぱりpythonは肌に合わないなあ・・・。ブロックがインデントだけで分けられてるコードを読むと、荒野にパンツ一丁で立ってる感じがする。 翻訳ツイート: RT @mhiramat: Well, python doesn't fit with your skin ...If you read the code that the blocks are divided by the indentation, you feel like you're standing in the wilderness with a pair of pants. ------------------------------------ @progate_kigyo 2018-06-23 23:52:25 ツイート: データ分析に最適だと思いPythonの学習はじめました。 ruby以外の言語を触るのは初めてだったので、不安はありましたが、ある程度相関性がありなんとかなりそうです 笑 とりあえずPython全カリキュラムやります。 #Progate 翻訳ツイート: I thought it best for data analysis, so I started learning Python. Since it was the first time I had touched a language other than ruby, I had some anxiety, but it was somewhat correlated, and I think I'm going to have to laugh at the whole Python curriculum. #Progate ------------------------------------ @yuasir 2018-06-23 23:53:08 ツイート: Pythonのドキュメンテーション文字列の書き方 - 22時に寝ようと思って2時に寝る。 https://t.co/fhzza1SXdz 翻訳ツイート: I want to sleep at two o'clock in the morning when I try to write a Python documentation string-22. https://t.co/fhzza1SXdz ------------------------------------ @kanimiso_drum 2018-06-23 23:53:41 ツイート: RT @groebner_basis: 面接官「得意な言語はなんですか?」 情報系「Python です」 勘違いした文系「TOEICで950点持ってます」 数学を言語だと思っている数学系「数学です」 翻訳ツイート: RT @groebner_basis: Interviewer: What is your best language?' Information line "Python." "I have 950 points at the TOEIC," a dismistakable line. Mathematics, a math system that thinks mathematics is a language. ------------------------------------ @mo_zaikon 2018-06-23 23:53:46 ツイート: Pythonからのつぶやき 翻訳ツイート: Crushing from Python ------------------------------------ @umekichinano 2018-06-23 23:53:51 ツイート: Pythonで翻訳を試してみているなう。 #python 翻訳ツイート: I'm trying to translate in Python. #python |
翻訳精度高いなぁ。
次回、翻訳したものを活用するよ!
関連
ローカルでも動くSlackBot管理ツールができるまで 〜 Bot編 〜
ローカルでも動くSlackBot管理ツールができるまで 〜 WebUI編 2 〜の続き。 はてブから…
2015年6月21日
Mac
- カテゴリー
- _