見出し画像

【データの集め方講座】英語の記事を収集、翻訳。

はじめに

ご高覧いただきありがとうございます.
ソフトウェアエンジニアのKitaharaです.
本日はGoogle Newsで海外の情報を集めたうえで@TexTra®で日本語データとして使えるようにしてみようと思います.

この記事で何ができるのか

海外の情報を日本語で習得できる

日本ではなかなか目にすることのない海外の情報を簡単に知ることが出来ます. しかも日本語データにしているのでそのまま形態素解析に入力して分析をスタートすることができます.

今回使用する@TexTra®のAPIは商用利用が禁止されているのでビジネスには使えませんが, 個人利用でも十分価値のあるものを作れると思います!

使用するもの

  • Google News

  • @TexTra®

    • 翻訳APIや翻訳例, 統計といったデータを公開しているサイトです.

    • 読み方はテキストラです

    • 以下公式サイトの引用です.

      • 「みんなの自動翻訳」は、国立研究開発法人情報通信研究機構の登録商標です(第6120510号)

      • 「TexTra」は、国立研究開発法人情報通信研究機構の登録商標です(第5398294号)

      • 公式サイト

  • Python

    • プログラミング言語のひとつです.

    • 型宣言等が無く, 初心者にも扱いやすい言語だと言われています

    • 近年Deep Learningのライブラリが豊富であることから注目を集めている人気の言語です

    • 公式ドキュメント

  • Google Colab

    • Googleが提供するPythonの実行環境です

    • 主要なライブラリがインストールされている状態で使うことができます

    • Chromeでアクセスするだけで利用することができます

      • 環境構築が不要です

      • 無料で使うことができます

プログラムの制作

環境構築

Google Colabで以下のファイルをインストールしてください

!pip install GoogleNews

Google News

Google Newsはインスタンスの作成してクラスメソッドを使ってデータを集めます. まずはインスタンスの初期化を行いバージョンを確認しましょう.

# Initialize

from GoogleNews import GoogleNews
googlenews = GoogleNews()

# check version
print(googlenews.getVersion())

インスタンスには以下の様にしてコンストラクタに引数を入れておくことで取得する記事の絞り込みが出来ます.

# make instance

googlenews = GoogleNews(
    lang='en',
    region='US',
    #period='7d',
    start='02/01/2020',
    end='02/28/2020',
    encode='utf-8'
)

さっそく検索していきましょう.
get_newsはそこそこ時間がかかります.

# news.google.com から探す場合
googlenews.get_news('Google')

### google.com から探す場合使うメソッドが異なるのでご注意ください
# google.com から探す場合
# googlenews.search('APPLE')

# searchメソッドを使った場合

# result = googlenews.page_at(2)
# for i in range(len(result)):
#     print(result[i])

以下のクラスメソッドを使って結果を表示することが出来ます.

googlenews.results(sort=True)
googlenews.get_texts()
googlenews.get_links()

resultsメソッドを使うと変数にリスト形式で入力することが出来ます.
保存しやすいのでリストにしておきましょう

