public async Task RecognizeHealthcareEntitiesBatchWithStatisticsTest() { TextAnalyticsClient client = GetClient(); AnalyzeHealthcareEntitiesOptions options = new AnalyzeHealthcareEntitiesOptions() { IncludeStatistics = true }; AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(s_batchDocuments, options); await operation.WaitForCompletionAsync(); ValidateOperationProperties(operation); //Take the first page AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value.ToEnumerableAsync().Result.FirstOrDefault(); var expectedOutput = new Dictionary <string, List <string> >() { { "1", s_document1ExpectedEntitiesOutput }, { "2", s_document2ExpectedEntitiesOutput }, }; ValidateBatchDocumentsResult(resultCollection, expectedOutput, true); }
public async Task HealthcareAsync_ManualPolling() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); #region Snippet:RecognizeHealthcareEntitiesAsyncManualPolling string document = @"RECORD #333582770390100 | MH | 85986313 | | 054351 | 2/14/2001 12:00:00 AM | CORONARY ARTERY DISEASE | Signed | DIS | \ Admission Date: 5/22/2001 Report Status: Signed Discharge Date: 4/24/2001 ADMISSION DIAGNOSIS: CORONARY ARTERY DISEASE. \ HISTORY OF PRESENT ILLNESS: The patient is a 54-year-old gentleman with a history of progressive angina over the past several months. \ The patient had a cardiac catheterization in July of this year revealing total occlusion of the RCA and 50% left main disease ,\ with a strong family history of coronary artery disease with a brother dying at the age of 52 from a myocardial infarction and \ another brother who is status post coronary artery bypass grafting. The patient had a stress echocardiogram done on July , 2001 , \ which showed no wall motion abnormalities , but this was a difficult study due to body habitus. The patient went for six minutes with \ minimal ST depressions in the anterior lateral leads , thought due to fatigue and wrist pain , his anginal equivalent. Due to the patient's \ increased symptoms and family history and history left main disease with total occasional of his RCA was referred for revascularization with open heart surgery."; AnalyzeHealthcareEntitiesOperation healthOperation = await client.StartAnalyzeHealthcareEntitiesAsync(new List <string>() { document }); TimeSpan pollingInterval = new TimeSpan(1000); while (true) { await healthOperation.UpdateStatusAsync(); if (healthOperation.HasCompleted) { break; } await Task.Delay(pollingInterval); } AnalyzeHealthcareEntitiesResultCollection results = healthOperation.Value; Console.WriteLine($"Results of Azure Text Analytics \"Healthcare Async\" Model, version: \"{results.ModelVersion}\""); Console.WriteLine(""); foreach (AnalyzeHealthcareEntitiesResult result in results) { Console.WriteLine($" Recognized the following {result.Entities.Count} healthcare entities:"); foreach (HealthcareEntity entity in result.Entities) { Console.WriteLine($" Entity: {entity.Text}"); Console.WriteLine($" Category: {entity.Category}"); Console.WriteLine($" Offset: {entity.Offset}"); Console.WriteLine($" Length: {entity.Length}"); Console.WriteLine($" Links:"); foreach (EntityDataSource entityDataSource in entity.DataSources) { Console.WriteLine($" Entity ID in Data Source: {entityDataSource.EntityId}"); Console.WriteLine($" DataSource: {entityDataSource.Name}"); } } Console.WriteLine(""); } }
public async Task RecognizeHealthcareEntitiesBatchWithErrorTest() { TextAnalyticsClient client = GetClient(); var documents = new List <string> { "Subject is taking 100mg of ibuprofen twice daily", "Can cause rapid or irregular heartbeat, delirium, panic, psychosis, and heart failure.", "", }; AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(documents); await operation.WaitForCompletionAsync(); ValidateOperationProperties(operation); //Take the first page AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value.ToEnumerableAsync().Result.FirstOrDefault(); Assert.IsNotNull(resultCollection[2].Id); Assert.IsTrue(!resultCollection[0].HasError); Assert.IsTrue(!resultCollection[1].HasError); Assert.IsTrue(resultCollection[2].HasError); InvalidOperationException ex = Assert.Throws <InvalidOperationException>(() => resultCollection[2].Entities.GetType()); Assert.AreEqual(TextAnalyticsErrorCode.InvalidDocument, resultCollection[2].Error.ErrorCode.ToString()); }
public async Task RecognizeHealthcareEntitiesBatchConvenienceWithStatisticsTest() { TextAnalyticsClient client = GetClient(); var documents = batchConvenienceDocuments; AnalyzeHealthcareEntitiesOptions options = new AnalyzeHealthcareEntitiesOptions() { IncludeStatistics = true }; AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(documents, "en", options); await operation.WaitForCompletionAsync(PollingInterval); AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value; Assert.AreEqual(documents.Count, resultCollection.Statistics.DocumentCount); Assert.AreEqual(48, resultCollection[0].Statistics.CharacterCount); Assert.AreEqual(1, resultCollection[0].Statistics.TransactionCount); Assert.Greater(resultCollection.Statistics.DocumentCount, 0); Assert.AreEqual(2, resultCollection.Statistics.DocumentCount); Assert.AreEqual(2, resultCollection.Statistics.TransactionCount); Assert.AreEqual(0, resultCollection.Statistics.InvalidDocumentCount); Assert.AreEqual(2, resultCollection.Statistics.ValidDocumentCount); }
public async Task RecognizeHealthcareEntitiesTest() { TextAnalyticsClient client = GetClient(); AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(batchDocuments); await operation.WaitForCompletionAsync(PollingInterval); AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value; Assert.AreEqual(2, resultCollection.Count); AnalyzeHealthcareEntitiesResult result = resultCollection[0]; var entitiesList = new List <string> { "100mg", "ibuprofen", "twice daily" }; Assert.AreEqual(3, result.Entities.Count); Assert.IsNotNull(result.Id); Assert.AreEqual("1", result.Id); foreach (HealthcareEntity entity in result.Entities) { Assert.IsTrue(entitiesList.Contains(entity.Text)); if (entity.Text == "ibuprofen") { var linksList = new List <string> { "UMLS", "AOD", "ATC", "CCPSS", "CHV", "CSP", "DRUGBANK", "GS", "LCH_NW", "LNC", "MEDCIN", "MMSL", "MSH", "MTHSPL", "NCI", "NCI_CTRP", "NCI_DCP", "NCI_DTP", "NCI_FDA", "NCI_NCI-GLOSS", "NDDF", "PDQ", "RCD", "RXNORM", "SNM", "SNMI", "SNOMEDCT_US", "USP", "USPMG", "VANDF" }; foreach (EntityDataSource entityDataSource in entity.DataSources) { Assert.IsTrue(linksList.Contains(entityDataSource.Name)); } } if (entity.Text == "100mg") { Assert.IsTrue(entity.RelatedEntities.Count == 1); var relatedEntity = entity.RelatedEntities.FirstOrDefault().Key; Assert.AreEqual("ibuprofen", relatedEntity.Text); Assert.AreEqual("MedicationName", relatedEntity.Category); Assert.AreEqual(0, relatedEntity.Length); Assert.AreEqual(27, relatedEntity.Offset); Assert.AreEqual(1.0, relatedEntity.ConfidenceScore); // TODO - DosageOfMedication is not in relation types and is returned from the service. Need to add to swagger. //Assert.AreEqual(HealthcareEntityRelationType.DosageOfMedication, entity.RelatedEntities.ElementAt(0).Value); } } }
public async Task RecognizeHealthcareEntitiesBatchTest() { TextAnalyticsClient client = GetClient(); List <TextDocumentInput> documents = batchDocuments; AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(documents); await operation.WaitForCompletionAsync(PollingInterval); AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value; Assert.AreEqual(2, resultCollection.Count); }
public async Task RecognizeHealthcareEntitiesWithLanguageTest() { TextAnalyticsClient client = GetClient(); string document = singleEnglish; AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(new List <string>() { document }, "en"); await operation.WaitForCompletionAsync(PollingInterval); AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value; foreach (AnalyzeHealthcareEntitiesResult result in resultCollection) { Assert.AreEqual(3, result.Entities.Count); Assert.IsNotNull(result.Id); } }
private void ValidateBatchDocumentsResult(AnalyzeHealthcareEntitiesResultCollection results, Dictionary <string, List <string> > minimumExpectedOutput, bool includeStatistics = default) { Assert.That(results.ModelVersion, Is.Not.Null.And.Not.Empty); if (includeStatistics) { Assert.IsNotNull(results.Statistics); Assert.Greater(results.Statistics.DocumentCount, 0); Assert.Greater(results.Statistics.TransactionCount, 0); Assert.GreaterOrEqual(results.Statistics.InvalidDocumentCount, 0); Assert.GreaterOrEqual(results.Statistics.ValidDocumentCount, 0); } else { Assert.IsNull(results.Statistics); } foreach (AnalyzeHealthcareEntitiesResult entitiesInDocument in results) { Assert.That(entitiesInDocument.Id, Is.Not.Null.And.Not.Empty); Assert.False(entitiesInDocument.HasError); //Even though statistics are not asked for, TA 5.0.0 shipped with Statistics default always present. Assert.IsNotNull(entitiesInDocument.Statistics); if (includeStatistics) { Assert.GreaterOrEqual(entitiesInDocument.Statistics.CharacterCount, 0); Assert.Greater(entitiesInDocument.Statistics.TransactionCount, 0); } else { Assert.AreEqual(0, entitiesInDocument.Statistics.CharacterCount); Assert.AreEqual(0, entitiesInDocument.Statistics.TransactionCount); } Assert.IsNotNull(entitiesInDocument.Warnings); Assert.IsNotNull(entitiesInDocument.EntityRelations); Assert.IsNotNull(entitiesInDocument.FhirBundle); ValidateInDocumenResult(entitiesInDocument.Entities, minimumExpectedOutput[entitiesInDocument.Id]); } }
public async Task RecognizeHealthcareEntitiesWithLanguageTest() { TextAnalyticsClient client = GetClient(); AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(s_batchConvenienceDocuments, "en"); await operation.WaitForCompletionAsync(); ValidateOperationProperties(operation); //Take the first page AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value.ToEnumerableAsync().Result.FirstOrDefault(); var expectedOutput = new Dictionary <string, List <string> >() { { "0", s_document1ExpectedEntitiesOutput }, { "1", s_document2ExpectedEntitiesOutput }, }; ValidateBatchDocumentsResult(resultCollection, expectedOutput); }
public async Task RecognizeHealthcareEntitiesBatchWithErrorTest() { TextAnalyticsClient client = GetClient(); var documents = new List <string> { "Subject is taking 100mg of ibuprofen twice daily", "Can cause rapid or irregular heartbeat, delirium, panic, psychosis, and heart failure.", "", }; AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(documents); await operation.WaitForCompletionAsync(PollingInterval); AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value; Assert.IsNotNull(resultCollection[2].Id); Assert.IsTrue(resultCollection[2].HasError); Assert.AreEqual(TextAnalyticsErrorCode.InvalidDocument, resultCollection[2].Error.ErrorCode.ToString()); }
public async Task RecognizeHealthcareEntitiesWithTopParameter() { TextAnalyticsClient client = GetClient(); AnalyzeHealthcareEntitiesOptions options = new AnalyzeHealthcareEntitiesOptions() { Top = 1 }; AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(batchDocuments, options); await operation.WaitForCompletionAsync(PollingInterval); AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value; Assert.AreEqual(1, resultCollection.Count); Assert.AreEqual(3, resultCollection[0].Entities.Count); Assert.IsNotNull(resultCollection[0].Id); Assert.AreEqual("1", resultCollection[0].Id); Assert.AreEqual("100mg", resultCollection[0].Entities.FirstOrDefault().Text); Assert.AreEqual("Dosage", resultCollection[0].Entities.FirstOrDefault().Category); }
public async Task RecognizeHealthcareEntitiesWithSkipParameter() { TextAnalyticsClient client = GetClient(); AnalyzeHealthcareEntitiesOptions options = new AnalyzeHealthcareEntitiesOptions() { Skip = 1 }; AnalyzeHealthcareEntitiesOperation operation = await client.StartAnalyzeHealthcareEntitiesAsync(batchDocuments, options); await operation.WaitForCompletionAsync(PollingInterval); AnalyzeHealthcareEntitiesResultCollection resultCollection = operation.Value; Assert.IsFalse(resultCollection[0].HasError); Assert.IsNotNull(resultCollection[0].Warnings); Assert.AreEqual(1, resultCollection.Count); Assert.AreEqual(6, resultCollection[0].Entities.Count); Assert.IsNotNull(resultCollection[0].Id); Assert.AreEqual("2", resultCollection[0].Id); Assert.AreEqual("rapid", resultCollection[0].Entities.FirstOrDefault().Text); Assert.AreEqual("SymptomOrSign", resultCollection[0].Entities.FirstOrDefault().Category); }