外国語の意味と例文を調べる


趣味の関係でよく日本語⇔ロシア語の単語の意味と例文を調べることがあるのだが、
分からない単語に出会うたびにchromeを開き、google translateにアクセスしているのでは面倒。

ということで、流行りのjqを使って我らが同志terminalを使って単語の意味と例文を調べられるようなスクリプトを書いてみた。

(jq初デビューのため間違いやアドバイスなどご指摘を歓迎します!)

インストール

まずはjqのインストール

for OSX

macならhomebrewでしょう。

brew install jq

for ubuntu

sudo aptitude install jq

スクリプトを導入

.bashrcなどに以下を追加

translate.bash
function translate(){
    local FROM
    local TO
    if [ $# -eq 1 ]; then
        FROM="en"
        TO="ja"
    elif [ $# -eq 3 ]; then
        FROM=$2
        TO=$3
    else
        echo "[usage] translate phrase [from(en) to(ja)]" 1>&2
    fi
    if [ "$TO" != "" ]; then
        echo "$1 ($FROM->$TO)"
        curl -sSX GET "http://glosbe.com/gapi/translate?from=$FROM&dest=$TO&format=json&phrase=$1&pretty=true" | jq -r '[.tuc[]|if .phrase == null then empty else {w:.phrase.text, m:.meanings} end]|reduce .[] as $i ("\n"; . + $i.w + "\n" + reduce $i.m[] as $m (""; . + "\t" + $m.text + "\n"))' 2>/dev/null
    fi
}

function transexpl(){
    local FROM
    local TO
    if [ $# -eq 1 ]; then
        FROM="en"
        TO="ja"
    elif [ $# -eq 3 ]; then
        FROM=$2
        TO=$3
    else
        echo "[usage] transexpl phrase [from(en) to(ja)]" 1>&2
    fi
    if [ "$TO" != "" ]; then
        echo "$1 ($FROM->$TO)"
        curl -sSX GET "http://glosbe.com/gapi/tm?from=$FROM&dest=$TO&format=json&phrase=$1&pretty=true" | jq -r --arg FROM "$FROM" --arg TO "$TO" 'reduce .examples[] as $e ("";. + $FROM+":\t" + $e.first + "\n"+$TO+":\t" + $e.second + "\n\n")' 2>/dev/null|less
    fi
}

使用方法

[usage] translate phrase [from(en) to(ja)] # 単語の意味
[usage] transexpl phrase [from(en) to(ja)] # 例文

のとおり。

翻訳元と翻訳先の言語は省略すると英語→日本語になる。

$ translate pencil
pencil (en->ja)

鉛筆
    graphite writing-instrument
    A common writing utensil (made of a graphite shaft surrounded by wood) that uses graphite (commonly referred to as lead) to make marks on paper.
えんぴつ
    A common writing utensil (made of a graphite shaft surrounded by wood) that uses graphite (commonly referred to as lead) to make marks on paper.
こうせんそく
こうそく
ペン
ペンシル
光束
光線束
$ transexpl 遅刻 ja ru
ja:     彼は遅刻すると思う。
ru:     Я думаю, он опоздает.

ja:     上司は私が会議に遅刻したことを許してくれなかった。
ru:     Мой начальник не простил меня за то, что я опоздал на совещание.

ja:     今度だけは遅刻を大目に見てやろう。
ru:     В этот раз я закрою глаза на ваше опоздание.

ja:     又しても彼女は遅刻した。
ru:     Она снова опоздала.

ja:     言うまでもないが、彼はいつものように学校を遅刻した。
ru:     Не нужно говорить, что он, как обычно, опоздал в школу.

ja:     彼は遅刻の言い訳をした。
ru:     Он извинился за опоздание.

ja:     君は仕事に遅刻したね。
ru:     Ты опоздал на работу.

ja:     彼女はよく学校に遅刻した。
ru:     Она часто опаздывала в школу.
(続く)

結構便利。