예제 #1
0
        public async Task RecognizePiiEntitiesWithLanguageTest()
        {
            TextAnalyticsClient client   = GetClient();
            PiiEntityCollection entities = await client.RecognizePiiEntitiesAsync(EnglishDocument1, "en");

            ValidateInDocumenResult(entities, s_document1ExpectedOutput);
        }
예제 #2
0
        private static async Task RecognizePIIExampleAsync(TextAnalyticsClient client)
        {
            WriteLine("****** Personally Identifiable Information recognition ******");
            WriteLine();

            var document = "A developer with SSN 859-98-0987 whose phone number is 800-102-1100 is building tools with our APIs.";

            WriteLine($"Document: {document}");
            WriteLine();

            PiiEntityCollection entities = await client.RecognizePiiEntitiesAsync(document);

            Console.WriteLine($"Redacted Text: {entities.RedactedText}");
            if (entities.Count > 0)
            {
                Console.WriteLine($"Recognized {entities.Count} PII entit{(entities.Count > 1 ? "ies" : "y")}:");
                foreach (PiiEntity entity in entities)
                {
                    Console.WriteLine($"Text: {entity.Text}, Category: {entity.Category}, SubCategory: {entity.SubCategory}, Confidence score: {entity.ConfidenceScore}");
                }
            }
            else
            {
                Console.WriteLine("No entities were found.");
            }

            WriteLine();
        }
예제 #3
0
        public async Task RecognizePiiEntitiesWithAADTest()
        {
            TextAnalyticsClient client   = GetClient(useTokenCredential: true);
            PiiEntityCollection entities = await client.RecognizePiiEntitiesAsync(EnglishDocument1);

            ValidateInDocumenResult(entities, s_document1ExpectedOutput);
        }
예제 #4
0
        public void RecognizePiiEntities()
        {
            string endpoint = TestEnvironment.Endpoint;
            string apiKey   = TestEnvironment.ApiKey;

            #region Snippet:TextAnalyticsSample5CreateClient
            var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey));
            #endregion

            #region Snippet:RecognizePiiEntities
            string document = "A developer with SSN 859-98-0987 whose phone number is 800-102-1100 is building tools with our APIs.";

            PiiEntityCollection entities = client.RecognizePiiEntities(document).Value;

            Console.WriteLine($"Redacted Text: {entities.RedactedText}");
            if (entities.Count > 0)
            {
                Console.WriteLine($"Recognized {entities.Count} PII entit{(entities.Count > 1 ? "ies" : "y")}:");
                foreach (PiiEntity entity in entities)
                {
                    Console.WriteLine($"Text: {entity.Text}, Category: {entity.Category}, SubCategory: {entity.SubCategory}, Confidence score: {entity.ConfidenceScore}");
                }
            }
            else
            {
                Console.WriteLine("No entities were found.");
            }
            #endregion
        }
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log)
        {
            try
            {
                if (!RIPAAuthorization.ValidateUserOrAdministratorRole(req, log).ConfigureAwait(false).GetAwaiter().GetResult())
                {
                    return(new UnauthorizedResult());
                }
            }
            catch (Exception ex)
            {
                log.LogError(ex.Message);
                return(new UnauthorizedResult());
            }

            string  requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data        = JsonConvert.DeserializeObject(requestBody);
            string  document    = data?.Document;

            if (string.IsNullOrEmpty(document))
            {
                document = data?.document;
            }

            if (string.IsNullOrEmpty(document))
            {
                return(new BadRequestObjectResult("Must Provide Document"));
            }

            try
            {
                PiiEntityCollection piiEntities = await _piiTextAnalyticsService.GetPiiEntities(document);

                PiiResponse piiResponse = new PiiResponse()
                {
                    RedactedText           = piiEntities.RedactedText,
                    PiiEntities            = new List <PiiEntity>(),
                    MinimumConfidenceScore = _minimumConfidenceScore,
                    AllowedCategories      = _allowedCategories
                };

                foreach (var entity in piiEntities.Where(x => (x.ConfidenceScore > _minimumConfidenceScore) && _allowedCategories.Any(x.Category.ToString().Equals)))
                {
                    piiResponse.PiiEntities.Add(new PiiEntity
                    {
                        EntityText      = entity.Text,
                        ConfidenceScore = $"{entity.ConfidenceScore:F2}",
                        Category        = entity.Category.ToString()
                    });
                }
                return(new OkObjectResult(piiResponse));
            }
            catch (Exception ex)
            {
                log.LogError("There was an error checking for PII: ", ex.Message, ex.InnerException);
                return(new BadRequestObjectResult(ex.Message));
            }
        }
