Repository files navigation

Babel Street Logo

Analytics by Babel Street


NuGet version

Our product is a full text processing pipeline from data preparation to extracting the most relevant information and analysis utilizing precise, focused AI that has built-in human understanding. Text Analytics provides foundational linguistic analysis for identifying languages and relating words. The result is enriched and normalized text for high-speed search and processing without translation.

Text Analytics extracts events and entities — people, organizations, and places — from unstructured text and adds the structure of associating those entities into events that deliver only the necessary information for near real-time decision making. Accompanying tools shorten the process of training AI models to recognize domain-specific events.

The product delivers a multitude of ways to sharpen and expand search results. Semantic similarity expands search beyond keywords to words with the same meaning, even in other languages. Sentiment analysis and topic extraction help filter results to what’s relevant.

Analytics API Access

Quick Start

Installation

If you use Nuget, you may use either Visual Studio's Nuget package manager or command line to install the Analytics API binding.

In Visual Studio: search for the rosette_api package in Nuget and follow the installation instructions.

Using Nuget Command Line: nuget install rosette_api.

To check your installed version:

nuget list rosette_api

Examples

View small example programs for each Rosette endpoint in the examples directory.

Documentation & Support

Concurrency

The C# binding uses HttpClient to manage connectivity and concurrency. By default, .NET sets the default connection limit to 2, which is the same as the Analytics API default limit. For Analytics API plans that allow for higher concurrency, the internal HTTP client will adjust automatically to the higher number. If a user chooses to provide their own HTTP client, no adjustment will be made. In this case it is up to the user to set ServicePointManager.DefaultConnectionLimit to the Analytics API concurrency level prior to instantiating the CAPI object.

For multithreaded operations, do not instantiate a new CAPI object for each thread. The objects will not share the connection limit and 429 too many requests errors are likely to occur. Rather, so that the underlying HttpClient can manage the queueing of the requests across all threads, instantiate a CAPI object and pass it to each thread. If it is necessary to instantiate a CAPI object on each thread, first create an HttpClient object, either by retrieving it from an instance of CAPI via the Client property or by creating your own HTTP client and passing it into each thread for use by the CAPI constructor.

Example of using a common CAPI object for each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, api) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, CAPI api) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Example of retrieving a client object and using it in each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
HttpClient client = api.Client;
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, client) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, HttpClient client) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
CAPI api = new CAPI("rosette api key", client: client);
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Binding Developer Information

If you are modifying the binding code, please refer to the developer README file.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Babel Street Logo

Analytics by Babel Street


NuGet version

Our product is a full text processing pipeline from data preparation to extracting the most relevant information and analysis utilizing precise, focused AI that has built-in human understanding. Text Analytics provides foundational linguistic analysis for identifying languages and relating words. The result is enriched and normalized text for high-speed search and processing without translation.

Text Analytics extracts events and entities — people, organizations, and places — from unstructured text and adds the structure of associating those entities into events that deliver only the necessary information for near real-time decision making. Accompanying tools shorten the process of training AI models to recognize domain-specific events.

The product delivers a multitude of ways to sharpen and expand search results. Semantic similarity expands search beyond keywords to words with the same meaning, even in other languages. Sentiment analysis and topic extraction help filter results to what’s relevant.

Analytics API Access

Quick Start

Installation

If you use Nuget, you may use either Visual Studio's Nuget package manager or command line to install the Analytics API binding.

In Visual Studio: search for the rosette_api package in Nuget and follow the installation instructions.

Using Nuget Command Line: nuget install rosette_api.

To check your installed version:

nuget list rosette_api

Examples

View small example programs for each Rosette endpoint in the examples directory.

Documentation & Support

Concurrency

The C# binding uses HttpClient to manage connectivity and concurrency. By default, .NET sets the default connection limit to 2, which is the same as the Analytics API default limit. For Analytics API plans that allow for higher concurrency, the internal HTTP client will adjust automatically to the higher number. If a user chooses to provide their own HTTP client, no adjustment will be made. In this case it is up to the user to set ServicePointManager.DefaultConnectionLimit to the Analytics API concurrency level prior to instantiating the CAPI object.