news_list = googlenews.results(sort=True)
print(type(news_list)
print(news_list[:5])

### return
# <class 'list'>
# [{'title': "This rare Apple deal means now's the time...

みんなの自動翻訳@TexTra®にログインしてみます. ログインが出来たらAPIの設定のページを開きましょう.

ここでは大量のAPIが公開されているのですが, その中から自分で使いたいAPIを選ぶことになります. 今回は英語から日本語への翻訳をしたいので[言語]のところを 英語 => 日本語 に設定してください.

青い「!」マークのところからAPIを打ち込む方法を見ることが出来ます.

まずは試しに, 以下の記事の冒頭のあいさつをDeepLで翻訳したものをいれてみましょう. 

コードを書いて実行していきます

import requests
from requests_oauthlib import OAuth1

api_key = 'your_api_key'
secret = 'api_secret'
text = 'Thank you for your interest in this site. I\'m Kitahara, a software engineer. In today\'s article, we will create an application that automatically advertises articles using the NoteAPI and TwitterAPI that we introduced earlier.'

consumer = OAuth1(api_key , secret)

params = {
        "key": api_key,
        "name": "your_id",  
        "type":"json",
        "text": text,
        "split": "."
}
# パラメータと一緒にPOSTする
URL = "https://mt-auto-minhon-mlt.ucri.jgn-x.jp/api/mt/generalNT_en_ja/"

try:
    res = requests.post(URL , data=params , auth=consumer)
    res.encoding = 'utf-8'
    print("[res]")
    print(res)
    print(res.text)

except Exception as e:
    print('=== Error ===')
    print('type:' + str(type(e)))
    print('args:' + str(e.args))
    print('e:' + str(e))

### return
# [res]
# <Response [200]>
# {"resultset":{"code":0,"message":"","request":{"url":"https:\/\/

実行結果を表示します.
jsonでデータを収集したのでdict型にしてkeyでひたすら検索していきます.

result = res.json()
print(result)
print(result['resultset']['result']['text'])
# 翻訳前
Thank you for your interest in this site. I'm Kitahara, a software engineer. In today's article, we will create an application that automatically advertises articles using the NoteAPI and TwitterAPI that we introduced earlier.
# 翻訳語
このサイトにご興味をお持ちいただきありがとうございます。ソフトウェア・エンジニアの北原です。本日の記事では、先ほど紹介したNoteAPIとTwitterAPIを使用して記事を自動的に広告するアプリケーションを作成します。

キレイに翻訳できていますね!

さて, いよいよ翻訳とデータ収集を同時にしてみましょう.
timeを使っている理由はサーバーに負荷をかけないようにするためです.
何回かリクエストをするので時間をおいてリクエストします.
APIを使うときは提供者に迷惑をかけないように気をつけましょう.

import time

from requests_oauthlib import OAuth1
def trans_title(text):
    api_key = '1fc93d0490f0044cde8b7492cd1d41680621374d3'
    secret = '52af8739a5835c8372426bfbdb055406'
    consumer = OAuth1(api_key , secret)

    params = {
            "key": api_key,
            "name": "your_id",  
            "type":"json",
            "text": text,
            "split": "."
    }
    # パラメータと一緒にPOSTする
    URL = "https://mt-auto-minhon-mlt.ucri.jgn-x.jp/api/mt/generalNT_en_ja/"

    res = requests.post(URL , data=params , auth=consumer)
    res.encoding = 'utf-8'
    result = res.json()
    return result['resultset']['result']['text']

for i in range(10):
    title = news_list[i]['title']
    print(trans_title(title))
    time.sleep(5)

翻訳を見てみます.
ほとんど違和感がないですね.

Appleのこの珍しい契約は、今こそApple Watch 7を買う時だということを意味している
Apple、16インチMacBook Proを2299ドルに値下げ(200ドル値下げ)
Apple、Facebookに新たな打撃を与える--Googleも参戦
Appleは賃金戦争を仕掛けようとしている
説明:AppleとGoogleのプライバシー変更がMetaに打撃を与えた理由
Appleは新しいiMac Proに力を入れているので、近い将来にローエンドの大型iMacが登場するとは思わない
AppleのMy Photo Streamは死んだのか?そうではない。
「iPhone」に関する大量のニュースと「Spatial Audio」がAppleに打撃
元巨人Brandon Marshall、Eli Appleへのアドバイスを公開
Appleの位置情報共有サービスを友人や家族と利用する6つの理由

おわりに

今回はPythonを使ってNoteの広告をするTwitterBotを作成方法を解説しました!参考になったという方はぜひハートボタンを押してください!

モチベーションが上がります!

記事内で不明な点等ございましたら気軽にご連絡ください.

Twitter: @kitahara_dev
email: kitahara.main1@gmail.com

参考


この記事が気に入ったらサポートをしてみませんか?