Example #1
0
        public async Task RecognizeEntitiesWithSubCategoryTest()
        {
            TextAnalyticsRequestOptions options = new TextAnalyticsRequestOptions()
            {
                ModelVersion = "2020-04-01"
            };
            TextAnalyticsClient client = GetClient();
            string document            = "I had a wonderful trip to Seattle last week.";

            RecognizeEntitiesResultCollection result = await client.RecognizeEntitiesBatchAsync(new List <string>() { document }, options : options);

            var documentResult = result.FirstOrDefault();

            Assert.IsFalse(documentResult.HasError);

            Assert.GreaterOrEqual(documentResult.Entities.Count, 3);

            foreach (CategorizedEntity entity in documentResult.Entities)
            {
                if (entity.Text == "last week")
                {
                    Assert.AreEqual("DateRange", entity.SubCategory);
                }
            }

            // Assert the options classes since overloads were added and the original now instantiates a RecognizeEntitiesOptions.
            Assert.IsFalse(options.IncludeStatistics);
            Assert.AreEqual("2020-04-01", options.ModelVersion);
            Assert.AreEqual(StringIndexType.Utf16CodeUnit, options.StringIndexType);
        }
Example #2
0
        public async Task DetectLanguageBatchConvenienceWithStatisticsTest()
        {
            TextAnalyticsClient client = GetClient();
            var documents = new List <string>
            {
                "Hello world",
                "This is a test"
            };

            var options = new TextAnalyticsRequestOptions()
            {
                IncludeStatistics = true,
                ModelVersion      = "2019-10-01"
            };

            DetectLanguageResultCollection results = await client.DetectLanguageBatchAsync(documents, "us", options);

            Assert.AreEqual("English", results[0].PrimaryLanguage.Name);
            Assert.AreEqual("English", results[1].PrimaryLanguage.Name);

            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);

            Assert.IsNotNull(results[0].Statistics);
            Assert.Greater(results[0].Statistics.CharacterCount, 0);
            Assert.Greater(results[0].Statistics.TransactionCount, 0);
        }
Example #3
0
        public async Task AnalyzeOperationKeyPhrasesFromRequestOptions()
        {
            var mockResponse = new MockResponse(202);

            mockResponse.AddHeader(new HttpHeader("Operation-Location", "something/jobs/2a96a91f-7edf-4931-a880-3fdee1d56f15"));

            var mockTransport = new MockTransport(new[] { mockResponse, mockResponse });
            var client        = CreateTestClient(mockTransport);

            var documents = new List <string>
            {
                "Elon Musk is the CEO of SpaceX and Tesla."
            };

            var options = new TextAnalyticsRequestOptions();

            var actions = new ExtractKeyPhrasesAction(options);

            TextAnalyticsActions batchActions = new()
            {
                ExtractKeyPhrasesActions = new List <ExtractKeyPhrasesAction>()
                {
                    actions
                },
            };

            await client.StartAnalyzeActionsAsync(documents, batchActions);

            var contentString = GetString(mockTransport.Requests.Single().Content);

            ValidateRequestOptions(contentString);
        }
        public async Task ExtractKeyPhrasesBatchWithSatisticsTest()
        {
            var options = new TextAnalyticsRequestOptions {
                IncludeStatistics = true
            };
            TextAnalyticsClient      client    = GetClient();
            List <TextDocumentInput> documents = batchDocuments;

            ExtractKeyPhrasesResultCollection results = await client.ExtractKeyPhrasesBatchAsync(documents, options);

            ValidateBatchDocumentsResult(results, 3, includeStatistics: true);

            Assert.AreEqual(documents.Count, results.Statistics.DocumentCount);

            // Assert the options classes since overloads were added and the original now instantiates a RecognizeEntitiesOptions.
            Assert.IsTrue(options.IncludeStatistics);
            Assert.IsNull(options.ModelVersion);
        }
