Example #1
0
 private async Task ExtractSnippetsFromSubmissionAsync(Submission submission)
 {
     foreach (var(firstTokenIndex, snippet) in submissionSnippetsExtractor.ExtractSnippetsFromSubmission(submission))
     {
         await snippetsRepo.AddSnippetOccurenceAsync(submission, snippet, firstTokenIndex);
     }
 }
 public async Task ExtractSnippetsFromSubmissionAsync(Submission submission)
 {
     foreach (var(firstTokenIndex, snippet) in submissionSnippetsExtractor.ExtractSnippetsFromSubmission(submission))
     {
         await snippetsRepo.AddSnippetOccurenceAsync(submission, snippet, firstTokenIndex, configuration.AntiPlagiarism.SubmissionInfluenceLimitInMonths).ConfigureAwait(false);
     }
 }
Example #3
0
        private async Task UpdateSnippetsFromSubmissionAsync(ISnippetsRepo snippetsRepo, Submission submission)
        {
            var occurences = new HashSet <Tuple <int, int> >(
                (await snippetsRepo.GetSnippetsOccurrencesForSubmissionAsync(submission).ConfigureAwait(false))
                .Select(o => Tuple.Create(o.SnippetId, o.FirstTokenIndex))
                );

            foreach (var(firstTokenIndex, snippet) in submissionSnippetsExtractor.ExtractSnippetsFromSubmission(submission))
            {
                var foundSnippet = await snippetsRepo.GetOrAddSnippetAsync(snippet);

                if (!occurences.Contains(Tuple.Create(foundSnippet.Id, firstTokenIndex)))
                {
                    log.Info($"Информация о сниппете #{foundSnippet.Id} в решении #{submission.Id} не найдена, добавляю");
                    try
                    {
                        await snippetsRepo.AddSnippetOccurenceAsync(submission, foundSnippet, firstTokenIndex, configuration.AntiPlagiarism.SubmissionInfluenceLimitInMonths);
                    }
                    catch (Exception e)
                    {
                        log.Error(e, $"Ошибка при добавлении сниппета #{foundSnippet.Id} в решении #{submission.Id}");
                    }
                }
            }
        }
Example #4
0
        private async Task ExtractSnippetsFromSubmissionAsync(Submission submission)
        {
            logger.Information("Достаю сниппеты из решения {submissionId}, длина сниппетов: {tokensCount} токенов", submission.Id, configuration.SnippetTokensCount);
            var codeUnits = codeUnitsExtractor.Extract(submission.ProgramText);

            foreach (var codeUnit in codeUnits)
            {
                foreach (var tokenConverter in tokenConverters)
                {
                    var snippets = snippetsExtractor.GetSnippets(codeUnit.Tokens, configuration.SnippetTokensCount, tokenConverter);
                    foreach (var(index, snippet) in snippets.Enumerate())
                    {
                        await snippetsRepo.AddSnippetOccurenceAsync(submission, snippet, codeUnit.FirstTokenIndex + index);
                    }
                }
            }
        }