roombaの日記

読書・非線形科学・プログラミング・アート・etc...

英単語の日本語訳をプログラム内やターミナル内で取得する

はじめに

自分用の英語学習アプリケーションをつくってみたいな、と考えることがあります。そのためには任意の英単語の日本語訳を取得できることが必要なので、今回はそれを実現してみることにしてみました。

Glosbeというオンライン辞書APIを利用し、プログラム内で英単語の日本語訳を取得・表示できるようにします。また、その応用として「ターミナルで瞬時に英単語を翻訳するコマンド」をつくってみることにします。

本記事でできるようになること

  • プログラム内で、任意の英単語の日本語訳を取得できるようになる
  • ターミナル(端末)を開いているとき、"dict hoge"と入力するだけで"hoge"の日本語訳を表示させることができるようになる(下図)

f:id:roomba:20150708181437p:plain



なお、Pythonを実行できる環境が整っていることを前提とします。

任意の英単語の日本語訳を取得する方法

概要

Glosbe APIを利用します。glosbe.com
詳細は上のリンクを参照していただければいいのですが、簡単にいえば、下記にアクセスすると"test"の翻訳情報がJSONという形式で得られるというものです。"test"の部分を他の単語に変えればその単語の翻訳情報が得られます。

https://glosbe.com/gapi/translate?from=en&dest=ja&format=json&phrase=test&pretty=true

プログラム中で上記URLにアクセスし、得られたJSONのデータを取り出すことによって和訳を取得します。

Pythonによる実装

以下のようになります。コマンドライン引数として受け取った英単語の和訳を表示するプログラムです。

#! /usr/bin/python                                                                                                                                                       
# -*- coding: utf-8 -*-                                                                                                                                                  

import urllib2, json, sys

# 英単語を受け取って、日本語訳を並べた文字列を返す関数                                                                                                                   
def translate(phrase):
    # Glosbe API により、引数に与えられた単語の翻訳を取得                                                                                                                
    # set URL                                                                                                                                                            
    from_lang = "en"# English                                                                                                                                            
    dest_lang = "ja"# Japanese                                                                                                                                           
    url = "https://glosbe.com/gapi/translate?from=" \
        + from_lang + "&dest=" + dest_lang \
        + "&format=json&phrase=" + phrase + "&pretty=true"
    response = urllib2.urlopen(url)
    json_data = response.read()
    json_dict = json.loads(json_data)

    return_txt = "" # これを返り値にする                                                                                                                                 
    tuc = json_dict["tuc"]# tuc: list                                                                                                                                    
    for i in range(len(tuc)):
        if u"phrase" in tuc[i].keys():
            return_txt += tuc[i]["phrase"]["text"] + "\n"                                                                                                              
    return return_txt

# Main関数                                                                                                                                                               
if __name__ == '__main__':
    # コマンドライン引数を取得 (sysをimportしておく必要あり)                                                                                                             
    argvs = sys.argv
    argc = len(argvs)

    if argc == 2:
        # 使用法が守られていた場合、コマンドライン引数の値をphraseに代入                                                                                                 
        phrase = argvs[1]
    else:
        # 使い方を教える                                                                                                                                                 
        print "Usage: python translate.py 'word'"
        phrase = ""

    if phrase:
        phrase_jp = translate(phrase)
        if phrase_jp:# 翻訳が見つかった場合                                                                                                                              
            print phrase_jp
        else:# 翻訳が見つからなかった場合                                                                                                                                
            print "Not Found. "

実行方法

上記プログラムを例えば"translate.py"として保存し、以下のようにして実行します。

$ python translate.py test

"test"という英単語の和訳が表示されるはずです。
また、辞書に存在しない英単語を入力した場合、"Not Found."と表示するようになっています。

$ python translate.py roomba
Not Found

「ターミナルで瞬時に英単語を翻訳するコマンド」をつくる

上記のPythonファイルを好きな場所に保存します。以下ではデスクトップにtranslate.pyという名で保存したものとして説明します。
筆者はLinux(Ubuntu 12.04)で実行していますが、Macでもたぶん同じだったと思います(未検証)。Windowsは知りません。

■ ~/.bashrcというファイルを開き(例えば、ターミナルで"emacs -nw ~/.bashrc")、その末尾に以下の行を追加します。

alias dict="~/Desktop/translate.py "

""の中は保存した場所・ファイル名に応じて変更してください(以下も同じ)。

■ ターミナルで以下のように入力します。

$ source ~/.bashrc

この時点で、ターミナルで"dict"と入力したときに"~/Desktop/translate.py"を実行してくれるようになります。

■ ターミナルで以下のように入力し、パーミッションを変更しておきます。

$ sudo chmod +x ~/Desktop/translate.py

「ターミナルで瞬時に英単語を翻訳するコマンド」を実行する

以上の手続きを終えたら、ターミナルを開き、以下のように入力してみます。

$ dict test

すると、以下のように"test"という単語の和訳が表示されるはずです。testを他の英単語に変えても同様です。やったね!

$ dict test
テスト
試験
試練
実験
試す
テストする
検査
考査
試し
試煉
試錬

験し
こうさ
しけん
しれん
する
ためし
学力検査
検定
試みる

おわりに

ここで紹介したプログラムを応用すれば、例えば

  • どこかから頻出英単語のリストを取得してきて、本記事と同様のプログラムによってその和訳と対応付け、My単語帳をつくる
  • 「英文ニュースを取得してきて、任意の単語をクリックすると和訳が表示される便利なHTMLファイルを吐き出す」ようなプログラムをつくる

などといったものができると思います。
また、後半で紹介したdictコマンドを作成しておけば、ブラウザや辞書を開くまでもなく英単語の意味を調べることができますね。ブラウザよりもターミナルを開いていることが多いという人がどれだけいるかは謎ですが……

また、本記事ではGlosbe APIの一部しか利用していません。和訳以外にも英英辞典の記述などが得られたりするので、いろいろ試してみてください。