For multithreaded operations, do not instantiate a new CAPI object for each thread. The objects will not share the connection limit and 429 too many requests errors are likely to occur. Rather, so that the underlying HttpClient can manage the queueing of the requests across all threads, instantiate a CAPI object and pass it to each thread. If it is necessary to instantiate a CAPI object on each thread, first create an HttpClient object, either by retrieving it from an instance of CAPI via the Client property or by creating your own HTTP client and passing it into each thread for use by the CAPI constructor.

Example of using a common CAPI object for each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, api) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, CAPI api) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Example of retrieving a client object and using it in each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
HttpClient client = api.Client;
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, client) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, HttpClient client) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
CAPI api = new CAPI("rosette api key", client: client);
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Binding Developer Information

If you are modifying the binding code, please refer to the developer README file.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Babel Street Logo

Analytics by Babel Street


NuGet version

Our product is a full text processing pipeline from data preparation to extracting the most relevant information and analysis utilizing precise, focused AI that has built-in human understanding. Text Analytics provides foundational linguistic analysis for identifying languages and relating words. The result is enriched and normalized text for high-speed search and processing without translation.

Text Analytics extracts events and entities — people, organizations, and places — from unstructured text and adds the structure of associating those entities into events that deliver only the necessary information for near real-time decision making. Accompanying tools shorten the process of training AI models to recognize domain-specific events.

The product delivers a multitude of ways to sharpen and expand search results. Semantic similarity expands search beyond keywords to words with the same meaning, even in other languages. Sentiment analysis and topic extraction help filter results to what’s relevant.

Analytics API Access

Quick Start

Installation

If you use Nuget, you may use either Visual Studio's Nuget package manager or command line to install the Analytics API binding.

In Visual Studio: search for the rosette_api package in Nuget and follow the installation instructions.

Using Nuget Command Line: nuget install rosette_api.

To check your installed version:

nuget list rosette_api

Examples

View small example programs for each Rosette endpoint in the examples directory.

Documentation & Support

Concurrency

The C# binding uses HttpClient to manage connectivity and concurrency. By default, .NET sets the default connection limit to 2, which is the same as the Analytics API default limit. For Analytics API plans that allow for higher concurrency, the internal HTTP client will adjust automatically to the higher number. If a user chooses to provide their own HTTP client, no adjustment will be made. In this case it is up to the user to set ServicePointManager.DefaultConnectionLimit to the Analytics API concurrency level prior to instantiating the CAPI object.

For multithreaded operations, do not instantiate a new CAPI object for each thread. The objects will not share the connection limit and 429 too many requests errors are likely to occur. Rather, so that the underlying HttpClient can manage the queueing of the requests across all threads, instantiate a CAPI object and pass it to each thread. If it is necessary to instantiate a CAPI object on each thread, first create an HttpClient object, either by retrieving it from an instance of CAPI via the Client property or by creating your own HTTP client and passing it into each thread for use by the CAPI constructor.

Example of using a common CAPI object for each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, api) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, CAPI api) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Example of retrieving a client object and using it in each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
HttpClient client = api.Client;
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, client) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, HttpClient client) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
CAPI api = new CAPI("rosette api key", client: client);
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Binding Developer Information

If you are modifying the binding code, please refer to the developer README file.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Babel Street Logo

Analytics by Babel Street


NuGet version

Our product is a full text processing pipeline from data preparation to extracting the most relevant information and analysis utilizing precise, focused AI that has built-in human understanding. Text Analytics provides foundational linguistic analysis for identifying languages and relating words. The result is enriched and normalized text for high-speed search and processing without translation.

Text Analytics extracts events and entities — people, organizations, and places — from unstructured text and adds the structure of associating those entities into events that deliver only the necessary information for near real-time decision making. Accompanying tools shorten the process of training AI models to recognize domain-specific events.

The product delivers a multitude of ways to sharpen and expand search results. Semantic similarity expands search beyond keywords to words with the same meaning, even in other languages. Sentiment analysis and topic extraction help filter results to what’s relevant.

Analytics API Access

Quick Start

Installation

If you use Nuget, you may use either Visual Studio's Nuget package manager or command line to install the Analytics API binding.