Example #5
0
        public async Task DetectLanguageBatchConvenienceWithStatisticsTest()
        {
            TextAnalyticsClient client    = GetClient();
            List <string>       documents = batchConvenienceDocuments;

            var options = new TextAnalyticsRequestOptions()
            {
                IncludeStatistics = true,
                ModelVersion      = "2019-10-01"
            };

            DetectLanguageResultCollection results = await client.DetectLanguageBatchAsync(documents, "us", options);

            ValidateBatchDocumentsResult(results, includeStatistics: true);

            Assert.AreEqual("English", results[0].PrimaryLanguage.Name);
            Assert.AreEqual("French", results[1].PrimaryLanguage.Name);
            Assert.AreEqual("Spanish", results[2].PrimaryLanguage.Name);
        }
        public async Task RecognizeLinkedEntitiesBatchWithStatisticsTest()
        {
            TextAnalyticsRequestOptions options = new TextAnalyticsRequestOptions {
                IncludeStatistics = true
            };
            TextAnalyticsClient client = GetClient();
            RecognizeLinkedEntitiesResultCollection results = await client.RecognizeLinkedEntitiesBatchAsync(s_batchDocuments, options);

            var expectedOutput = new Dictionary <string, List <string> >()
            {
                { "1", s_document1ExpectedOutput },
                { "3", s_document1ExpectedOutput },
            };

            ValidateBatchDocumentsResult(results, expectedOutput, includeStatistics: true);

            // Assert the options classes since overloads were added and the original now instantiates a RecognizeLinkedEntitiesOptions.
            Assert.IsTrue(options.IncludeStatistics);
            Assert.IsNull(options.ModelVersion);
        }
Example #7
0
        public async Task DetectLanguageBatchWithStatisticsTest()
        {
            TextAnalyticsClient        client    = GetClient();
            List <DetectLanguageInput> documents = batchDocuments;

            var options = new TextAnalyticsRequestOptions()
            {
                IncludeStatistics = true,
                ModelVersion      = "2019-10-01"
            };

            DetectLanguageResultCollection results = await client.DetectLanguageBatchAsync(documents, options : options);

            Assert.AreEqual("English", results[0].PrimaryLanguage.Name);
            Assert.AreEqual("French", results[1].PrimaryLanguage.Name);
            Assert.AreEqual("Spanish", results[2].PrimaryLanguage.Name);
            Assert.AreEqual("(Unknown)", results[3].PrimaryLanguage.Name);
            Assert.IsNotNull(results[0].Statistics);
            Assert.IsNotNull(results[0].Statistics.CharacterCount);
            Assert.IsNotNull(results[0].Statistics.TransactionCount);
        }
Example #8
0
        public async Task DetectLanguageBatchWithStatisticsTest()
        {
            TextAnalyticsClient client = GetClient();
            var documents = new List <DetectLanguageInput>
            {
                new DetectLanguageInput("1", "Hello world")
                {
                    CountryHint = "us",
                },
                new DetectLanguageInput("2", "Bonjour tout le monde")
                {
                    CountryHint = "fr",
                },
                new DetectLanguageInput("3", "Hola mundo")
                {
                    CountryHint = "es",
                },
                new DetectLanguageInput("4", ":) :( :D")
                {
                    CountryHint = "us",
                }
            };

            var options = new TextAnalyticsRequestOptions()
            {
                IncludeStatistics = true,
                ModelVersion      = "2019-10-01"
            };

            DetectLanguageResultCollection results = await client.DetectLanguageBatchAsync(documents, options : options);

            Assert.AreEqual("English", results[0].PrimaryLanguage.Name);
            Assert.AreEqual("French", results[1].PrimaryLanguage.Name);
            Assert.AreEqual("Spanish", results[2].PrimaryLanguage.Name);
            Assert.AreEqual("(Unknown)", results[3].PrimaryLanguage.Name);
            Assert.IsNotNull(results[0].Statistics);
            Assert.IsNotNull(results[0].Statistics.CharacterCount);
            Assert.IsNotNull(results[0].Statistics.TransactionCount);
        }
