{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": "true" }, "source": [ "# Table of Contents\n", "

1  word_memorizeの動作
1.1  checkの仕様
1.2  editの仕様
2  tree
3  quizlet
4  目的
5  csv構造
6  既存の英単語アプリ
7  既存の英単語アプリ総評
8  既存の単語帳作成アプリ
9  元のテキスト(word_original.txt)の調整
10  開発中のシステムをiphoneで使えるようにするために
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# word_memorizeの動作\n", "\n", "word_memorizeは以下のような\n", "コマンドで駆動されます.\n", "* check\n", "* edit\n", "\n", "\n", "## checkの仕様\n", "1. randomにwordsリストの中から単語を取り出す.\n", "1. その単語に対して,理解していたらd(elete),理解していなかったらe(dit)を入力する.\n", "1. d(elete)の場合,その日時をリストにメモする.\n", "1. e(dit)の場合,その日時をリストにメモし,\n", "1. その後editへ.\n", "\n", "## editの仕様\n", "1. 別のターミナルでその単語の情報をメモしているファイルを開く.\n", "1. そのメモには例文,語源,類語,意味などを書き,\n", "1. 連想させて記憶を補助させるものとする.\n", "\n", "* その他\n", " * ランダムに単語を選択する際,d(elete)となった単語を含むか含まないか選択できるようにする.\n", " * 単語の基本的な意味は,辞書で自動的に記述されるようにする.\n", "\n", "# tree\n", "```\n", "├── lib\n", "│   ├── random_pick_up\n", "│   │   ├── quizlet_memo.txt\n", "│   │   ├── random_pick_up.rb\n", "│   │   ├── word.txt\n", "│   │   ├── word.txt~\n", "│   │   ├── word_new.csv\n", "│   │   ├── word_new.txt\n", "│   │   └── word_original.txt\n", "│   ├── word_memorize\n", "│   │   └── version.rb\n", "│   └── word_memorize.rb\n", "```\n", "\n", "* word.txt\n", "* word_new.txtを更新.\n", "* 単語帳は?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# quizlet\n", " \n", " * 欠点\n", "  * 例文や文法についてのメモができない.記憶のヒントを用意できない.\n", "  * 英語→日本語で意味を書く際,少しでも間違った場合誤りとカウントされる.\n", " \n", " * 機能\n", "  * 単語と意味を入力できる(英語に限らない)\n", "  * 単語を入力すると意味は自動定義もできる.\n", "  * 英単語はword, Excel, Google Docsからインポートできる.\n", "  * 4択,筆記,単語カード,音声,テスト,ゲームと複数種類ある.\n", "  * 学習中誤った回答をした場合は,正しい答えをもう一度自分で入力できる.\n", "\n", "* memo \n", " * editを開いた時に辞書も起動してほしい.意味を自動挿入.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 目的\n", "\n", "* 何を提供する?\n", "* 何をしたい.\n", "* このソフトは英単語を知っているかの確認と,情報を自分で付け加えながら見れるようにするソフトです.\n", "* これによって,英単語を記憶に残るように関連付けながら覚えることが可能となります.\n", "* そのために次のような操作ができます\n", " * ランダムに単語が表示されます.\n", " * わかってる場合はd(elete)を\n", " * わからない場合はe(dit)でemacs画面が出てきます.\n", " * 再度表示する場合はk(eep)で残ります.\n", "\n", "これらを実装しています." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# csv構造\n", "```\n", "単語(s), [dk],簡単訳(思い出すkey), access日付を逆順に追加\n", "単語(s), [dk],簡単訳(思い出すkey), access日付を逆順に追加\n", "単語(s), [dk],簡単訳(思い出すkey), access日付を逆順に追加\n", "...\n", "```\n", "\n", "dになっても日付だけ登録しておく.そうすると,\n", "いつどれだけdになったかが保存される.\n", "\n", "従来e-learningなどで提供される単語記憶ソフトは,\n", "開発者が内容を固定した状態で提供されることが多い.\n", "しかし,単語帳や単語カードなどは自分で作成する作業を通じて,\n", "記憶の定着を促していると考えられる.\n", "しかし,このような視点に立ったソフトは???ある,ない?\n", "調べる!!\n", "\n", "あれば,欠点をあげつらう.\n", "なけりゃ,万歳.\n", "\n", "iPhoneでの提供? 山田に聞け.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 既存の英単語アプリ\n", "* [mikan](https://app-liv.jp/920856839/)\n", " * 機能\n", " * 4択の英単語クイズ.\n", " * 間違った単語は苦手な単語として記録される.\n", " * 知ってるor知らないを選択し,選択すると意味が表示される.\n", " * 間違った場合再表示され,そのターンの単語が全て知ってるになるまで続く.\n", " * 総復習では間違った回数によって完璧に覚えた,ほぼ覚えた,うる覚えと分類される.\n", " * 弱点\n", " * 間違ったものがすぐに立て続けに出てくるので,英単語の記憶というよりその場しのぎの暗記になってしまう.\n", " * その間違えた回数によって定着のレベルが判断されるので,信憑性が低く感じる.\n", " \n", " \n", "* [TOEIC800突破編](https://app-liv.jp/868628106/)\n", " * 機能\n", " * タイトルレベルにあった単語の4択クイズ.\n", " * 回答せずに答えを表示,わかった,わからないを選択することもできる.\n", " * 復習専用ページはなく,間違えた単語は自動でクイズ中に何度も登場する.\n", " * 完成,習得,習得中の指標で,習得レベルの確認ができる.\n", " * 弱点\n", " * 概ねmikanと同様.\n", " \n", "* [最後の英単語学習!マジタン](https://app-liv.jp/872461032/)(有料アプリ)\n", " * 最も目指すシステムに近い\n", " * 機能\n", " * 語彙数カウント機能で自分の学習達成度を把握できる\n", " * スクリーニング機能で既に知っている単語は省ける.\n", " * 記憶度変化機能で一度覚えた単語が一定時間経過後に再び登場する.\n", " * 弱点\n", " * スクリーニング機能において,単語の左端に「既知」と表示されるだけなので,単語は目につき,あまりスクリーニングとしての効果を発揮できていないように感じる.\n", " \n", " \n", "* [その他アプリまとめ](https://app-liv.jp/education/languages/1049/)\n", " \n", " \n", " \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 既存の英単語アプリ総評\n", "* apple storeに編集機能までついた英単語記憶アプリは存在しなかった.\n", "* スクリーニング機能のあるものについても不十分だと感じた." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 既存の単語帳作成アプリ\n", "\n", "* [アプリで自分だけの「最強の英単語集」を作る方法](http://tannomizuki.hatenablog.com/entry/2015/01/15/215727)\n", "\n", "* [単語box](https://itunes.apple.com/jp/app/単語box-クラウド時代の単語帳/id418883412?mt=8)\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "random_pick_up.rb:15: warning: found = in conditional, should be ==\n", "7241\n", "5023\n", "\"stale\\n\"\n", "\"dまたはiを入力\"\n" ] } ], "source": [ "ruby random_pick_up.rb " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. word.txt\n", " 1. 1 column目に単語\n", " 1. 2 column目にアクセス情報\n", " 1. i->d 最終アクセス時間\n", " 1. 3 column目に簡単な訳語\n", "1. word_folderないの個別ファイルはsnakeで\n", " 1. なんでも単語のに関する情報をまずは打ち込む\n", "\n", "* 行(row, 映画館の座席シート)列(column,カラム新聞の囲み記事)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "``` ruby\n", "require \"pp\"\n", "\n", "i = 1\n", "#srand(0)\n", "lines = File.readlines('word.txt')\n", "p max_n = lines.size\n", "p sel = rand(max_n)\n", "line = lines[sel]\n", "p line\n", "\n", "p 'dまたはiを入力'\n", "input = gets\n", "p input\n", "\n", "if input = \"d\" then\n", " line_new = \"#{line}, d\\n\" \n", " print line_new.gsub!(/\\n/,\"\") # gsub:\\nに\"\"(空白)を置換\n", " a = [line_new]\n", " File.open(\"./word_folder/#{line}.txt\", \"w\")do |f|\n", " a.each{|s| f.puts(s)}\n", " end\n", "end\n", "#10.times do\n", " # print rand(max_n).to_s+\"\\n\"\n", "#end\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "randというのはMersenne Twisterという擬似乱数生成器を使っています.テストの段階においては,毎回randomに値が出るとわからないので,擬似乱数の種(seed)を予め決めてしまって,毎回同じ値が出るようにします.(srand(0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* dataの状態を制御するkeywordをカンマ区切り(csv,Comma Separated Value)形式で保存しておく.\n", " * 例えば,一回アクセスした単語は1をつける\n", " * 意味を理解しているので,今後の作業が必要ない単語にはdをつける\n", "* ただし,内容は別ファイルとします.\n", " * amplifier, 1, ....\n", " * amplifier.txtに必要な内容を記述していきます." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "この作業にどんな意味があるか?\n", "どうやって上の内容を実装するか?" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "* keywordごとのファイルにすることで,例文や文法に関することを追記できる.\n", "* \"d\"や表示回数を記録し,無駄な繰り返しをなくし,覚えにくいものを明確にする." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 元のテキスト(word_original.txt)の調整\n", "* 初めに単語をリストアップするために作成したword_original.txtには,システムに活用する上で扱いにくい点があった.\n", " * リストの中に重複した単語が含まれている.\n", " * 熟語において単語間に空白が入っている.\n", " \n", "* それらを解決するために,次のプログラムを作成した.\n", " * no_dup.rbで,配列の重複を削除するuniqメソッドで重複を無くした.\n", " * trans_word.rbで,空白をアンダーバー\"_\"に変更した.これにより,全単熟語が同一のものとして処理できるようになる." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# 開発中のシステムをiphoneで使えるようにするために\n", "* [xcodeを用いる](https://furien.jp/columns/148/)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.2.2", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": ".rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.2.2" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "toc": { "colors": { "hover_highlight": "#DAA520", "navigate_num": "#000000", "navigate_text": "#333333", "running_highlight": "#FF0000", "selected_highlight": "#FFD700", "sidebar_border": "#EEEEEE", "wrapper_background": "#FFFFFF" }, "moveMenuLeft": true, "nav_menu": { "height": "12px", "width": "252px" }, "navigate_menu": true, "number_sections": true, "sideBar": true, "skip_h1_title": false, "threshold": 4, "toc_cell": true, "toc_position": {}, "toc_section_display": "block", "toc_window_display": true, "widenNotebook": false } }, "nbformat": 4, "nbformat_minor": 2 }