Evernoteに英単語・フレーズ帳をつくる

Evernoteに英単語・フレーズ帳をつくる

Evernoteのノートを英単語帳として使える素晴らしいアプリ(Everword)を見つけたので、GASでスプレッドシートからノートを追加できるようにしてみます。

準備

Evernote転送用メールアドレスを確認

Evernoteには、メールでノートを追加できる機能があります。
このときに使用する送信先が、Evernote転送用メールアドレスです(Web版からも確認することができます)。
Evernote転送用メールアドレスは、
アカウント設定 -> アカウント概要 -> メールの転送先
に記載されています。
転送用メールアドレス

ノートの構成を検討

Everwordでは、ノートのタイトルが「問題」、ノートの内容が「回答」として扱われます。
勉強に使うことを考えると、

  • 問題:覚えたい単語やフレーズ
  • 回答
    • 単語やフレーズの和訳
    • 使われている単語・イディオムの辞書的な意味
    • 解説やその他の説明
    • 出典(本やアニメなどのタイトル)

あたりが入っていればよさそうです。

スプレッドシート作成

こんな感じのスプレッドシートを作ります。
enter image description here
※ここでは、辞書サイトとしてWeblio辞書を利用させていただきます。

  • 1-2行目:各種設定
    • 保存先ノートブックを設定
    • 出典を設定
    • 使用する辞書サイトを設定
  • 3行目~:ノートの内容と辞書サイトから単語・熟語を取得
    • ノートの内容
      • A列:覚えたい単語やフレーズ
      • B列:単語やフレーズの和訳
      • C列:使われている単語・イディオムの辞書的な意味(F列からコピペ)
      • D列:解説やその他の説明
    • 辞書サイトから単語・熟語を取得
      • E列:調べたい単語・イディオム
      • F列:辞書サイトでの検索結果まとめ
      • G列~:辞書サイトを使うためのデータ列

シートの利用イメージ

シートはこんな感じで使う想定です。

  1. 本やアニメ等を見て、覚えたい単語・フレーズをA列に、日本語をB列に書く
  2. フレーズの中から、さらに辞書サイトで意味を調べたい内容をE列に書く
  3. F列に辞書サイトの検索結果が表示されるので、それをC列にコピーする
  4. その他、気になることを調べたりしてD列に記入する
  5. 1-4を繰り返す
  6. 最後にGASを実行して、Evernoteにノートを送信する

保存先ノートブックを設定(1行目A,B列)

Everwordでは指定したノートブックからノートが読み込まれます。
そこで、予めノートブックを指定してノート作成できるようにしておきます。
Evernoteのヘルプによると、メール送信時のタイトルに@[ノートブック名]と入れておけばよいようです。
ノートブック名の指定

出典を設定(2行目A,B列)

出典を記載します。

辞書サイトを設定(1行目C,D列)

ここでは、Weblio辞書を使用するため、以下を設定します。

https://ejje.weblio.jp/content/

辞書サイトを使うためのデータ列を設定(G列~)

G列以後には、E列に記載された調べたい単語・イディオムを辞書サイトで検索、結果を取得するためのデータ列を設定します。

検索用URLを作成(G, H列)

今回利用するWeblio辞書では、1単語からなる場合は
https://ejje.weblio.jp/content/beef
複数単語からなる場合は
https://ejje.weblio.jp/content/bell+pepper
のように、単語と単語の間を+で接続したURLが使われます。
そこで、E列に記入された単語・イディオムのスペースを+に置換した文字列をG列に、設定した辞書サイトと結合した検索用URLをH列に設定します。

スペースを+に置換する(G列)

文字列の置換には、substitute関数を使用します。
E列の5行目にある文字列を置換する場合、以下のように設定します。

=substitute(E5,  " ",  "+")
検索用URLを設定(H列)

置換後の文字列(G列)と辞書サイトのURL(D1)を結合して、検索用URLを設定します。
文字列同士を&で結合すればOKです。

=$D$1&G5

単語・イディオムの意味を取得(I列)

検索用URLのページから単語・イディオムの意味を取得するには、importxml関数を使用します。
H列の5行目にあるURLのページから意味を取得する場合、以下のように設定します。

=importxml(H5,  "//*[@id='summary']/div[2]/table/tbody/tr/td[2]")

※importxml関数の第2引数は、XPathを指定します。
この値は、Chromeでページを開いた上で右クリック->検証とし、意味が表示されている部分でさらに右クリック->Copy->Copy XPathを辿ることで取得できます(@id="summary"の部分はダブルクォートとして取得されますが、上記の式ではシングルクォートに置き換えています)。
enter image description here

Weblio辞書は、単に意味だけでなく、そのコアとなるイメージや詳細な解説文が掲載されている単語もあります。
それらは異なるXPathを持ちますので、必要であればJ列以後に取得するための設定を追加してください。

単語と検索結果をまとめる(F列)

E列の検索対象と、I列の単語・イディオムの意味をまとめます。
セル内での改行は、char(10)でできます。

=E5 & char(10) & I5

GAS作成

スプレッドシートの5行目以下にある1行(A~D列)を1つのノートにします。

function myFunction() {
  // Evernoteの転送アドレス
  var DEST_ADR = "Evernote転送用メールアドレス";
  
  // シートを取得
  var sheet = SpreadsheetApp.getActiveSheet();
  
  // タスク範囲を取得
  var items_array = sheet.getDataRange().getValues();
  
  // アイテム数だけ繰り返し
  var notebook = items_array[0][1];
  var series_episode = items_array[1][1];
  for (var i = 0; i < items_array.length; i++) {
    // 先頭はタイトル行なので何もしない
    if (i <= 3) {
      continue; 
    }
    
    // ノート情報を作成
    var eng_string = items_array[i][0];
    var jpn_string = items_array[i][1];
    var word = items_array[i][2];
    var other = items_array[i][3];
    
    // タイトルがなければ何もしない
    if (eng_string == '') {
      continue;
    }
    
    // 保存先ノートブック情報を付与
    eng_string += " " + notebook;
    
    // ノート情報を集約
    var card_back = jpn_string;
    if (word != '') {
      card_back += '\n\n' + word;
    }
    if (other != '') {
      card_back += '\n\n' + other;
    }
    if (series_episode != '') {
      card_back += '\n\n' + series_episode;
    }
        
    // ノートをメール送信
    MailApp.sendEmail(DEST_ADR, eng_string, card_back);
  }
}

実行結果

このようなノートがEvernoteに作成されました。
enter image description here

変に改行が入っていたり、そもそもWeblio辞書からの解説取得に失敗したりすることがありますが、そこは今のところ運用でカバーしています・・・

Written with StackEdit.

コメント

このブログの人気の投稿

Cっぽいコードでgoogle testとgoogle mockを使ってみる

Cっぽいコードでgtestとgmockを使ってみる その2

WSLにgoogle testを入れてみる