スプレッドシート×Google翻訳で複数言語単語帳
Introduction
今回は、スプレッドシートで複数言語の単語帳の作り方を紹介します!
スプレッドシートに日本語か英語かドイツ語を入力すると、Google翻訳を呼び出して入力された言語以外の部分を自動入力します。
今勉強している文法書に出てきた単語を登録したので、変な単語ばっかですが、、
例えば6行目のように、「from」で「de」を選択し、「Deutsch」に「das Kabel」と入力すると、自動的に、「Japanese」に「ケーブル」、「English」に「the cable」が入力されます。
Motivation
私はドイツ語を勉強しています。
ドイツに1年留学していたこともあり、YouTubeでDW(日本のNHK的なTV局)を聞いていると、意味はあんまりわからないけど、「聞き取れ」ます。 ここでの「聞き取れる」は、音が拾えて、スペルがだいたい浮かぶくらいの意味です。
そういう意味で、ドイツ語は英語より聞き取るのは簡単な気がします。
しかし、単語の意味がわからない。 単語の意味がわかれば理解できるくらいになるんじゃないかと思い、単語を覚えようと思いました。
実際にはドイツ語は文法がめちゃめちゃ厳しい上、名詞の性もあるので、そこもしないと話すのはできないと思いますが、、
とりあえず単語。 ここで問題は3つあります。
- 単語本が売っていない
英語ならこれでもかというほど種類があるのに、ドイツ語単語は売っていないです。 ネットで検索すると少し出てきましたが、これだ!と思うものは見つかりませんでした。 検定試験を受けるなら、それに合うものはありそうですね。
- 単語本が好きじゃない
好きじゃない、、 大学受験のときも、古文単語はやらず、英単語も東進の1800とかだけで乗り切った。 TOEFL受けてた時も単語はやらなかったし。 だから単語本にピンと来なかったんですね。
たぶん、「使うかわからないものを無邪気に覚える」というのが好きじゃないんです。 だから、使うものを登録したい。
- 単語帳は登録が面倒
なんやねんて感じですけど、面倒ですよね。 単語の意味を調べ、日本語とドイツ語でキーボードを切り替えて入力していくの。 辞書に書かれた数ある意味の中で、とりあえずこれっていう意味を決めるのも地味に疲れます。
でもあれって、言語間で単語の意味の境界って違うから、とりあえずのポインタとして1つか2つ選ぶしかないと思うんですよね。 あとは、読んだり聞いたりしていくうちに、概念を修正していく。
また、ついでに英語の意味も知りたい。 そうすると、登録がさらに面倒に、、
おまけ:
また、最近データ分析も勉強しているので、こうやって集めたデータを使える形で残しておきたいということもあります。
まだ全然応用は考えていないですが、、
登録単語を自分の語彙として、例文生成とかできないかなとか。 一般的な例文より、自分が登録した単語でできた例文のほうがモチベ上がるかなとか。
だから今回の辞書の条件は以下の通りです。
- 単語登録が簡単
- 日-英-独の意味を自動入力
- テーブルデータで管理
Dictionary System
上記のようなモチベーションで「スプレッドシート 単語帳」で検索すると、Google SheetsでGoogle Translateを使えるとの情報が。
「1秒で作る!」とかブロガーって感じがしますね笑 嫌いだけど有益な情報でした。
これをもとに、単語帳システムを作っていきます。
最終的には、先ほど出した以下の画像の通りのシステムを作ります。
「from」で「ja」「en」「de」を選択
入力する箇所に「ここ!」「Here!」「Hier!」と表示
単語を入力すると、他の言語に自動的に翻訳
翻訳の順を決める
先入観として、英語をハブにしたほうがよい翻訳ができるかなと思い、以下のような翻訳順にしました。
赤い丸が、入力する言語です。 全翻訳が英語を経由するようにしました。
数式を書く
初めは、IF関数のELSE部分にIFをつなげる形で書いていましたが、ふと検索すると、SWITCH関数が見つかりました。
これを使って、各セルの数式を書いていきます。
ちなみにIF関数は、第1引数に条件、第2引数に条件がTRUEの場合の処理、第3引数に条件がFALSEの場合の処理を書きます。
IF(logical_expression, value_if_true, value_if_false)
第2,3引数にIFを書くことで、複数条件の分岐を表現できます。
そしてSWITCH関数は、第1引数に式、第2引数に式のケース、第3引数に、その場合の処理、、というように書きます。
SWITCH(expression, case1, value1, [case2_or_default, …], [value2, …])
これを使うことで今回の処理もすっきり書けました。
Detsch
2行目を使って数式を説明します。 見やすさ重視で改行・タブを追加しているので、使うときはそれらを消してください。
=SWITCH(B2, "", "", "de", "Hier!", "ja", IF(E2<>"ここ!",GOOGLETRANSLATE(F2, "en", "de"),""), "en", IF(F2<>"Here!",GOOGLETRANSLATE(F2,"en","de"), "") )
まず、「de」が選ばれた場合、「Hier!」と表示します。
「ja」が選ばれた場合、英語から翻訳します。
ここで、条件文を
「E2<>"ここ!"」
とすることで、自動的に表示する「ここ!」を翻訳することを防いでいます。
「de」が選ばれた場合も同様に、英語から翻訳します。
Japanese
3行目を使って数式を説明します。
=SWITCH(B3, "", "", "ja", "ここ!", "de", IF(D3<>"Hier!",GOOGLETRANSLATE(F3, "en", "ja"),""), "en", IF(F3<>"Here!", GOOGLETRANSLATE(F3,"en","ja"),"") )
まず、「ja」が選ばれた場合、「ここ!」と表示します。
残りは同様です。
Japanese
3行目を使って数式を説明します。
=SWITCH(B4, "", "", "en", "Here!", "de", IF(D4<>"Hier!",GOOGLETRANSLATE(D4, "de", "en"),""), "ja", IF(E4<>"ここ!", GOOGLETRANSLATE(E4,"ja","en"),"") )
まず、「en」が選ばれた場合、「Here!」と表示します。
残りは同様です。
これで、「from」で選択した言語の入力欄に「Hier! / ここ! / Here!」が表示され、そこに単語を入力すると、翻訳されます。
条件付きフォーマットを適用する
見やすさと、入力すべきでないセルに入力して上記の数式を消してしまわないように、空のセルをグレーにします。
範囲を指定し、「Format」タブから「Conditional Formatting」を選択します。
条件を「Is not empty」にし、フォーマットスタイルを選びます。
プルダウンを作成する
次に、「from」をプルダウンで選択できるようにします。 以下のリンクを参考にしました。
範囲を指定し、「Data」タブの「Data validation」を選びます。
「List of items」に変更し、「ja,en,de」を直接書きます。
これで今回のシステムは一旦完成です。
Google Translate
必要に応じて、自分で調べた意味を直接書くといった使い方もできますね。
というか、Google翻訳が完璧じゃないのでそうしないといけない場面があります。
der/die/das 問題
どちらかというと、ドイツ語という言語のほうのバグのような気もしますが笑 英語に「the」をつけると「der/die/das」を入れてくれます。
ただ、日本語だとうまくいきません。 「その」をつけると、「That」として、「dieser」などがついてしまいます。
英語がハブ
ドイツ語を入力したときの日本語の翻訳が気に入らなかったので、英語を経由せずに翻訳させてみたところ、まったく同じ結果になりました。
具体的には、7行目の「Wildschwein」ですが、この意味は、「野生+豚」でイノシシです。 しかし、独→日でも独→英→日でも「野生のイノシシ」、、
どうやら英語をハブにして翻訳をしているみたいです。 独→英の翻訳がおかしいので、どうやっても日本語もおかしくなるみたいです。
なので、翻訳の順は、英語を経由せず、点線の通りでよかったことになります。
Conclusion
まとめ
今回は、スプレッドシートとGoogle翻訳を使って、登録簡単な単語帳システムを作りました。
まだまだ気に入らない点もありますが、まあまあ簡単にできたのでコスパはよかったかな。
できたものはここに置いておきます。
これはコピーなので、「単語全然増えない。使ってないやんけ!」とか思わないでください笑
今後の拡張について
品詞も使って、名詞なら英語に「the」をつけてドイツ語にする、といった拡張もできますね。
また、常に「der/die/das」が「the」に変換されるなら、名詞の場合は、独→英の結果から「the」を除くといったこともできそうです。
これ以上は、スプレッドシート数式で書くのが面倒なのでやりたくないですが、、笑
Pythonからスプレッドシートをいじる感じかな。 そしたら、Google翻訳じゃないAPI使ってもいいかもしれません。
とにかく、簡単登録単語帳ができました! また拡張したら紹介しようと思います!