예제 #6
0
        public async Task RecognizePiiEntitiesWithLanguageTest()
        {
            TextAnalyticsClient client = GetClient();
            string document            = singleEnglish;

            PiiEntityCollection entities = await client.RecognizePiiEntitiesAsync(document, "en");

            Assert.AreEqual(2, entities.Count);
            Assert.IsNotNull(entities.RedactedText);
        }
예제 #7
0
        public async Task RecognizePiiEntitiesWithAADTest()
        {
            TextAnalyticsClient client = GetClient(useTokenCredential: true);
            string document            = singleEnglish;

            PiiEntityCollection entities = await client.RecognizePiiEntitiesAsync(document);

            Assert.AreEqual(2, entities.Count);
            Assert.IsNotNull(entities.RedactedText);
        }
예제 #8
0
        public async Task RecognizePiiEntitiesWithDomainTest()
        {
            TextAnalyticsClient client = GetClient();
            string document            = "I work at Microsoft and my email is [email protected]";

            PiiEntityCollection entities = await client.RecognizePiiEntitiesAsync(document, "en", new RecognizePiiEntitiesOptions()
            {
                DomainFilter = PiiEntityDomainType.ProtectedHealthInformation
            });

            ValidateInDocumenResult(entities, new List <string>()
            {
                "*****@*****.**", "Microsoft"
            });
        }
예제 #9
0
        public async Task RecognizePiiEntitiesWithDomainTest()
        {
            TextAnalyticsClient client = GetClient();
            string document            = "I work at Microsoft and my email is [email protected]";

            PiiEntityCollection entities = await client.RecognizePiiEntitiesAsync(document, "en", new RecognizePiiEntitiesOptions()
            {
                DomainFilter = PiiEntityDomainType.ProtectedHealthInformation
            });

            Assert.AreEqual(1, entities.Count);
            Assert.AreEqual("*****@*****.**", entities.FirstOrDefault().Text);
            Assert.AreEqual(EntityCategory.Email, entities.FirstOrDefault().Category);
            Assert.IsNotNull(entities.RedactedText);
        }
예제 #10
0
        public async Task RecognizePiiEntitiesTest()
        {
            TextAnalyticsClient client = GetClient();
            string document            = singleEnglish;

            PiiEntityCollection entities = await client.RecognizePiiEntitiesAsync(document);

            Assert.AreEqual(2, entities.Count);
            Assert.IsNotNull(entities.RedactedText);

            var entitiesList = new List <string> {
                "859-98-0987", "800-102-1100"
            };

            foreach (PiiEntity entity in entities)
            {
                Assert.IsTrue(entitiesList.Contains(entity.Text));
            }
        }
        private void ValidateInDocumenResult(PiiEntityCollection entities, List <string> minimumExpectedOutput)
        {
            Assert.IsNotNull(entities.Warnings);
            Assert.That(entities.RedactedText, Is.Not.Null.And.Not.Empty);
            Assert.GreaterOrEqual(entities.Count, minimumExpectedOutput.Count);
            foreach (PiiEntity entity in entities)
            {
                Assert.That(entity.Text, Is.Not.Null.And.Not.Empty);
                Assert.IsTrue(minimumExpectedOutput.Contains(entity.Text, StringComparer.OrdinalIgnoreCase));
                Assert.IsNotNull(entity.Category);
                Assert.GreaterOrEqual(entity.ConfidenceScore, 0.0);
                Assert.GreaterOrEqual(entity.Offset, 0);

                if (entity.SubCategory != null)
                {
                    Assert.IsNotEmpty(entity.SubCategory);
                }
            }
        }
예제 #12
0
        public async Task RecognizePiiEntitiesWithResultCategoriesTest()
        {
            TextAnalyticsClient client = GetClient();

            PiiEntityCollection originalEntities = await client.RecognizePiiEntitiesAsync(EnglishDocument1);

            List <PiiEntityCategory> piiCategories = new();

            foreach (var entity in originalEntities)
            {
                piiCategories.Add(entity.Category);
            }

            PiiEntityCollection newEntities = await client.RecognizePiiEntitiesAsync(EnglishDocument1, "en", new RecognizePiiEntitiesOptions()
            {
                CategoriesFilter = piiCategories
            });

            ValidateInDocumenResult(newEntities, s_document1ExpectedOutput);
        }
