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); }
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()); }
//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()); }