Skip to content

Latest commit

 

History

History

Bot.Builder.Community.Middleware.SentimentAnalysis

Sentiment Analysis Middleware

Build status

Branch Status Recommended NuGet package version
master Build status NuGet version

Description

This is part of the Bot Builder Community project which contains Bot Framework Components and other projects / packages for use with Bot Framework Composer and the Bot Builder .NET SDK v4.

This middleware will record the sentiment of each incoming message text. It uses Cognitive Services Text Analytics API and therefore requires a key. There is a free tier which meets most demo/PoC needs. You can get more info at https://azure.microsoft.com/en-us/services/cognitive-services/text-analytics/

The implementation detects the language of the text and get the sentiment of the same. Currently, nearly 17 languages are supported. Full list of supported languages can be seen at https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/text-analytics-supported-languages

Installation

Available via NuGet package Bot.Builder.Community.Middleware.SentimentAnalysis

Install into your project using the following command in the package manager;

    PM> Install-Package Bot.Builder.Community.Middleware.SentimentAnalysis

Sample

A basic sample for using this component can be found here.

Usage

Typically I would place this middleware at the end of the pipeline, but it will work anywhere.

services.AddBot<Bot>((options) => {
    options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);
	
	// Sentiment Middlware
        string apiKey = GetAPIKey(botConfig, "TextAnalytics");
        options.Middleware.Add(new Bot.Builder.Community.Middleware.SentimentAnalysis.SentimentMiddleware(apiKey));
});

This helper method might be helpful for you.

 private static string GetAPIKey(BotConfiguration config, string serviceName)
        {
            string Key = string.Empty;

            foreach (var service in config.Services)
            {
                switch (service.Type)
                {
                    case ServiceTypes.Generic:
                        {
                            if (!(service is ConnectedService sentiment))
                            {
                                throw new InvalidOperationException("The generic service is not configured correctly in your '.bot' file.");
                            }

                            if (service.Name == serviceName)
                            {
                                var genericService = service as GenericService;
                                Key = genericService.Configuration["key"];
                            }

                            break;
                        }
                }
            }

            return Key;
        }

Note this requires an instance of IConfiguration passing to it. Use the instance injected into the Startup.cs class.

The configuration can be read from your <Your Bot Name>.bot file (under services section) which needs the following key

{
      "type": "generic",
      "name": "TextAnalytics",
      "configuration": {
        "key": "<YOUR SENTIMENT ANALYIS KEY HERE>"
      },
      "id": "2"
}

Code Sample

Working sample will be available in samples directory, expect it before 1st Jan, 2019.