In Visual Studio: search for the rosette_api package in Nuget and follow the installation instructions.

Using Nuget Command Line: nuget install rosette_api.

To check your installed version:

nuget list rosette_api

Examples

View small example programs for each Rosette endpoint in the examples directory.

Documentation & Support

Concurrency

The C# binding uses HttpClient to manage connectivity and concurrency. By default, .NET sets the default connection limit to 2, which is the same as the Analytics API default limit. For Analytics API plans that allow for higher concurrency, the internal HTTP client will adjust automatically to the higher number. If a user chooses to provide their own HTTP client, no adjustment will be made. In this case it is up to the user to set ServicePointManager.DefaultConnectionLimit to the Analytics API concurrency level prior to instantiating the CAPI object.

For multithreaded operations, do not instantiate a new CAPI object for each thread. The objects will not share the connection limit and 429 too many requests errors are likely to occur. Rather, so that the underlying HttpClient can manage the queueing of the requests across all threads, instantiate a CAPI object and pass it to each thread. If it is necessary to instantiate a CAPI object on each thread, first create an HttpClient object, either by retrieving it from an instance of CAPI via the Client property or by creating your own HTTP client and passing it into each thread for use by the CAPI constructor.

Example of using a common CAPI object for each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, api) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, CAPI api) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Example of retrieving a client object and using it in each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
HttpClient client = api.Client;
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, client) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, HttpClient client) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
CAPI api = new CAPI("rosette api key", client: client);
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Binding Developer Information

If you are modifying the binding code, please refer to the developer README file.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Babel Street Logo

Analytics by Babel Street


NuGet version

Our product is a full text processing pipeline from data preparation to extracting the most relevant information and analysis utilizing precise, focused AI that has built-in human understanding. Text Analytics provides foundational linguistic analysis for identifying languages and relating words. The result is enriched and normalized text for high-speed search and processing without translation.

Text Analytics extracts events and entities — people, organizations, and places — from unstructured text and adds the structure of associating those entities into events that deliver only the necessary information for near real-time decision making. Accompanying tools shorten the process of training AI models to recognize domain-specific events.

The product delivers a multitude of ways to sharpen and expand search results. Semantic similarity expands search beyond keywords to words with the same meaning, even in other languages. Sentiment analysis and topic extraction help filter results to what’s relevant.

Analytics API Access

Quick Start

Installation

If you use Nuget, you may use either Visual Studio's Nuget package manager or command line to install the Analytics API binding.

In Visual Studio: search for the rosette_api package in Nuget and follow the installation instructions.

Using Nuget Command Line: nuget install rosette_api.

To check your installed version:

nuget list rosette_api

Examples

View small example programs for each Rosette endpoint in the examples directory.

Documentation & Support

Concurrency

The C# binding uses HttpClient to manage connectivity and concurrency. By default, .NET sets the default connection limit to 2, which is the same as the Analytics API default limit. For Analytics API plans that allow for higher concurrency, the internal HTTP client will adjust automatically to the higher number. If a user chooses to provide their own HTTP client, no adjustment will be made. In this case it is up to the user to set ServicePointManager.DefaultConnectionLimit to the Analytics API concurrency level prior to instantiating the CAPI object.

For multithreaded operations, do not instantiate a new CAPI object for each thread. The objects will not share the connection limit and 429 too many requests errors are likely to occur. Rather, so that the underlying HttpClient can manage the queueing of the requests across all threads, instantiate a CAPI object and pass it to each thread. If it is necessary to instantiate a CAPI object on each thread, first create an HttpClient object, either by retrieving it from an instance of CAPI via the Client property or by creating your own HTTP client and passing it into each thread for use by the CAPI constructor.

Example of using a common CAPI object for each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, api) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, CAPI api) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Example of retrieving a client object and using it in each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
HttpClient client = api.Client;
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, client) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, HttpClient client) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
CAPI api = new CAPI("rosette api key", client: client);
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Binding Developer Information

If you are modifying the binding code, please refer to the developer README file.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Babel Street Logo

Analytics by Babel Street


NuGet version

