PythonでIBM Language Translatorを使ってTwitter Streamingを翻訳してみた。

タイトルなげー。

API KEY 取得

1. IBM Cloudにアクセスして登録だのなんだのを済ませて、IBM Language Translatorにアクセス。ライトアカウントを登録する。

2. サービスを作成する。日本リージョンはない模様。IBM cloud自体がないのかな・・・・・・・?

3. API Keyを表示してコピーする

環境構築

pip でインストールする。

pip install --upgrade pip 
pip install watson-developer-cloud tweepy

ソースコードを書く

プロジェクトディレクトリ/lib配下にtranslate.py を作成。

# -*- 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を実行してみると以下のように表示される。

python lib/translate.py
Hello!How are you?

プロジェクトディレクトリ配下に、main.pyを作成。Twitter の開発者情報の取得方法は割愛。

# -*-  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を実行してみる。

 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

翻訳精度高いなぁ。
次回、翻訳したものを活用するよ!