//Retriving the recognized text private async Task GetTextAsync(ComputerVisionClient computerVision, string operationLocation) { //Retrieve the URI where the recognized text will be stored from the Operation-Location header string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId); //Calling GetReadOperationResultAsync ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId); //Waiting for the operation to complete int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { await Task.Delay(1000); result = await computerVision.GetReadOperationResultAsync(operationId); } //Displaying the results var recResults = result.RecognitionResults; foreach (TextRecognitionResult recResult in recResults) { foreach (Line line in recResult.Lines) { OCRList.Add(line.Text); OcrResult += line.Text + " <br> "; } } }
private async Task <string> GetOcrResults(string operationLocation) { string operationId = operationLocation.Substring(operationLocation.LastIndexOf('/') + 1); ReadOperationResult result = await client.GetReadOperationResultAsync(operationId); // Wait for the operation to complete int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { await Task.Delay(1000); result = await client.GetReadOperationResultAsync(operationId); } var overallResults = string .Join( separator, result.RecognitionResults.Select( r => string.Join( separator, r.Lines.Select(l => l.Text).ToArray())) .ToArray()); return(CleanupText(overallResults)); }
public void BatchReadPdfFileInStreamTest() { using (MockContext context = MockContext.Start(this.GetType())) { HttpMockServer.Initialize(this.GetType(), "BatchReadPdfFileInStreamTest"); using (IComputerVisionClient client = GetComputerVisionClient(HttpMockServer.CreateInstance())) using (FileStream stream = new FileStream(GetTestImagePath("menu.pdf"), FileMode.Open)) { ReadInStreamHeaders headers = client.ReadInStreamWithHttpMessagesAsync(stream).Result.Headers; Assert.NotNull(headers.OperationLocation); ReadOperationResult readOperationResult = GetRecognitionResultWithPolling(client, headers.OperationLocation); Assert.NotNull(readOperationResult); Assert.Equal(OperationStatusCodes.Succeeded, readOperationResult.Status); Assert.NotNull(readOperationResult.AnalyzeResult); Assert.Equal(1, readOperationResult.AnalyzeResult.ReadResults.Count); var recognitionResult = readOperationResult.AnalyzeResult.ReadResults[0]; Assert.Equal(1, recognitionResult.Page); Assert.Equal(8.5, recognitionResult.Width); Assert.Equal(11, recognitionResult.Height); Assert.Equal(TextRecognitionResultDimensionUnit.Inch, recognitionResult.Unit); Assert.Equal(28, recognitionResult.Lines.Count); Assert.Equal("Microsoft", recognitionResult.Lines[0].Text); } } }
public static TextOperationResult ConvertToTextOperationResult(this ReadOperationResult entity) { return(new TextOperationResult() { Status = entity.Status, RecognitionResult = entity.RecognitionResults?.FirstOrDefault() }); }
static async Task GetTextFromImageAsync(ComputerVisionClient visionClient, string url) { BatchReadFileHeaders textHeaders = await visionClient.BatchReadFileAsync(url); string operationLocation = textHeaders.OperationLocation; int maxCharsInOperationId = 36; string operationId = operationLocation.Substring(operationLocation.Length - maxCharsInOperationId); int i = 0; int maxRetries = 10; ReadOperationResult results = null; do { results = await visionClient.GetReadOperationResultAsync(operationId); Console.WriteLine($"Статус сервера {results.Status}, выполняется {i} c"); await Task.Delay(1000); if (i == 9) { Console.WriteLine("Сервер вызвал таймаут"); } }while ((results.Status == TextOperationStatusCodes.Running || results.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries); Console.WriteLine(); var textRecognitionResults = results.RecognitionResults; foreach (TextRecognitionResult textRecognitionResult in results.RecognitionResults) { foreach (var line in textRecognitionResult.Lines) { Console.WriteLine(line.Text); } } }
// Retrieve the recognized text private static async Task GetTextAsync(ComputerVisionClient computerVision, string operationLocation, int numberOfCharsInOperationId) { // Retrieve the URI where the recognized text will be // stored from the Operation-Location header string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId); ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId); // Wait for the operation to complete int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { Console.WriteLine("Server status: {0}, waiting {1} seconds...", result.Status, i); await Task.Delay(1000); result = await computerVision.GetReadOperationResultAsync(operationId); } // Display the results Console.WriteLine(); var recResults = result.RecognitionResults; foreach (TextRecognitionResult recResult in recResults) { foreach (Line line in recResult.Lines) { Console.WriteLine(line.Text); } } Console.WriteLine(); }
public string ParseReadResult(ReadOperationResult result) { var detectedTexts = result.AnalyzeResult.ReadResults; string registrationNumber = string.Empty; foreach (var detectedText in detectedTexts) { foreach (var line in detectedText.Lines) { //Sanitize text var text = SanitizeExtractedText(line.Text); //Check if the text is alphanumeric if (IsExtractedTextAlphaNumeric(text)) { registrationNumber = text; break; } } if (!string.IsNullOrWhiteSpace(registrationNumber)) { break; } } return(registrationNumber); }
private double CalculateIndentLength(ReadOperationResult parsingResult) { // sort lines by width var linesArray = parsingResult.AnalyzeResult.ReadResults.SelectMany(p => p.Lines).Select(l => GetBoundingBoxTopRightX(l) - GetBoundingBoxTopLeftX(l)).OrderBy(l => l).ToArray(); return(linesArray[(int)(linesArray.Length * Constants.MaxLineLengthPrecentile)] * Constants.IndentPercentageOfLine); }
// Receives the image path and returns the businesscard public override async Task <Businesscard> getCard(string imagePath) { try { using (var image = File.OpenRead(imagePath)) { Businesscard card = MakeEmptyCard(); Debug.WriteLine("AZUREVISION - Received image"); var textHeaders = await cv.ReadInStreamAsync(image); string operationLocation = textHeaders.OperationLocation; string operationId = operationLocation.Substring(operationLocation.Length - 36); // Extract the text ReadOperationResult results = null; Debug.WriteLine("AZUREVISION - sending image to Azure Service"); do { results = await cv.GetReadResultAsync(Guid.Parse(operationId)); }while ((results.Status == OperationStatusCodes.Running || results.Status == OperationStatusCodes.NotStarted)); Debug.WriteLine("AZUREVISION - received information from Azure Service"); card = await analyzeText(formatResults(results)); PrintCard(card); return(card); } } catch (Exception ex) { throw new BadRequestException(ex.ToString()); } }
public static IEnumerable <string> GetReadResultLines(ReadOperationResult results) { var readResults = results.AnalyzeResult.ReadResults; var lineTexts = readResults.SelectMany(result => result.Lines) .Select(line => new string(line.Text)); return(lineTexts); }
private double CalculateMedianLineEnd(ReadOperationResult parsingResult) { // get the top-right x co-ordinate of each line's bounding box -> ascendingly var linesArraySortedByEnd = parsingResult.AnalyzeResult.ReadResults.SelectMany(p => p.Lines.Select(l => GetBoundingBoxTopRightX(l))).OrderBy(x => x).ToArray(); // return the median element return(linesArraySortedByEnd[linesArraySortedByEnd.Length / 2]); }
internal Content(ReadOperationResult results) { Pages = new List <IPage>(); foreach (var result in results.RecognitionResults) { Pages.Add(new Page(result)); } ; CurrentContent.Value = this; }
// Retrieve the recognized text private async Task GetTextAsync( ComputerVisionClient computerVision, string operationLocation) { try { // Retrieve the URI where the recognized text will be // stored from the Operation-Location header string operationId = operationLocation.Substring( operationLocation.Length - numberOfCharsInOperationId); Console.WriteLine("\nCalling GetReadOperationResultAsync()"); ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId); // Wait for the operation to complete int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { Console.WriteLine( "Server status: {0}, waiting {1} seconds...", result.Status, i); await Task.Delay(1000); result = await computerVision.GetReadOperationResultAsync(operationId); } // Display the results Console.WriteLine(); var recResults = result.RecognitionResults; int lineNo = 0; foreach (TextRecognitionResult recResult in recResults) { foreach (Line line in recResult.Lines) { lineNo += 1; Console.WriteLine(line.Text); BaiOcrLine ocr = new BaiOcrLine { LineNo = lineNo, Content = line.Text }; RawList.Add(ocr); } } Console.WriteLine(); Global.ProcessStatus = ProcessStatus.Ready.ToString(); OnReadDone?.Invoke(this, EventArgs.Empty); } catch (Exception err) { throw err; } }
/// <summary> /// Extract paragraphs from MsRead parse result using bounding box information. /// Paragraphs that span two pages are moved to the second page /// </summary> public DocumentTree MapMsReadResult(ReadOperationResult parsingResult) { var elements = new List <DocumentElement>(); var medianLineStart = CalculateMedianLineStart(parsingResult); var medianLineEnd = CalculateMedianLineEnd(parsingResult); var indentLength = CalculateIndentLength(parsingResult); var currentParagraph = new StringBuilder(); var currentPage = 0; int currentParagraphPageStart = 1; var totalPageCount = parsingResult.AnalyzeResult.ReadResults.Count; // loop over each page to create list of pages foreach (var rr in parsingResult.AnalyzeResult.ReadResults) { // update paragraphPageStart if no overflowing paragraph in new page currentParagraphPageStart = currentParagraph.Length > 0 ? currentParagraphPageStart : (int)rr.Page; // normal flow: loop over lines for (int i = 0; i < rr.Lines.Count; i++) { Line l = rr.Lines[i]; Line nextLine = i < rr.Lines.Count - 1 ? rr.Lines[i + 1] : null; Line previousLine = i > 0 ? rr.Lines[i - 1] : null; HandleNewLine(currentParagraph, elements, (int)rr.Page, ref currentParagraphPageStart, l, previousLine, nextLine, indentLength, medianLineStart, medianLineEnd); } // special case: if last page add text in the current paragraph to the elements if (++currentPage == totalPageCount && currentParagraph.Length > 0) { HandleEndOfParagraph(currentParagraph, elements, parsingResult.AnalyzeResult.ReadResults.Count, ref currentParagraphPageStart); } } // construct document tree return(new DocumentTree { RootSegment = new DocumentSegment { RootElement = new DocumentElement { Text = string.Empty, Type = ElementType.Root }, Children = elements.Select(docElement => { return new DocumentSegment { RootElement = docElement, Children = null }; }).ToList() } }); }
//format the results in lines so that AOcrService can analyse them private string[] formatResults(ReadOperationResult results) { List <string> lines = new List <string>(); foreach (ReadResult page in results.AnalyzeResult.ReadResults) { foreach (Line line in page.Lines) { lines.Add(line.Text); } } return(lines.ToArray()); }
/// <summary> /// Get the Text from the Result. /// </summary> /// <param name="readOperationResult">Read Operation Result.</param> /// <returns>Text String.</returns> private string GetTextFromResult(ReadOperationResult readOperationResult) { // Display the found text. var imageContent = string.Empty; var textRecognitionLocalFileResults = readOperationResult.RecognitionResults; foreach (TextRecognitionResult recResult in textRecognitionLocalFileResults) { foreach (Line line in recResult.Lines) { imageContent += line.Text + " "; } } return(imageContent); }
static private ReadOperationResult GetRecognitionResultWithPolling(IComputerVisionClient client, string operationLocation) { string operationId = operationLocation.Substring(operationLocation.LastIndexOf('/') + 1); for (int remainingTries = 10; remainingTries > 0; remainingTries--) { ReadOperationResult result = client.GetReadResultAsync(new Guid(operationId)).Result; Assert.True(result.Status != OperationStatusCodes.Failed); if (result.Status == OperationStatusCodes.Succeeded) { return(result); } Thread.Sleep(TimeSpan.FromSeconds(1)); } return(null); }
private static async Task <string> GetTextAsync(ComputerVisionClient computerVision, string operationLocation) { const int numberOfCharsInOperationId = 36; string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId); ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId); int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { await Task.Delay(1000); result = await computerVision.GetReadOperationResultAsync(operationId); } var lines = result.RecognitionResults; var outputtext = new System.Text.StringBuilder(); foreach (TextRecognitionResult recResult in lines) { foreach (Line line in recResult.Lines) { outputtext.AppendLine(line.Text); } } if (!string.IsNullOrEmpty(outputtext.ToString())) { return(await Task.FromResult(outputtext.ToString())); // await TextToSepach(outputtext.ToString()); } else { return(string.Empty); } }
private static async Task <string> GetTextAsync(ComputerVisionClient computerVision, string operationLocation) { int numberOfCharsInOperationId = 36; // Retrieve the URI where the recognized text will be // stored from the Operation-Location header string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId); ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId); // Wait for the operation to complete int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { //Console.WriteLine("Server status: {0}, waiting {1} seconds...", result.Status, i); await Task.Delay(1000); result = await computerVision.GetReadOperationResultAsync(operationId); } //TODO: Improve Error Handling - Case where Max Tries exceed for Result.STatus is failure // Display the results var recResults = result.RecognitionResults; StringBuilder imageText = new StringBuilder(); foreach (TextRecognitionResult recResult in recResults) { foreach (Line line in recResult.Lines) { imageText.Append(line.Text); imageText.Append(" "); } } return(imageText.ToString()); }
public void ReadTest() { using (MockContext context = MockContext.Start(this.GetType())) { HttpMockServer.Initialize(this.GetType(), "BatchReadFileTest"); string imageUrl = GetTestImageUrl("signage.jpg"); using (IComputerVisionClient client = GetComputerVisionClient(HttpMockServer.CreateInstance())) { ReadHeaders headers = client.ReadAsync(imageUrl).Result; Assert.NotNull(headers.OperationLocation); ReadOperationResult readOperationResult = GetRecognitionResultWithPolling(client, headers.OperationLocation); Assert.NotNull(readOperationResult); Assert.Equal(OperationStatusCodes.Succeeded, readOperationResult.Status); Assert.NotNull(readOperationResult.AnalyzeResult); Assert.Equal(1, readOperationResult.AnalyzeResult.ReadResults.Count); var recognitionResult = readOperationResult.AnalyzeResult.ReadResults[0]; Assert.Equal(1, recognitionResult.Page); Assert.Equal(250, recognitionResult.Width); Assert.Equal(258, recognitionResult.Height); Assert.Equal(TextRecognitionResultDimensionUnit.Pixel, recognitionResult.Unit); Assert.Equal( new string[] { "520", "WEST", "Seattle" }.OrderBy(t => t), recognitionResult.Lines.Select(line => line.Text).OrderBy(t => t)); Assert.Equal( new string[] { "520", "WEST", "Seattle" }.OrderBy(t => t), recognitionResult.Lines.SelectMany(line => line.Words).Select(word => word.Text).OrderBy(t => t)); Assert.Equal(3, recognitionResult.Lines.Count); } } }
public static async Task <IList <TextRecognitionResult> > GetTextAsync(Stream imageToAnalyze) { BatchReadFileInStreamHeaders textHeaders = await _computerVisionClient.BatchReadFileInStreamAsync(imageToAnalyze); string operationLocation = textHeaders.OperationLocation; string operationId = operationLocation.Substring(operationLocation.Length - NumberOfCharsInOperationId); ReadOperationResult result = await _computerVisionClient.GetReadOperationResultAsync(operationId); int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { await Task.Delay(1000); result = await _computerVisionClient.GetReadOperationResultAsync(operationId); } IList <TextRecognitionResult> recResults = result.RecognitionResults; return(recResults); }
private async Task GetTextAsync(ComputerVisionClient computerVision, string operationLocation, int numberOfCharsInOperationId) { string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId); ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId); // Wait for the operation to complete int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { Console.WriteLine("Server status: {0}, waiting {1} seconds...", result.Status, i); await Task.Delay(1000); result = await computerVision.GetReadOperationResultAsync(operationId); } // Display the results var recResults = result.RecognitionResults; foreach (TextRecognitionResult recResult in recResults) { foreach (Line line in recResult.Lines) { ProcessValue(line.Text); } } Console.WriteLine($"NIT:{NITValue}"); Console.WriteLine($"NIT:{IVAValue}"); Console.WriteLine($"NIT:{InvoiceNumber}"); Console.WriteLine($"NIT:{Subtotal}"); Console.WriteLine($"NIT:{InvoiceDate}"); Console.ReadLine(); }
public void ReadFileInStreamTest() { using (MockContext context = MockContext.Start(this.GetType())) { HttpMockServer.Initialize(this.GetType(), "BatchReadFileInStreamTest"); using (IComputerVisionClient client = GetComputerVisionClient(HttpMockServer.CreateInstance())) using (FileStream stream = new FileStream(GetTestImagePath("whiteboard.jpg"), FileMode.Open)) { ReadInStreamHeaders headers = client.ReadInStreamWithHttpMessagesAsync(stream).Result.Headers; Assert.NotNull(headers.OperationLocation); ReadOperationResult readOperationResult = GetRecognitionResultWithPolling(client, headers.OperationLocation); Assert.NotNull(readOperationResult); Assert.Equal(OperationStatusCodes.Succeeded, readOperationResult.Status); Assert.NotNull(readOperationResult.AnalyzeResult); Assert.Equal(1, readOperationResult.AnalyzeResult.ReadResults.Count); var recognitionResult = readOperationResult.AnalyzeResult.ReadResults[0]; Assert.Equal(1, recognitionResult.Page); Assert.Equal(1000, recognitionResult.Width); Assert.Equal(664, recognitionResult.Height); Assert.Equal(TextRecognitionResultDimensionUnit.Pixel, recognitionResult.Unit); Assert.Equal( new string[] { "you must be the change", "you want to see in the world!" }.OrderBy(t => t), recognitionResult.Lines.Select(line => line.Text).OrderBy(t => t)); Assert.Equal(2, recognitionResult.Lines.Count); Assert.Equal(5, recognitionResult.Lines[0].Words.Count); Assert.Equal(7, recognitionResult.Lines[1].Words.Count); } } }
private static async Task <AnalyzeResults> GetReadFileResultFromOperationAsync(string operation) { bool isValidGuid = Guid.TryParse(operation, out Guid operationId); if (!isValidGuid) { throw new ArgumentException("Operation Id is invalid."); } var opResult = new ReadOperationResult(); int i = 0; while (i++ < MaxRetriesOnTextRecognition) { // Get the operation result opResult = await client.GetReadResultAsync(operationId); // Wait if operation is running or has not started if (opResult.Status == OperationStatusCodes.NotStarted || opResult.Status == OperationStatusCodes.Running) { await Task.Delay(DelayOnTextRecognition); } else { break; } } if (opResult.Status != OperationStatusCodes.Succeeded) { throw new Exception($"Computer Vision operation was not successful with status: {opResult.Status}"); } return(opResult.AnalyzeResult); }
public async Task <ConvertResponse> ExtractTextBatchRead(ConvertResponse response) { try { var key = _config["computerVision:key"]; var endpoint = _config["computerVision:endpoint"]; ComputerVisionClient computerVision = new ComputerVisionClient(new ApiKeyServiceClientCredentials(key)) { Endpoint = endpoint }; var operationInfo = await computerVision.BatchReadFileAsync(response.Request.UploadBlobUrl + _config["storage:sas"]); var result = new ReadOperationResult(); var operationId = operationInfo.OperationLocation.Split('/').Last(); while (result.Status != TextOperationStatusCodes.Failed && result.Status != TextOperationStatusCodes.Succeeded) { await Task.Delay(500); result = await computerVision.GetReadOperationResultAsync(operationId); } if (result.Status == TextOperationStatusCodes.Failed) { response.ErrorMessage = $"Text translation failed."; return(response); } var text = new StringBuilder(); foreach (var page in result.RecognitionResults) { Line lastLine = null; foreach (var line in page.Lines) { // if (lastLine?.Words.Count >= 4) // { // text.Append($" {line.Text}"); // } // else // { text.Append(Environment.NewLine + line.Text); // } lastLine = line; } } Console.WriteLine(); Console.WriteLine(text.ToString()); var transcriptBlobName = Path.GetFileNameWithoutExtension(response.Request.BlobName) + ".txt"; var blobClient = new BlobStorageClient(_config); var textBlob = blobClient.GetBlobBlock("transcripts", transcriptBlobName); response.TranscriptBlobUrl = textBlob.Uri.AbsoluteUri; response.Transcript = text.ToString().Trim(); await textBlob.UploadTextAsync(response.Transcript); } catch (Exception ex) { Console.WriteLine(ex.ToString()); Console.WriteLine(ex.Message); response.ErrorMessage = ex.ToString(); } return(response); }
public void MapMsReadParserServiceTest(ReadOperationResult parsingResult, DocumentTree expected) { var actual = _parser.MapMsReadResult(parsingResult); Assert.Equal(expected, actual, new DocumentTreeComparer()); }
private double CalculateMedianLineStart(ReadOperationResult parsingResult) { var linesArraySortedByStart = parsingResult.AnalyzeResult.ReadResults.SelectMany(p => p.Lines).OrderBy(l => GetBoundingBoxTopLeftX(l)).ToArray(); return(GetBoundingBoxTopLeftX(linesArraySortedByStart[linesArraySortedByStart.Length / 2])); }
//Retriving the recognized text public async Task GetTextAsync(ComputerVisionClient computerVision, string operationLocation) { //Retrieve the URI where the recognized text will be stored from the Operation-Location header string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId); //Calling GetReadOperationResultAsync ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId); //Waiting for the operation to complete int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { await Task.Delay(1000); result = await computerVision.GetReadOperationResultAsync(operationId); } //Displaying the results var recResults = result.RecognitionResults; foreach (TextRecognitionResult recResult in recResults) { foreach (Line line in recResult.Lines) { OCRList.Add(line.Text); OcrResult += line.Text + " <br> "; } } //Loop for (int j = 0; j < OCRList.Count; j++) { //Calling LUIS var client = new RestClient(ConfigurationManager.AppSettings["LUIS_EndPoint"] + ConfigurationManager.AppSettings["LUIS_AppID"] + "?verbose=true&timezoneOffset=-360&subscription-key=" + ConfigurationManager.AppSettings["LUIS_Key"] + "&q=" + OCRList[j]); var request = new RestRequest(Method.GET); IRestResponse response = client.Execute(request); dynamic jObject = JObject.Parse(response.Content); JArray luislenobj = JArray.Parse(jObject.entities.ToString()); if (luislenobj.Count > 0) { for (int k = 0; k < luislenobj.Count; k++) { if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract Details" && jObject["entities"][k]["type"].ToString() == "Contract Date") { ContractDate = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract Details" && jObject["entities"][k]["type"].ToString() == "Client Name") { ClientName = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract Details" && jObject["entities"][k]["type"].ToString() == "Vendor Name") { VendorName += jObject["entities"][k]["entity"].ToString(); } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Services" && jObject["entities"][k]["type"].ToString() == "Services") { Services += " " + jObject["entities"][k]["entity"].ToString(); } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract Value" && jObject["entities"][k]["type"].ToString() == "Contract Value") { ContractValue = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract End Date" && jObject["entities"][k]["type"].ToString() == "End Date") { EndDate = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Penalty" && jObject["entities"][k]["type"].ToString() == "builtin.percentage") { PenaltyValue = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Jurisdiction" && jObject["entities"][k]["type"].ToString() == "Jurisdiction Place") { JurisdictionPlace = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Vendor Details" && jObject["entities"][k]["type"].ToString() == "builtin.email") { VendorEmail = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Vendor Details" && jObject["entities"][k]["type"].ToString() == "builtin.phonenumber") { VendorPhone = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Client Details" && jObject["entities"][k]["type"].ToString() == "builtin.email") { ClientEmail = jObject["entities"][k]["entity"].ToString(); break; } if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Client Details" && jObject["entities"][k]["type"].ToString() == "builtin.phonenumber") { ClientPhone = jObject["entities"][k]["entity"].ToString(); break; } } } } FinalResult = "<br>" + "Contract Date : " + ContractDate + "<br>" + "Vendor Name : " + VendorName + "<br>" + "Client Name : " + ClientName + "<br>" + "Service Description : " + Services + "<br>" + "Contract Value : " + ContractValue + "<br>" + "End Date : " + EndDate + "<br>" + "Penalty Value : " + PenaltyValue + "<br>" + "Jurisdiction Place : " + JurisdictionPlace + "<br>" + "Vendor Email : " + VendorEmail + "<br>" + "Vendor Phone : " + VendorPhone + "<br>" + "Client Email : " + ClientEmail + "<br>" + "Client Phone : " + ClientPhone + "<br>"; }