Esempio n. 1
0
        public async Task <IActionResult> Analyse([Required] string text, bool checkDate = true, int infoLevel = 1)
        {
            try
            {
                if (string.IsNullOrEmpty(text) || infoLevel < 1 || infoLevel > 3)
                {
                    _logger.Warning("{@Text} or {@InfoLevel} constraints violated!", text, infoLevel);
                    return(BadRequest(new { message = "Check 'text' and 'infoLevel' restrictions" }));
                }

                var item = new ConfiguredAnalysisRequestItem
                {
                    Id            = Guid.NewGuid().ToString(),
                    Text          = text,
                    CheckDate     = checkDate,
                    Configuration = new SmallTalksPreProcessingConfiguration()
                    {
                        InformationLevel = (InformationLevel)infoLevel
                    }
                };

                using (var source = new CancellationTokenSource(TimeSpan.FromSeconds(1)))
                {
                    var response = await AnalyseAsync(item, source.Token, '1');

                    _logger.Information("[{@SmallTalksAnalysisResult}] {@Sentence} analysed with CheckDate={@CheckDate} and InfoLevel={@InfoLevel}. Response: {@AnalysisResponse}", "Success", text, checkDate, infoLevel, response);
                    return(Ok(response));
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "[{@SmallTalksAnalysisResult}] Unexpected fail when analysing sentence: {@Sentence}, {@CheckDate}, {@InfoLevel}", "Error", text, checkDate, infoLevel);
                return(StatusCode((int)HttpStatusCode.InternalServerError, ex));
            }
        }
Esempio n. 2
0
        private async Task <AnalysisResponseItem> UnsafeAnalyseAsyncv2(ConfiguredAnalysisRequestItem item)
        {
            var analysisResponse = new AnalysisResponseItem
            {
                Id = item.Id,
                SmallTalksAnalysis = await _smallTalksDetector.DetectAsyncv2(item.Text, item.Configuration),
                DateTimeDectecteds = await DetectDateAsync(item, CancellationToken.None),
            };

            return(analysisResponse);
        }
Esempio n. 3
0
        private async Task <AnalysisResponseItem> AnalyseAsync(ConfiguredAnalysisRequestItem item, CancellationToken cancellationToken, char apiVersion)
        {
            var analysisResponse = new AnalysisResponseItem
            {
                Id = item.Id,
                SmallTalksAnalysis = apiVersion == '1' ? await _smallTalksDetector.DetectAsync(item.Text, item.Configuration) :
                                     apiVersion == '2' ? await _smallTalksDetector.DetectAsyncv2(item.Text, item.Configuration) : await _smallTalksDetector.DetectAsync(item.Text, item.Configuration),
                DateTimeDectecteds = await DetectDateAsync(item, cancellationToken),
            };

            return(analysisResponse);
        }
Esempio n. 4
0
        private async Task <List <DateTimeDectected> > DetectDateAsync(ConfiguredAnalysisRequestItem requestItem, CancellationToken cancellationToken)
        {
            var sw = Stopwatch.StartNew();

            try
            {
                return(requestItem.CheckDate ? await _dateTimeDectector.DetectAsync(requestItem.Text, cancellationToken) : null);
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Couldn't check date for {@RequestItem}", requestItem);
                return(null);
            }
            finally
            {
                sw.Stop();
                _logger.Information("Finish date detect after {@ElapsedMillisecods} for {@RequestItem}", sw.ElapsedMilliseconds, requestItem);
            }
        }
Esempio n. 5
0
        public async Task <IActionResult> ConfiguredAnalysev2([FromBody] ConfiguredAnalysisRequestItem requestItem)
        {
            try
            {
                if (requestItem == null || string.IsNullOrEmpty(requestItem.Text))
                {
                    return(BadRequest());
                }

                using (var source = new CancellationTokenSource(TimeSpan.FromSeconds(1)))
                {
                    var response = await AnalyseAsync(requestItem, source.Token, '2');

                    _logger.Information(response.ToString());
                    return(Ok(response));
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Unexpected fail when analysing sentence: {requestItem}", requestItem);
                return(StatusCode((int)HttpStatusCode.InternalServerError, ex));
            }
        }