Our product is a full text processing pipeline from data preparation to extracting the most relevant information and analysis utilizing precise, focused AI that has built-in human understanding. Text Analytics provides foundational linguistic analysis for identifying languages and relating words. The result is enriched and normalized text for high-speed search and processing without translation.

Text Analytics extracts events and entities — people, organizations, and places — from unstructured text and adds the structure of associating those entities into events that deliver only the necessary information for near real-time decision making. Accompanying tools shorten the process of training AI models to recognize domain-specific events.

The product delivers a multitude of ways to sharpen and expand search results. Semantic similarity expands search beyond keywords to words with the same meaning, even in other languages. Sentiment analysis and topic extraction help filter results to what’s relevant.

Analytics API Access

Quick Start

Installation

If you use Nuget, you may use either Visual Studio's Nuget package manager or command line to install the Analytics API binding.

In Visual Studio: search for the rosette_api package in Nuget and follow the installation instructions.

Using Nuget Command Line: nuget install rosette_api.

To check your installed version:

nuget list rosette_api

Examples

View small example programs for each Rosette endpoint in the examples directory.

Documentation & Support

Concurrency

The C# binding uses HttpClient to manage connectivity and concurrency. By default, .NET sets the default connection limit to 2, which is the same as the Analytics API default limit. For Analytics API plans that allow for higher concurrency, the internal HTTP client will adjust automatically to the higher number. If a user chooses to provide their own HTTP client, no adjustment will be made. In this case it is up to the user to set ServicePointManager.DefaultConnectionLimit to the Analytics API concurrency level prior to instantiating the CAPI object.

For multithreaded operations, do not instantiate a new CAPI object for each thread. The objects will not share the connection limit and 429 too many requests errors are likely to occur. Rather, so that the underlying HttpClient can manage the queueing of the requests across all threads, instantiate a CAPI object and pass it to each thread. If it is necessary to instantiate a CAPI object on each thread, first create an HttpClient object, either by retrieving it from an instance of CAPI via the Client property or by creating your own HTTP client and passing it into each thread for use by the CAPI constructor.

Example of using a common CAPI object for each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, api) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, CAPI api) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Example of retrieving a client object and using it in each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
HttpClient client = api.Client;
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, client) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, HttpClient client) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
CAPI api = new CAPI("rosette api key", client: client);
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Binding Developer Information

If you are modifying the binding code, please refer to the developer README file.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Babel Street Logo

Analytics by Babel Street


NuGet version

Our product is a full text processing pipeline from data preparation to extracting the most relevant information and analysis utilizing precise, focused AI that has built-in human understanding. Text Analytics provides foundational linguistic analysis for identifying languages and relating words. The result is enriched and normalized text for high-speed search and processing without translation.

Text Analytics extracts events and entities — people, organizations, and places — from unstructured text and adds the structure of associating those entities into events that deliver only the necessary information for near real-time decision making. Accompanying tools shorten the process of training AI models to recognize domain-specific events.

The product delivers a multitude of ways to sharpen and expand search results. Semantic similarity expands search beyond keywords to words with the same meaning, even in other languages. Sentiment analysis and topic extraction help filter results to what’s relevant.

Analytics API Access

Quick Start

Installation

If you use Nuget, you may use either Visual Studio's Nuget package manager or command line to install the Analytics API binding.

In Visual Studio: search for the rosette_api package in Nuget and follow the installation instructions.

Using Nuget Command Line: nuget install rosette_api.

To check your installed version:

nuget list rosette_api

Examples

View small example programs for each Rosette endpoint in the examples directory.

Documentation & Support

Concurrency

The C# binding uses HttpClient to manage connectivity and concurrency. By default, .NET sets the default connection limit to 2, which is the same as the Analytics API default limit. For Analytics API plans that allow for higher concurrency, the internal HTTP client will adjust automatically to the higher number. If a user chooses to provide their own HTTP client, no adjustment will be made. In this case it is up to the user to set ServicePointManager.DefaultConnectionLimit to the Analytics API concurrency level prior to instantiating the CAPI object.

