コード例 #1
0
        private async Task <ProcessingContext> ProcessSingleRequest(SingleWorkRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (request.Review.Id == null)
            {
                request.Review.Id = Guid.NewGuid().ToString();
            }

            if (!string.IsNullOrEmpty(request.Domain))
            {
                logger.LogInformation("Using Domain dictionary [{0}]", request.Domain);
                client.Lexicon = lexiconLoader.GetLexicon(request.Domain);
            }

            var id = GetId(request);

            var result = await cache
                         .GetOrCreateAsync(id,
                                           async entry =>
            {
                entry.SlidingExpiration = TimeSpan.FromMinutes(10);

                return(await client.Process(
                           documentConverter.Convert(request.Review, request.CleanText))
                       .ConfigureAwait(false));
            })
                         .ConfigureAwait(false);

            return(result);
        }
コード例 #2
0
        public async Task <RatingValue> Calculate(SingleWorkRequest request, CancellationToken token)
        {
            var result = await client.PostRequest <SingleWorkRequest, RawResponse <RatingValue> >("api/sentiment/calculate", request, token).ConfigureAwait(false);

            if (!result.IsSuccess)
            {
                throw new ApplicationException("Failed to retrieve:" + result.HttpResponseMessage);
            }

            return(result.Result.Value);
        }
コード例 #3
0
        public async Task <ActionResult <RatingValue> > Calculate([FromBody] SingleWorkRequest request)
        {
            var result = await ProcessSingleRequest(request).ConfigureAwait(false);

            var rating = result.Review.CalculateRawRating();
            var value  = new RatingValue();

            value.Stars    = rating.StarsRating;
            value.Negative = rating.Negative;
            value.Positive = rating.Positive;
            return(Ok(value));
        }
コード例 #4
0
        public async Task Calculate()
        {
            var request = new SingleWorkRequest
            {
                Domain = "market",
                Review = new SingleRequestData {
                    Text = "I like Text"
                }
            };

            var result = await basicSentiment.Calculate(request, CancellationToken.None);

            Assert.AreEqual(5, result.Stars);
            Assert.AreEqual(0.33, Math.Round(result.Positive, 2));
            Assert.AreEqual(0, result.Negative);
        }
コード例 #5
0
        public async Task BasicMeasure()
        {
            var request = new SingleWorkRequest
            {
                Domain = "market",
                Review = new SingleRequestData {
                    Text = "I like Text"
                }
            };

            var result = await basicSentiment.Measure(request, CancellationToken.None);

            Assert.AreEqual(5, result.Stars);

            result = await basicSentiment.Measure(request, CancellationToken.None);

            Assert.AreEqual(5, result.Stars);
        }
コード例 #6
0
        public async Task <ActionResult <Document> > Parse([FromBody] SingleWorkRequest request)
        {
            var result = await ProcessSingleRequest(request).ConfigureAwait(false);

            return(Ok(result.Processed));
        }
コード例 #7
0
        private string GetId(SingleWorkRequest request)
        {
            var textId = request.Review.Text.GenerateKey();

            return($"{request.Domain}:{request.CleanText}:{textId}");
        }