☆☆ 新着記事 ☆☆

2019年5月28日火曜日

Python Google Translatorを使ってみた


1. pipでインストール

(venv) C:\Users\User名\Desktop\top>pip install googletrans
Collecting googletrans

2.使う

from googletrans import Translator
text='Hello, world!'
translator = Translator()

ja = Translator().translate(text, src='en', dest='ja')

>>> print(ja)
Translated(src=en, dest=ja, text=こんにちは世界!, pronunciation=None, extra_data="{'translat..
.")
>>> print(ja.text)
こんにちは世界!

--->
ja.textとしてTextデータだけを格納しないと、text/string 属性のデータベースには格納できない。
エラーになる。


(Memo: )
for i in tweets:
     print(i.created_at)
     print(i.id)
     print(i.full_text)
     ja_pre =strip_emoji(i.full_text)
     ja_google_obj = Translator().translate(ja_pre , src='en', dest='ja')
     print(ja_google_obj)
     print("==================================")

#Output
==================================
2019-07-26 22:37:00
1154883345546928128
Wow! Big VICTORY on the Wall. The United States Supreme Court overturns lower court injunction, allows Southern Border W
all to proceed. Big WIN for Border Security and the Rule of Law!
Translated(src=en, dest=ja, text=うわー!壁に大きな勝利。米国最高裁判所は、下級裁判所の差し止め命令を覆し、Southern Bord
er Wallが続行することを許可します。国境警備と法の支配に大勝利!, pronunciation=None, extra_data="{'translat...")
==================================
2019-07-26 22:18:26
1154878670739300358
https://t.co/nr9bDv3Ktq
Translated(src=en, dest=ja, text=https://t.co/nr9bDv3Ktq, pronunciation=None, extra_data="{'translat...")
==================================


☆これで動くので忘れないようにメモ

import tweepy as tw         
import pandas as pd   
from credentials import *
import pytz
import datetime
from googletrans import Translator
import json
import pprint

   
def twitter_setup():
    auth = tw.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
    api = tw.API(auth,wait_on_rate_limit=True)
    return api
extractor = twitter_setup()

def index():
     # Retrieve Tweets
     tweets = extractor.user_timeline(screen_name="realDonaldTrump",
                                      count=3,include_rts=True,tweet_mode="extended")
     tweet = tweets[0]
     b=tweet._json
     c = b["full_text"]
     print("C is \t")
     print(c)
     ja = Translator().translate(c, src='en', dest='ja')
     print(ja)
     tweet = tweets[1]
     aa=tweet._json
     bb =aa["full_text"]
     print("bb is \t")
     print(bb)
     ja2 = Translator().translate(bb, src='en', dest='ja')
     print(ja2)
     i=0
     for i in range(len(tweets)):
         tweet = tweets[i]
         aa=tweet._json
         bb =aa["full_text"]
         print("bb loop is \t")
         print(bb)
         ja2 = Translator().translate(bb, src='en', dest='ja')
         print(ja2)
         i += 1
    

     #print(text_ja)
   
         

index()


◇Emojiとか入ってるとエラーになるのを取り除く。
https://gist.github.com/Alex-Just/e86110836f3f93fe7932290526529cd1

RE_EMOJI = re.compile('[\U00010000-\U0010ffff]', flags=re.UNICODE)

def strip_emoji(text):
    return RE_EMOJI.sub(r'', text)
print(strip_emoji('🙄🤔'))




☆Twitterのテキストを翻訳する場合
上記のままだと、以下のエラーコード。
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

参考)
あまり見てないけど、丁寧そう。
https://www.codeproject.com/Tips/1236705/How-to-Use-Google-Translator-in-Python


☆ ある日突然、つかえないことに、、、、

 今までつかえていたのに、
 
  File "/home/tw_virtualenv/lib/python3.7/site-packages/googletrans/client.py", line 172, in translate
    data = self._translate(text, dest, src)
  json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

 などと、エラーが。。。

 他のサーバーではできる。

 なんと
 Googletrans: Free and Unlimited Google translate API for Python

 と書いているのに、Google自身がBanしてくることがあるらしい。


>>> from googletrans.gtoken import TokenAcquirer
>>> acquirer = TokenAcquirer()
>>> text = 'test'
>>> tk = acquirer.do(text)
>>> tk
'222835.391456'

というTokenを使って管理しているらしい。 このTokenを
googletrans stopped working with error 'NoneType' object has no attribute 'group'
https://stackoverflow.com/questions/52455774/googletrans-stopped-working-with-error-nonetype-object-has-no-attribute-group

で、リセットするようにするらしいが、どうもイタチごっこで、上手く行くときも、いかないときもあるよう

24時間、待つと良くなることもあるようなので待ってみる。

こんな時でも、別サーバーは動く。
>>> from googletrans import Translator
>>> text = "Hello World!"
>>> print(text)
Hello World!
>>> translator=Translator()
>>> ja=Translator().translate(text,src='en',dest='ja')
>>> print(ja)
Translated(src=en, dest=ja, text="こんにちは世界", pronunciation=None, extra_data="{'translat...")

0 件のコメント:

コメントを投稿