Esempio n. 1
0
        private SimpleBracketsTaskModel GenerateFromPresentSimplePositive(ParsedSentModel parsedSent)
        {
            var verbIndex = parsedSent.Tokens
                            .FindIndexOf(x => PositiveVerbTags.Contains(x.Tag));

            if (verbIndex == -1)
            {
                return(null);
            }

            var verbToken = parsedSent.Tokens[verbIndex];

            var startItems = parsedSent.Tokens
                             .Take(verbIndex)
                             .Select(x => x.Word);
            var endItems = parsedSent.Tokens
                           .Skip(verbIndex + 1)
                           .SkipLast(1)
                           .Select(x => x.Word);

            var allTaskTokens = startItems
                                .Concat(new[] { OptionString })
                                .Concat(endItems)
                                .ToList();

            var sent = string.Join(' ', allTaskTokens);

            sent = $"{sent}{parsedSent.Tokens[^1].Word}";
Esempio n. 2
0
        private CreateTaskItemModel GenerateTaskItem(
            string generationId,
            GenerateTaskModel generateTaskModel,
            ParsedSentModel parsedSent)
        {
            var bracketsModel = parsedSent.SentType switch
            {
                SentTypes.PresentSimpleNegative => GenerateFromPresentSimpleNegative(parsedSent),
                SentTypes.PresentSimpleQuestion => GenerateFromPresentSimpleQuestion(parsedSent),
                SentTypes.PresentSimplePositive => GenerateFromPresentSimplePositive(parsedSent),
                _ => throw new ArgumentException($"SentType not supported {parsedSent.SentType}")
            };

            if (bracketsModel == null)
            {
                return(null);
            }

            return(new CreateTaskItemModel
            {
                TaskGenerationId = generationId,
                SourceSentId = parsedSent.Id,
                GrammarPart = generateTaskModel.GrammarPart,
                SentType = parsedSent.SentType,
                TaskType = TaskType.SimpleBrackets,
                EnglishLevel = parsedSent.EnglishLevel,
                Content = bracketsModel.ToBsonDocument(),
            });
        }
Esempio n. 3
0
        private SimpleBracketsTaskModel GenerateFromPresentSimpleNegative(ParsedSentModel parsedSent)
        {
            var subjectTokens = GetSubject(parsedSent.Tokens);
            var auxToken      = parsedSent.Tokens[subjectTokens.Count];
            var isTobeAux     = auxToken.Lemma == "be";

            IReadOnlyCollection <SentTokenModel> verbTokens = Array.Empty <SentTokenModel>();

            if (!isTobeAux)
            {
                var verbIndex = parsedSent.Tokens
                                .FindIndexOf(x => x.Tag == GrammarTags.VB);

                verbTokens = parsedSent.Tokens
                             .Skip(subjectTokens.Count + 2)
                             .Take(verbIndex - subjectTokens.Count - 1)
                             .ToList();
            }

            var firstContentPart = subjectTokens
                                   .Select(x => x.Word)
                                   .ToList();
            var endPart = parsedSent.Tokens
                          .Skip(subjectTokens.Count + 2 + verbTokens.Count)
                          .SkipLast(1)
                          .Select(x => x.Word)
                          .ToList();

            var firstPartStr = string.Join(' ', firstContentPart);
            var endPartStr   = string.Join(' ', endPart);
            var content      = $"{firstPartStr} {OptionString} {endPartStr}{parsedSent.Tokens.Last().Word}";

            var verbStr = isTobeAux ? "be" : string.Join(' ', verbTokens.Select(x => x.Lemma));
            var option  = $"not {verbStr}";

            var auxWord     = MapVerbTokenWithoutShortForm(auxToken);
            var verbAnswer  = string.Join(' ', verbTokens.Select(x => x.Word).ToList());
            var answerShort = $"{auxWord}n't {verbAnswer}";
            var answerLong  = $"{auxWord} not {verbAnswer}";

            var line = new SimpleBracketsLineModel
            {
                Answer = new[]
                {
                    answerShort,
                    answerLong,
                },
                Content = content,
                Option  = option,
            };

            return(new SimpleBracketsTaskModel
            {
                Lines = new[] { line },
            });
        }
        public async Task <EnglishLevel> GetSentLevelAsync(ParsedSentModel sent)
        {
            var words = sent.Tokens
                        .Where(x => x.Pos != GrammarTags.PUNCT)
                        .Select(x => x.Lemma.ToLower())
                        .ToList();

            var wordsMetadata = await _wordMetadataRepository.GetAsync(words);

            if (wordsMetadata.Count == 0)
            {
                return(EnglishLevel.None);
            }

            return(wordsMetadata.Max(x => x.Level));
        }