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

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

タイトルなげー。

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