예제 #13
0
        static void RecognizePIIExample(TextAnalyticsClient client)
        {
            string document = "A developer with SSN 859-98-0987 whose phone number is 800-102-1100 is building tools with our APIs.";

            PiiEntityCollection entities = client.RecognizePiiEntities(document).Value;

            Console.WriteLine($"Redacted Text: {entities.RedactedText}");
            if (entities.Count > 0)
            {
                Console.WriteLine($"Recognized {entities.Count} PII entit{(entities.Count > 1 ? "ies" : "y")}:");
                foreach (PiiEntity entity in entities)
                {
                    Console.WriteLine($"Text: {entity.Text}, Category: {entity.Category}, SubCategory: {entity.SubCategory}, Confidence score: {entity.ConfidenceScore}");
                }
            }
            else
            {
                Console.WriteLine("No entities were found.");
            }
        }
        public void RecognizePiiEntitiesWithCategories()
        {
            string endpoint = TestEnvironment.Endpoint;
            string apiKey   = TestEnvironment.ApiKey;

            var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey));

            string document = @"Parker Doe has repaid all of their loans as of 2020-04-25.
                                Their SSN is 859-98-0987. To contact them, use their phone number 800-102-1100.
                                They are originally from Brazil and have document ID number 998.214.865-68";

            try
            {
                // For sample purposes we want the service to only return SSN.
                RecognizePiiEntitiesOptions    options  = new() { CategoriesFilter = { PiiEntityCategory.USSocialSecurityNumber } };
                Response <PiiEntityCollection> response = client.RecognizePiiEntities(document, options: options);
                PiiEntityCollection            entities = response.Value;

                Console.WriteLine($"Redacted Text: {entities.RedactedText}");
                Console.WriteLine("");
                Console.WriteLine($"Recognized {entities.Count} PII entities:");
                foreach (PiiEntity entity in entities)
                {
                    Console.WriteLine($"  Text: {entity.Text}");
                    Console.WriteLine($"  Category: {entity.Category}");
                    if (!string.IsNullOrEmpty(entity.SubCategory))
                    {
                        Console.WriteLine($"  SubCategory: {entity.SubCategory}");
                    }
                    Console.WriteLine($"  Confidence score: {entity.ConfidenceScore}");
                    Console.WriteLine("");
                }
            }
            catch (RequestFailedException exception)
            {
                Console.WriteLine($"Error Code: {exception.ErrorCode}");
                Console.WriteLine($"Message: {exception.Message}");
            }
        }
예제 #15
0
        public async Task RecognizePiiEntitiesAsync()
        {
            string endpoint = TestEnvironment.Endpoint;
            string apiKey   = TestEnvironment.ApiKey;

            var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey), CreateSampleOptions());

            string document = @"Parker Doe has repaid all of their loans as of 2020-04-25.
                                Their SSN is 859-98-0987. To contact them, use their phone number 800-102-1100.
                                They are originally from Brazil and have document ID number 998.214.865-68";

            try
            {
                Response <PiiEntityCollection> response = await client.RecognizePiiEntitiesAsync(document);

                PiiEntityCollection entities = response.Value;

                Console.WriteLine($"Redacted Text: {entities.RedactedText}");
                Console.WriteLine("");
                Console.WriteLine($"Recognized {entities.Count} PII entities:");
                foreach (PiiEntity entity in entities)
                {
                    Console.WriteLine($"  Text: {entity.Text}");
                    Console.WriteLine($"  Category: {entity.Category}");
                    if (!string.IsNullOrEmpty(entity.SubCategory))
                    {
                        Console.WriteLine($"  SubCategory: {entity.SubCategory}");
                    }
                    Console.WriteLine($"  Confidence score: {entity.ConfidenceScore}");
                    Console.WriteLine("");
                }
            }
            catch (RequestFailedException exception)
            {
                Console.WriteLine($"Error Code: {exception.ErrorCode}");
                Console.WriteLine($"Message: {exception.Message}");
            }
        }
예제 #16
0
        private void ValidateInDocumenResult(PiiEntityCollection entities, List <string> minimumExpectedOutput)
        {
            Assert.IsNotNull(entities.Warnings);
            Assert.That(entities.RedactedText, Is.Not.Null.And.Not.Empty);
            Assert.GreaterOrEqual(entities.Count, minimumExpectedOutput.Count);
            foreach (PiiEntity entity in entities)
            {
                Assert.That(entity.Text, Is.Not.Null.And.Not.Empty);
                Assert.IsNotNull(entity.Category);
                Assert.GreaterOrEqual(entity.ConfidenceScore, 0.0);
                Assert.GreaterOrEqual(entity.Offset, 0);
                Assert.Greater(entity.Length, 0);

                if (entity.SubCategory != null)
                {
                    Assert.IsNotEmpty(entity.SubCategory);
                }
            }
            foreach (var text in minimumExpectedOutput)
            {
                Assert.IsTrue(entities.Any(e => e.Text == text));
            }
        }