外来語を記憶するためのアルゴリズム

現時点では、単語を記憶するための多くのアプリケーションが作成されています。 私が覚えているもののうち、 Lingualeo英単語SlovoUchなどのAndroidアプリケーションを強調できます。



私にとってこれらのアプリケーションの主な欠点は、自分の単語ベースを追加するための有料アカウントでした。 そのため、単語を記憶するための独自のアプリケーションを作成するという疑問が生じました。 主なアイデアは、単語を母国語に翻訳するための外部辞書と翻訳APIを接続することでした。 そのようなAPIとして、Yandex API( 翻訳 APIおよび辞書API )が選択されました。



最初のステップは、開発者キーを取得することでした。 翻訳者辞書のために



JavaScriptおよびjQueryライブラリーが言語および開発プラットフォームとして選択されました。



単語を目的の言語に翻訳するために、次のコードを使用しました。



var oneWord = function() { $.post("https://dictionary.yandex.net/api/v1/dicservice.json/lookup", { key: apiKey, lang: lang, text: words[index].text }, function(data) { words[index].tr = ""; words[index].ts = ""; for (var j = 0; j < data.def.length; j++) { var def = data.def[j]; for (var k = 0; k < def.tr.length; k++) { var tr = def.tr[k]; words[index].tr += tr.text + "; "; } if (def.ts) words[index].ts = def.ts; } if (words[index].tr == "") { translateWords(); tsWords(); return; } else { var str = words[index].tr; words[index].tr = str.substring(0, str.length - 2); } complete(); }, "json"); }; var tsWords = function() { var text = words[index].text; var tsText = ""; var tsWords = text.match(/\S+/gi); var tsIndex = 0; var tsPost = function() { $.post("https://dictionary.yandex.net/api/v1/dicservice.json/lookup", { key: apiKey, lang: lang, text: tsWords[tsIndex] }, function(data) { var ts = ""; for (var j = 0; j < data.def.length; j++) { var def = data.def[j]; if (def.ts) ts = def.ts; } tsText += ts + " "; if ((tsIndex < (tsWords.length - 1)) && (tsIndex < 5)) { tsIndex++; tsPost(); } else { words[index].ts = tsText.trim(); complete(false, true); } }, "json"); }; tsPost(); }; var translateWords = function() { $.post("https://translate.yandex.net/api/v1.5/tr.json/translate", { key: apiKeyTranslate, lang: slang, text: words[index].text }, function(data) { words[index].tr = ""; for (var j = 0; j < data.text.length; j++) { var text = data.text[j]; words[index].tr += text + "; "; } var str = words[index].tr; words[index].tr = str.substring(0, str.length - 2); complete(true, false); }, "json"); }; var qu = function() { if (!words[index].tr) { oneWord(); } else { complete(); } }; qu();
      
      





ここで、oneWord関数は1つの単語を翻訳し、tsWordsは式の最初の5つの単語の転写を検索します(単語が指定されていないが文の場合)、translateWordsは文を翻訳します。



結果の完全な関数が呼び出され、単語のフォームに文字起こしと翻訳が入力されます。



  var complete = function(tr, ts) { if (ts == undefined) ts = true; if (tr == undefined) tr = true; var word = words[index]; if (tr) $("#text").html(word.text); if (ts) $("#ts").html("[" + word.ts + "]"); $("#tr").hide(); $("#attempt").hide(); $("#show").show(); $("#tr").html(word.tr); $("#tts").show(); };
      
      