For multithreaded operations, do not instantiate a new CAPI object for each thread. The objects will not share the connection limit and 429 too many requests errors are likely to occur. Rather, so that the underlying HttpClient can manage the queueing of the requests across all threads, instantiate a CAPI object and pass it to each thread. If it is necessary to instantiate a CAPI object on each thread, first create an HttpClient object, either by retrieving it from an instance of CAPI via the Client property or by creating your own HTTP client and passing it into each thread for use by the CAPI constructor.

Example of using a common CAPI object for each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, api) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, CAPI api) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Example of retrieving a client object and using it in each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
HttpClient client = api.Client;
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, client) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, HttpClient client) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
CAPI api = new CAPI("rosette api key", client: client);
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Binding Developer Information

If you are modifying the binding code, please refer to the developer README file.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Babel Street Logo

Analytics by Babel Street


NuGet version

Our product is a full text processing pipeline from data preparation to extracting the most relevant information and analysis utilizing precise, focused AI that has built-in human understanding. Text Analytics provides foundational linguistic analysis for identifying languages and relating words. The result is enriched and normalized text for high-speed search and processing without translation.

Text Analytics extracts events and entities — people, organizations, and places — from unstructured text and adds the structure of associating those entities into events that deliver only the necessary information for near real-time decision making. Accompanying tools shorten the process of training AI models to recognize domain-specific events.

The product delivers a multitude of ways to sharpen and expand search results. Semantic similarity expands search beyond keywords to words with the same meaning, even in other languages. Sentiment analysis and topic extraction help filter results to what’s relevant.

Analytics API Access

Quick Start

Installation

If you use Nuget, you may use either Visual Studio's Nuget package manager or command line to install the Analytics API binding.

In Visual Studio: search for the rosette_api package in Nuget and follow the installation instructions.

Using Nuget Command Line: nuget install rosette_api.

To check your installed version:

nuget list rosette_api

Examples

View small example programs for each Rosette endpoint in the examples directory.

Documentation & Support

Concurrency

The C# binding uses HttpClient to manage connectivity and concurrency. By default, .NET sets the default connection limit to 2, which is the same as the Analytics API default limit. For Analytics API plans that allow for higher concurrency, the internal HTTP client will adjust automatically to the higher number. If a user chooses to provide their own HTTP client, no adjustment will be made. In this case it is up to the user to set ServicePointManager.DefaultConnectionLimit to the Analytics API concurrency level prior to instantiating the CAPI object.

For multithreaded operations, do not instantiate a new CAPI object for each thread. The objects will not share the connection limit and 429 too many requests errors are likely to occur. Rather, so that the underlying HttpClient can manage the queueing of the requests across all threads, instantiate a CAPI object and pass it to each thread. If it is necessary to instantiate a CAPI object on each thread, first create an HttpClient object, either by retrieving it from an instance of CAPI via the Client property or by creating your own HTTP client and passing it into each thread for use by the CAPI constructor.

Example of using a common CAPI object for each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, api) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, CAPI api) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Example of retrieving a client object and using it in each thread:

 static void Main(string[] args) {
TestConcurrency().GetAwaiter().GetResult();
}
private static async Task TestConcurrency() {
int threads = 5;
var tasks = new List<Task>();
CAPI api = new CAPI("rosette api key");
HttpClient client = api.Client;
foreach (int task in Enumerable.Range(0, threads)) {
Console.WriteLine("Starting task {0}", task);
tasks.Add(Task.Factory.StartNew( () => runLookup(task, client) ));
}
await Task.WhenAll(tasks);
Console.WriteLine("Test complete");
}
private static Task runLookup(int taskId, HttpClient client) {
int calls = 5;
string contentUri = "http://www.foxsports.com/olympics/story/chad-le-clos-showed-why-you-never-talk-trash-to-michael-phelps-080916";
for (int i = 0; i < calls; i++) {
Console.WriteLine("Task ID: {0} call {1}", taskId, i);
try {
CAPI api = new CAPI("rosette api key", client: client);
var result = api.Entity(contentUri: contentUri);
Console.WriteLine("Concurrency: {0}, Result: {1}", api.Concurrency, result);
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
return Task.CompletedTask;
}

Binding Developer Information

If you are modifying the binding code, please refer to the developer README file.