Exemple #1
0
        public WordForLearning[] GetTestWords(int userId, List <WordForLearning> examsList)
        {
            //TODO изучть по какому принципу получаем RandomRATE. связан ли он с прогрессом подбираемых слов.
            //TODO Или тут вообще рандомные слова будут
            var delta = Math.Min(7, (32 - examsList.Count));

            WordForLearning[] testWords = new WordForLearning[0];
            if (delta > 0)
            {
                var randomRate = 8 + RandomTools.Rnd.Next(5);
                return(testWords = GetPairsForTestWords(userId, delta, randomRate));
            }
            return(testWords);
        }
Exemple #2
0
        public WordForLearning[] GetWordsForLearning(int userId, int count, int maxTranslationSize)
        {
            //получаю все худщие пары юзера
            var fullPairs = _usersPairsService.GetWorstForUser(userId, count);

            var wordsForLearning = new List <WordForLearning>();

            foreach (var pairModel in fullPairs)
            {
                //получаю саму пару из словаря и его фразы и ее фразы
                var pairFromDictionary = _dictionaryService.GetPairWithPhrasesByIdOrNull(pairModel.PairId);
                //получаю все его переводы(для данного слова!, а не только пару)
                var allTranslates = _dictionaryService.GetAllTranslations(pairFromDictionary.EnWord);
                //получаю все метрики для данной пары
                var metrics = _examsAndMetricService.GetAllMetricsForPair(pairModel.MetricId);
                //получаю все переводы данного слова для юзера
                var allTranslationsOfWordForUser = _usersPairsService.GetAllUserTranslatesForWord(userId, pairFromDictionary.EnWord);

                // составляю их этого Ford For learning
                var wordForLearning = new WordForLearning(pairModel, pairFromDictionary, metrics, allTranslates, allTranslationsOfWordForUser);

                // отбор, если меньше трех переводов, то не отбираем, а берем все
                var translations = wordForLearning.GetTranslations().ToArray();
                if (translations.Length <= maxTranslationSize)
                {
                    wordsForLearning.Add(wordForLearning);
                    continue;
                }

                // ели больше трех переводов, то отбираем нужные
                var usedTranslations = translations.Randomize().Take(maxTranslationSize).ToArray();
                // назначаем их слову. Тут по задумке могут оказаться и фразы.
                wordForLearning.SetTranslations(usedTranslations);

                // убирает из фраз те фразы, которые оказались в переводах. Потмоу что мы их добавили в словарь пар
                //TODO это зачем это? по идее мы убрали фразы, когда их переносили. Тут не может быть этих фраз
                //вернуться позже и посмотреть на необходимость этого

                /*  for (int i = 0; i < wordForLearning.Phrases.Count; i++)
                 * {
                 *   var phrase = wordForLearning.Phrases[i];
                 *   if (!usedTranslations.Contains(phrase.Translation))
                 *       wordForLearning.Phrases.RemoveAt(i);
                 * }*/

                wordsForLearning.Add(wordForLearning);
            }
            return(wordsForLearning.ToArray());
        }
Exemple #3
0
        //TODO Зачем этот метод и метод выше, а еще GetTestWord
        public WordForLearning[] GetPairsForTestWords(int userId, int delta, int randomRate)
        {
            var pairsFromDb = _usersPairsService.GetWorstTestWordForUser(userId, delta, randomRate);
            // перевести в wordForLearning
            var wordsForLearning = new List <WordForLearning>();

            foreach (var pairModel in pairsFromDb)
            {
                //получаю саму пару из словаря и его фразы и ее фразы
                var pairFromDictionary = _dictionaryService.GetPairWithPhrasesByIdOrNull(pairModel.PairId);
                //получаю все его переводы(для данного слова!, а не только пару)
                var allTranslates = _dictionaryService.GetAllTranslations(pairFromDictionary.EnWord);
                //получаю все метрики для данной пары
                var metrics = _examsAndMetricService.GetAllMetricsForPair(pairModel.MetricId);
                //получаю все переводы данного слова для юзера
                var allTranslationsOfWordForUser =
                    _usersPairsService.GetAllUserTranslatesForWord(userId, pairFromDictionary.EnWord);

                var wordForLearning = new WordForLearning(pairModel, pairFromDictionary, metrics, allTranslates, allTranslationsOfWordForUser);
                wordsForLearning.Add(wordForLearning);
            }
            return(wordsForLearning.ToArray());
        }