[一日目] TOEIC学習用アプリ制作日記

TOEIC学習アプリ

いや、別にTOEIC向けではないのだが自分がさっぱり単語の意味を覚えないので「流石に自分でアプリつくったら覚えるやろ」的なノリで作成することにしました。

システムの大雑把な仕組み

まずは膨大な単語リストをつくり、それに対してGoogle Dictionary APIを叩いて情報をとってくる。

APIを直接叩くのはめんどくさそうだが、以下のラッパー?のウェブサイトにGETパラメータとして渡してあげればJSON形式で単語の定義が返ってくるというわけである。

単語リストがあればそこから定義データを取得できるので、まずは膨大な単語リストを作成するところから始まるわけである。

TOEIC程度のレベルでも単語数はゆうに2000は超えるので手作業で入力するのは骨が折れる。そこでまあいろいろとごちゃごちゃして単語リストを作成することに成功した。

登録した単語の数は2300ほどあり、まあこれくらいあれば仮に全部覚えたとしたらTOEICにおいて単語の意味がわからなくて困ることは殆どないだろう、多分。

手順

まず、単語リストが手に入ったと仮定する。

仮定しないと始まらないので、仮定してください。

データを取得する

改行区切りでデータが保存されていたとすると、以下のようなPythonコードでAPIを叩いてどんどん定義データを保存できる。

import requests
import json
import glob

if __name__ == "__main__":
  files = glob.glob("json/*.json")
  with open("word.txt", newline='', mode='r') as f:
    words = f.readlines()
    for i, word in enumerate(words):
      phrase = word.replace('\n', '')
      if "json/" + phrase + ".json" in files:
        continue
      print(str(i) + " Downloading " + phrase)
      url = "https://googledictionaryapi.eu-gb.mybluemix.net/"
      response = requests.get(url)

      try:
        data = response.json()
        with open("./json/" + phrase + ".json", mode="w") as j:
          json.dump(data[0], j)
      except json.decoder.JSONDecodeError:
          print("JSONDecodeError")

擬似コードなのでこのままでは動かないけど、99%くらい正しいのでまあまあ信用してください。

重複してたら無視するあたり、そこそこ賢いコードです(当たり前

具体的にはurlが正しくないのでパラメータとかちゃんと設定してあげてね。

ちょっと問題点があるとすれば、常に0番目の値しか保存しないので別のところにもっといい情報があったときにそれを取り逃してしまうかもしれない。

保存されたJSONデータ

データをまとめる

ダウンロードしたJSONデータに対して処理をするコードが以下のものである。

ちなみに一度JSONをファイルとしてダウンロードしているのは、またデータをまとめたいなと思ったときにAPIに無駄にアクセスするのを防ぐためである。

データを保持さえしておけば再アクセスが不要なのでデータの整理はローカルで一瞬で済ませることができる。

import requests
import json
import glob

if __name__ == "__main__":
  with open("word.json", newline='', mode='w') as wf:
    files = glob.glob("json/*.json")
    dict = []
    for i, file in enumerate(files):
      with open(file, newline='', mode="r") as f:
        data = json.load(f)["meaning"]
        phrase = file.replace('json/', '').replace('.json', '')
        words = {}
        words["word"] = phrase
        for key in data.keys():
          try:
            words[key] = data[key][0]["definition"]
            try:
              words["example"] = data[key][0]["example"] 
            except KeyError:
              pass
          except:
            pass
        dict.append(words)
      json.dump(dict, wf, ensure_ascii=False)

これを実行すると500KBくらいの辞書ファイルが完成した。

完成した辞書ファイルの中身

単語とその品詞(名詞か動詞かなど)と、その場合の定義(説明)と使用例が載っています。

Google Dictionary APIでは日本語のサポートがないので、日本語訳は手に入れることができなかった。まあこのへんはGoogle Transrator APIみたいなのを叩けばいけるんだろうが、これは読者の方への宿題ということにする。

くれぐれもやるのが面倒だとかそういうのではない。

まとめ

最初は定義ファイルの入手にGlosbeを利用しようかと思っていたのだが、何度アクセスしてもToo many requestsと表示される上にツイッター検索すると以前からの問題で改善される見込みもなさそうなので諦めることにした。

Googleならなにか提供しているだろうと思ったが、地味に使い方がわからず困っていたらラッパー?サイトが合ったので非常に助かった。

ぶっちゃけTOEICは日本国内でしか信用されていないが(海外ではTOEFLかIELTSが一般的)、まあできて損はないしTOEICに向けにアプリができたらTOEFL向けに作成するのもおもしろそうである。

TOEFLの問題集って高いけど、BOOKOFFとかいけば先人が諦めたっぽさそうなやつが半額くらいで売ってます。

自分はそのでかい本を持ち歩くのがめんどくさかったので、裁断してスキャンしました。

この二つがあればマジでなんでも自炊できるのでオススメ。特に裁断機は安いやつもあるけど、絶対高いやつ買ったほうがいい。使いやすさが段違いです。

記事は以上。