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); } }
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}"); } } } }
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); } } } }