/// <summary> /// Extracts data from a transcription. /// </summary> /// <param name="transcript">The transcript to extract data from.</param> /// <param name="log">Trace logging instance.</param> /// <returns>A Task returning the data extracted from the transcription.</returns> public Task <TranscriptionData> ExtractAsync(string transcript, ILogger log) { return(Task.Run(() => { TranscriptionData data = new TranscriptionData(); data.Transcription = transcript; data.Dates = ExtractDateTimes(transcript, log); data.Location = ExtractLocation(transcript, log); data.Person = ExtractPerson(transcript, log); return data; })); }
/// <summary> /// Extracts data from a transcription. /// </summary> /// <param name="transcript">The transcript to extract data from.</param> /// <param name="log">Trace logging instance.</param> /// <returns>A Task returning the data extracted from the transcription.</returns> public async Task<TranscriptionData> ExtractAsync(string transcript, ILogger log) { try { Uri requestUri = new Uri($"{_config.NlpEndpoint}&subscription-key={_config.NlpSubscriptionKey.Value}"); byte[] buffer = Encoding.UTF8.GetBytes($"\"{transcript}\""); ByteArrayContent content = new ByteArrayContent(buffer); content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); HttpResponseMessage response = await _httpClient.PostAsync(requestUri.AbsoluteUri, content, log); if (response.StatusCode != HttpStatusCode.OK) { // TODO: Throw a better exception throw new Exception("Request failed!"); } string responseContent = await response.Content.ReadAsStringAsync(); LuisResponse luisResponse = JsonConvert.DeserializeObject<LuisResponse>(responseContent); TranscriptionData data = new TranscriptionData(); data.EvaluatedTranscription = transcript; if (luisResponse.TopScoringIntent != null) { data.Intent = luisResponse.TopScoringIntent.Intent; data.IntentConfidence = luisResponse.TopScoringIntent.Score; } data.Dates = ExtractDateTimes(luisResponse, log); data.Location = ExtractLocation(luisResponse, log); data.Person = ExtractPerson(luisResponse, log); data.AdditionalData = EnumerateAdditionalEntities(luisResponse, log); return data; } catch (HttpRequestException ex) { throw new DataExtractorException("Exception encountered extracting data! See inner exception for details.", ex); } }