単語の配列では、単語のインデックスは現在の単語を反映して記憶しています。 次の単語は、次のアルゴリズムに従って選択されます。



  var words = [], patternCount = 5, indexMemory = {}, indexMemoryCount = 0, patternIndex = [], lastIndex = -1, lastIndexs = [], lastIndexsCount = 2, wasAttempt = false, wasMemory = false, deep = 0, deepMax = 100; var index = nextIndex(); var nextIndex = function() { deep++; if (lastIndexsCount - words.length >= 0) { lastIndexsCount = 0; } if ((patternIndex.length < patternCount) && (indexMemoryCount < words.length)) { if (deep > deepMax) { var index = maxAttemptsIndex(true); return index; } var index = Math.floor(Math.random() * words.length); if (indexMemory[index]) { return nextIndex(); } indexMemory[index] = "do"; indexMemoryCount++; patternIndex.push(index); lastIndex = index; pushIndex(lastIndex); return index; } else { var index = Math.floor(Math.random() * (patternIndex.length + 1)); if (index == patternIndex.length || (patternIndex.length == 0)) { wasMemory = true; var ind = maxAttemptsIndex(); if (inArray(lastIndexs, ind)) { if (deep > deepMax) { ind = Math.floor(Math.random() * words.length); lastIndex = ind; pushIndex(lastIndex); return ind; } return nextIndex(); } lastIndex = ind; pushIndex(lastIndex); return ind; } if (inArray(lastIndexs, patternIndex[index])) return nextIndex(); lastIndex = patternIndex[index]; pushIndex(lastIndex); return patternIndex[index]; } }; var maxAttemptsIndex = function(notAttempts) { var arr = sortMemoryIndexes(indexMemory); var index = getRandomFishIndex(arr, notAttempts); return index; }; var pushIndex = function(index) { if (lastIndexsCount == 0) return; if (lastIndexs.length < lastIndexsCount) { lastIndexs.push(index); } else { lastIndexs[0] = lastIndexs[1]; lastIndexs[1] = index; } }; var inArray = function(arr, elem) { for (var i = 0; i < arr.length; i++) { if (arr[i] == elem) return true; } return false; }; function getRandomFishIndex(arr, notAttempts) { var fishForLevel = arr; var fishTotalWeight = 0, fishCumWeight = 0, i; // sum up the weights for (i = 0; i < fishForLevel.length; i++) { fishTotalWeight += fishForLevel[i].attempts; } if (notAttempts) { fishTotalWeight = 0; } var random = Math.floor(Math.random() * fishTotalWeight); // now find which bucket out random value is in if (fishTotalWeight == 0) return fishForLevel[Math.floor(Math.random() * fishForLevel.length)].index; for (i = 0; i < fishForLevel.length; i++) { fishCumWeight += fishForLevel[i].attempts; if (random <= fishCumWeight) { return fishForLevel[i].index; } } } function sortMemoryIndexes(indexMemory) { var arr = []; for (var key in indexMemory) { if (indexMemory[key] == "do") { var word = jQuery.extend(true, {}, words[key]); word.index = key; arr.push(word); } } var sAttempt = function(first, second) { if (first.attempts < second.attempts) return 1; else if (first.attempts > second.attempts) return -1; else return 0; }; return arr.sort(sAttempt); }
      
      





一番下の行は、以前に学習した単語だけでなく、以前に学習していない単語のセットから次の単語を選択する必要があるということです。 さらに、単語があまり覚えられていない場合、後者を表示する可能性が高くなります。



単語を表示する確率の順列を実装するのは「間違った」ボタンです。



  $("#attempt").click(function() { words[index].attempts++; wasAttempt = true; $("#attempt").hide(); });
      
      





言葉を記憶するこの方法は、私にとって最も効果的であるように思われました。 それ以外の場合、アプリケーションプログラムコードは、インターフェイス要素のイベントとアクションを実装します。 HTMLおよび付随するJavaScriptコードは、Androidプラットフォーム用のCordovaでラップされました。



EnglishWordsアプリを使用すると、英単語や他の多くの言語の単語を学習できます。 プログラムには、学習のための基本的な単語のセットがあります。 プログラムの主な特徴は、 学習用の独自の単語セットを作成する機能です。 画面情報*パーセント。 辞書で学習された単語の割合を示します。 仕組み。 単語を学習するプロセスは、プログラムが選択した辞書から5つのランダムな単語を入力し、それらをランダムな順序で表示し始めるという事実から始まります。 辞書から単語が学習された後、次の5つのランダムな単語が抽出されます。 単語に正しく答えないと、単語がより頻繁に表示されます。 すべての単語が学習されると、しばしば間違った答えが与えられる単語のみが表示されます。 辞書基本的な単語のセットには、最も使用される英語の単語が約1000個含まれています。



このアプリケーションは、yandexとgoogle apiを使用して、翻訳、文字起こし、音声再生を受け取ります。 アプリケーションを機能させるには、インターネットアクセスが必要です。



アプリケーションのスクリーンショットを提供します:










All Articles