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); }
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); }
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)); }
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); }
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); }
public async Task <ActionResult <Document> > Parse([FromBody] SingleWorkRequest request) { var result = await ProcessSingleRequest(request).ConfigureAwait(false); return(Ok(result.Processed)); }
private string GetId(SingleWorkRequest request) { var textId = request.Review.Text.GenerateKey(); return($"{request.Domain}:{request.CleanText}:{textId}"); }