Example #9
0
        public async Task AnalyzeOperationRecognizeLinkedEntitiesWithRequestOptionsFull()
        {
            var mockResponse = new MockResponse(202);

            mockResponse.AddHeader(new HttpHeader("Operation-Location", "something/jobs/2a96a91f-7edf-4931-a880-3fdee1d56f15"));

            var mockTransport = new MockTransport(new[] { mockResponse, mockResponse });
            var client        = CreateTestClient(mockTransport);

            var documents = new List <string>
            {
                "Elon Musk is the CEO of SpaceX and Tesla."
            };

            var options = new TextAnalyticsRequestOptions()
            {
                ModelVersion       = "latest",
                DisableServiceLogs = true,
                IncludeStatistics  = false
            };

            var actions = new RecognizeLinkedEntitiesAction(options);

            TextAnalyticsActions batchActions = new TextAnalyticsActions()
            {
                RecognizeLinkedEntitiesActions = new List <RecognizeLinkedEntitiesAction>()
                {
                    actions
                },
            };

            await client.StartAnalyzeActionsAsync(documents, batchActions);

            var contentString = GetString(mockTransport.Requests.Single().Content);

            ValidateRequestOptions(contentString, true);
        }
Example #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ExtractKeyPhrasesAction"/>
 /// class based on the values of a <see cref="TextAnalyticsRequestOptions"/>.
 /// It sets the <see cref="ModelVersion"/> and <see cref="DisableServiceLogs"/> properties.
 /// </summary>
 public ExtractKeyPhrasesAction(TextAnalyticsRequestOptions options)
 {
     ModelVersion       = options.ModelVersion;
     DisableServiceLogs = options.DisableServiceLogs;
 }
        public void DetectLanguageBatch()
        {
            string endpoint = TestEnvironment.Endpoint;
            string apiKey   = TestEnvironment.ApiKey;

            // Instantiate a client that will be used to call the service.
            var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey), CreateSampleOptions());

            #region Snippet:TextAnalyticsSample1DetectLanguageBatch
            string documentA = @"Este documento está escrito en un idioma diferente al Inglés. Tiene como objetivo demostrar
                                cómo invocar el método de Detección de idioma del servicio de Text Analytics en Microsoft Azure.
                                También muestra cómo acceder a la información retornada por el servicio. Esta capacidad es útil
                                para los sistemas de contenido que recopilan texto arbitrario, donde el idioma es desconocido.
                                La característica Detección de idioma puede detectar una amplia gama de idiomas, variantes,
                                dialectos y algunos idiomas regionales o culturales.";

            string documentB = @"This document is written in a language different than Spanish. It's objective is to demonstrate
                                how to call the Detect Language method from the Microsoft Azure Text Analytics service.
                                It also shows how to access the information returned from the service. This capability is useful
                                for content stores that collect arbitrary text, where language is unknown.
                                The Language Detection feature can detect a wide range of languages, variants, dialects, and some
                                regional or cultural languages.";

            string documentC = @"Ce document est rédigé dans une langue différente de l'espagnol. Son objectif est de montrer comment
                                appeler la méthode Detect Language à partir du service Microsoft Azure Text Analytics.
                                Il montre également comment accéder aux informations renvoyées par le service. Cette capacité est
                                utile pour les magasins de contenu qui collectent du texte arbitraire dont la langue est inconnue.
                                La fonctionnalité Détection de langue peut détecter une grande variété de langues, de variantes,
                                de dialectes, et certaines langues régionales ou de culture.";

            var documents = new List <DetectLanguageInput>
            {
                new DetectLanguageInput("1", documentA)
                {
                    CountryHint = "es",
                },
                new DetectLanguageInput("2", documentB)
                {
                    CountryHint = "us",
                },
                new DetectLanguageInput("3", documentC)
                {
                    CountryHint = "fr",
                },
                new DetectLanguageInput("4", ":) :( :D")
                {
                    CountryHint = DetectLanguageInput.None,
                },
                new DetectLanguageInput("5", "")
            };

            var options = new TextAnalyticsRequestOptions {
                IncludeStatistics = true
            };

            Response <DetectLanguageResultCollection> response          = client.DetectLanguageBatch(documents, options);
            DetectLanguageResultCollection            documentsLanguage = response.Value;

            int i = 0;
            Console.WriteLine($"Results of Azure Text Analytics \"Detect Language\" Model, version: \"{documentsLanguage.ModelVersion}\"");
            Console.WriteLine("");

            foreach (DetectLanguageResult documentLanguage in documentsLanguage)
            {
                DetectLanguageInput document = documents[i++];

                Console.WriteLine($"On document (Id={document.Id}, CountryHint=\"{document.CountryHint}\"):");

                if (documentLanguage.HasError)
                {
                    Console.WriteLine("  Error!");
                    Console.WriteLine($"  Document error code: {documentLanguage.Error.ErrorCode}.");
                    Console.WriteLine($"  Message: {documentLanguage.Error.Message}");
                }
                else
                {
                    Console.WriteLine($"  Detected language: {documentLanguage.PrimaryLanguage.Name}");
                    Console.WriteLine($"  Confidence score: {documentLanguage.PrimaryLanguage.ConfidenceScore}");

                    Console.WriteLine($"  Document statistics:");
                    Console.WriteLine($"    Character count: {documentLanguage.Statistics.CharacterCount}");
                    Console.WriteLine($"    Transaction count: {documentLanguage.Statistics.TransactionCount}");
                }
                Console.WriteLine("");
            }

            Console.WriteLine($"Batch operation statistics:");
            Console.WriteLine($"  Document count: {documentsLanguage.Statistics.DocumentCount}");
            Console.WriteLine($"  Valid document count: {documentsLanguage.Statistics.ValidDocumentCount}");
            Console.WriteLine($"  Invalid document count: {documentsLanguage.Statistics.InvalidDocumentCount}");
            Console.WriteLine($"  Transaction count: {documentsLanguage.Statistics.TransactionCount}");
            #endregion
        }
Example #12
0
 public abstract Response <DetectLanguageResultCollection> DetectLanguageBatch(IEnumerable <DetectLanguageInput> documents, TextAnalyticsRequestOptions options = default, CancellationToken cancellationToken = default);
Example #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RecognizeLinkedEntitiesAction"/>
 /// class based on the values of a <see cref="TextAnalyticsRequestOptions"/>.
 /// It sets the <see cref="ModelVersion"/> and <see cref="DisableServiceLogs"/> properties.
 /// </summary>
 public RecognizeLinkedEntitiesAction(TextAnalyticsRequestOptions options)
 {
     ModelVersion       = options.ModelVersion;
     DisableServiceLogs = options.DisableServiceLogs;
 }
Example #14
0
 public abstract Task <Response <ExtractKeyPhrasesResultCollection> > ExtractKeyPhrasesBatchAsync(IEnumerable <string> documents, string language = default, TextAnalyticsRequestOptions options = default, CancellationToken cancellationToken = default);
 internal AnalyzeSentimentOptions(TextAnalyticsRequestOptions options)
     : base(options.IncludeStatistics, options.ModelVersion)
 {
 }
        public void RecognizeEntitiesBatch()
        {
            string endpoint = TestEnvironment.Endpoint;
            string apiKey   = TestEnvironment.ApiKey;

            // Instantiate a client that will be used to call the service.
            var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey));

            #region Snippet:TextAnalyticsSample4RecognizeEntitiesBatch
            string documentA = @"We love this trail and make the trip every year. The views are breathtaking and well
                                worth the hike! Yesterday was foggy though, so we missed the spectacular views.
                                We tried again today and it was amazing. Everyone in my family liked the trail although
                                it was too challenging for the less athletic among us.
                                Not necessarily recommended for small children.
                                A hotel close to the trail offers services for childcare in case you want that.";

            string documentB = @"Nos hospedamos en el Hotel Foo la semana pasada por nuestro aniversario. La gerencia
                                sabía de nuestra celebración y me ayudaron a tenerle una sorpresa a mi pareja.
                                La habitación estaba limpia y decorada como yo había pedido. Una gran experiencia.
                                El próximo año volveremos.";

            string documentC = @"That was the best day of my life! We went on a 4 day trip where we stayed at Hotel Foo.
                                They had great amenities that included an indoor pool, a spa, and a bar.
                                The spa offered couples massages which were really good. 
                                The spa was clean and felt very peaceful. Overall the whole experience was great.
                                We will definitely come back.";

            var documents = new List <TextDocumentInput>
            {
                new TextDocumentInput("1", documentA)
                {
                    Language = "en",
                },
                new TextDocumentInput("2", documentB)
                {
                    Language = "es",
                },
                new TextDocumentInput("3", documentC)
                {
                    Language = "en",
                },
                new TextDocumentInput("4", string.Empty)
            };

            var options = new TextAnalyticsRequestOptions {
                IncludeStatistics = true
            };
            Response <RecognizeEntitiesResultCollection> response            = client.RecognizeEntitiesBatch(documents, options);
            RecognizeEntitiesResultCollection            entitiesInDocuments = response.Value;

            int i = 0;
            Console.WriteLine($"Results of Azure Text Analytics \"Named Entity Recognition\" Model, version: \"{entitiesInDocuments.ModelVersion}\"");
            Console.WriteLine("");

            foreach (RecognizeEntitiesResult entitiesInDocument in entitiesInDocuments)
            {
                TextDocumentInput document = documents[i++];

                Console.WriteLine($"On document (Id={document.Id}, Language=\"{document.Language}\"):");

                if (entitiesInDocument.HasError)
                {
                    Console.WriteLine("  Error!");
                    Console.WriteLine($"  Document error code: {entitiesInDocument.Error.ErrorCode}.");
                    Console.WriteLine($"  Message: {entitiesInDocument.Error.Message}");
                }
                else
                {
                    Console.WriteLine($"  Recognized the following {entitiesInDocument.Entities.Count()} entities:");

                    foreach (CategorizedEntity entity in entitiesInDocument.Entities)
                    {
                        Console.WriteLine($"    Text: {entity.Text}");
                        Console.WriteLine($"    Offset: {entity.Offset}");
                        Console.WriteLine($"    Category: {entity.Category}");
                        if (!string.IsNullOrEmpty(entity.SubCategory))
                        {
                            Console.WriteLine($"    SubCategory: {entity.SubCategory}");
                        }
                        Console.WriteLine($"    Confidence score: {entity.ConfidenceScore}");
                        Console.WriteLine("");
                    }

                    Console.WriteLine($"  Document statistics:");
                    Console.WriteLine($"    Character count: {entitiesInDocument.Statistics.CharacterCount}");
                    Console.WriteLine($"    Transaction count: {entitiesInDocument.Statistics.TransactionCount}");
                }
                Console.WriteLine("");
            }

            Console.WriteLine($"Batch operation statistics:");
            Console.WriteLine($"  Document count: {entitiesInDocuments.Statistics.DocumentCount}");
            Console.WriteLine($"  Valid document count: {entitiesInDocuments.Statistics.ValidDocumentCount}");
            Console.WriteLine($"  Invalid document count: {entitiesInDocuments.Statistics.InvalidDocumentCount}");
            Console.WriteLine($"  Transaction count: {entitiesInDocuments.Statistics.TransactionCount}");
            Console.WriteLine("");
            #endregion
        }
        public void ExtractEntityLinkingBatch()
        {
            string endpoint = TestEnvironment.Endpoint;
            string apiKey   = TestEnvironment.ApiKey;

            // Instantiate a client that will be used to call the service.
            var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey), CreateSampleOptions());

            #region Snippet:TextAnalyticsSample6RecognizeLinkedEntitiesBatch
            string documentA = @"Microsoft was founded by Bill Gates with some friends he met at Harvard. One of his friends,
                                Steve Ballmer, eventually became CEO after Bill Gates as well.Steve Ballmer eventually stepped
                                down as CEO of Microsoft, and was succeeded by Satya Nadella.
                                Microsoft originally moved its headquarters to Bellevue, Washington in Januaray 1979, but is now
                                headquartered in Redmond";

            string documentB = @"El CEO de Microsoft es Satya Nadella, quien asumió esta posición en Febrero de 2014. Él
                                empezó como Ingeniero de Software en el año 1992.";

            string documentC = @"Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, to develop and 
                                sell BASIC interpreters for the Altair 8800. During his career at Microsoft, Gates held
                                the positions of chairman chief executive officer, president and chief software architect
                                while also being the largest individual shareholder until May 2014.";

            var documents = new List <TextDocumentInput>
            {
                new TextDocumentInput("1", documentA)
                {
                    Language = "en",
                },
                new TextDocumentInput("2", documentB)
                {
                    Language = "es",
                },
                new TextDocumentInput("3", documentC)
                {
                    Language = "en",
                },
                new TextDocumentInput("4", string.Empty)
            };

            var options = new TextAnalyticsRequestOptions {
                IncludeStatistics = true
            };
            Response <RecognizeLinkedEntitiesResultCollection> response             = client.RecognizeLinkedEntitiesBatch(documents, options);
            RecognizeLinkedEntitiesResultCollection            entitiesPerDocuments = response.Value;

            int i = 0;
            Console.WriteLine($"Results of \"Entity Linking\", version: \"{entitiesPerDocuments.ModelVersion}\"");
            Console.WriteLine("");

            foreach (RecognizeLinkedEntitiesResult entitiesInDocument in entitiesPerDocuments)
            {
                TextDocumentInput document = documents[i++];

                Console.WriteLine($"On document (Id={document.Id}, Language=\"{document.Language}\"):");

                if (entitiesInDocument.HasError)
                {
                    Console.WriteLine("  Error!");
                    Console.WriteLine($"  Document error code: {entitiesInDocument.Error.ErrorCode}.");
                    Console.WriteLine($"  Message: {entitiesInDocument.Error.Message}");
                }
                else
                {
                    Console.WriteLine($"Recognized {entitiesInDocument.Entities.Count} entities:");
                    foreach (LinkedEntity linkedEntity in entitiesInDocument.Entities)
                    {
                        Console.WriteLine($"  Name: {linkedEntity.Name}");
                        Console.WriteLine($"  Language: {linkedEntity.Language}");
                        Console.WriteLine($"  Data Source: {linkedEntity.DataSource}");
                        Console.WriteLine($"  URL: {linkedEntity.Url}");
                        Console.WriteLine($"  Entity Id in Data Source: {linkedEntity.DataSourceEntityId}");
                        foreach (LinkedEntityMatch match in linkedEntity.Matches)
                        {
                            Console.WriteLine($"    Match Text: {match.Text}");
                            Console.WriteLine($"    Offset: {match.Offset}");
                            Console.WriteLine($"    Length: {match.Length}");
                            Console.WriteLine($"    Confidence score: {match.ConfidenceScore}");
                        }
                        Console.WriteLine("");
                    }

                    Console.WriteLine($"  Document statistics:");
                    Console.WriteLine($"    Character count: {entitiesInDocument.Statistics.CharacterCount}");
                    Console.WriteLine($"    Transaction count: {entitiesInDocument.Statistics.TransactionCount}");
                }
                Console.WriteLine("");
            }

            Console.WriteLine($"Batch operation statistics:");
            Console.WriteLine($"  Document count: {entitiesPerDocuments.Statistics.DocumentCount}");
            Console.WriteLine($"  Valid document count: {entitiesPerDocuments.Statistics.ValidDocumentCount}");
            Console.WriteLine($"  Invalid document count: {entitiesPerDocuments.Statistics.InvalidDocumentCount}");
            Console.WriteLine($"  Transaction count: {entitiesPerDocuments.Statistics.TransactionCount}");
            Console.WriteLine("");
            #endregion
        }
Example #18
0
 public abstract Task <Response <DetectLanguageResultCollection> > DetectLanguageBatchAsync(IEnumerable <string> documents, string countryHint = default, TextAnalyticsRequestOptions options = default, CancellationToken cancellationToken = default);
Example #19
0
 public abstract Response <ExtractKeyPhrasesResultCollection> ExtractKeyPhrasesBatch(IEnumerable <TextDocumentInput> documents, TextAnalyticsRequestOptions options = default, CancellationToken cancellationToken = default);
Example #20
0
 public abstract Task <Response <RecognizeLinkedEntitiesResultCollection> > RecognizeLinkedEntitiesBatchAsync(IEnumerable <string> documents, string language = default, TextAnalyticsRequestOptions options = default, CancellationToken cancellationToken = default);
Example #21
0
 public abstract Response <RecognizeLinkedEntitiesResultCollection> RecognizeLinkedEntitiesBatch(IEnumerable <TextDocumentInput> documents, TextAnalyticsRequestOptions options = default, CancellationToken cancellationToken = default);