Sentiment Analysis

Learn how to understand the sentiment of a message.

The Sentiment Analysis extension helps you to understand the sentiment of a message.

Settings

  1. Login to the CometChat Dashboard and select your app.
  2. On the Extensions page simply add the Sentiment Analysis extension.
  3. On the Installed page you can go to Settings and choose to Drop messages with Negative sentiments.

How does it work?

A message can be classified into 4 categories:

  1. Positive
  2. Neutral
  3. Negative
  4. Mixed

Along with these categories, we specify the confidence for that category, on a scale of 0 to 100.

The sentiment about the message can be found in the metadata object as shown below:

"@injected": {
  "extensions": {
    "sentiment-analysis": {
      "sentiment": "positive",
      "sentiment_score": {
        "positive": 95,
        "neutral": 4,
        "negative": 0,
        "mixed": 0
      }
    }
  }
}

If the data is missing, it means that the extension has timed out.

Implementation

Using this information, you can show either a warning or drop the message completely. Here is how Twitter shows a message:

At the recipients' end, from the message object, you can fetch the metadata by calling the getMetadata() method. Using this metadata, you can fetch the sentiment of the message.

var metadata = message.getMetadata();
if (metadata != null) {
  var injectedObject = metadata["@injected"];
  if (injectedObject != null && injectedObject.hasOwnProperty("extensions")) {
    var extensionsObject = injectedObject["extensions"];
    if (
      extensionsObject != null &&
      extensionsObject.hasOwnProperty("sentiment-analysis")
    ) {
      var sentimentAnalysisObject = extensionsObject["sentiment-analysis"];
      var sentiment = sentimentAnalysisObject["sentiment"];
      if (sentimentAnalysisObject.hasOwnProperty("sentiment_score")) {
        var positive = sentimentAnalysisObject["positive"];
        var neutral = sentimentAnalysisObject["neutral"];
        var negative = sentimentAnalysisObject["negative"];
        var mixed = sentimentAnalysisObject["mixed"];
      }
    }
  }
}
JSONObject metadata = message.getMetadata();
if (metadata != null) {
  JSONObject injectedObject = metadata.getJSONObject("@injected");
  if (injectedObject != null && injectedObject.has("extensions")) {
    JSONObject extensionsObject = injectedObject.getJSONObject("extensions");
    if (extensionsObject != null && extensionsObject.has("sentiment-analysis"))
        {
          JSONObject sentimentAnalysisObject = extensionsObject.getJSONObject("sentiment-analysis");
          String sentiment = sentimentAnalysisObject.getString("sentiment");
          if(sentimentAnalysisObject.has("sentiment_score")){
            int positive = sentimentAnalysisObject.getInt("positive");
            int neutral = sentimentAnalysisObject.getInt("neutral");
            int negative = sentimentAnalysisObject.getInt("negative");
            int mixed = sentimentAnalysisObject.getInt("mixed");
          }

        }
    }
}
if (metadata != null) {
     if (metadata.has("@injected")) {
      val injectedJSONObject = metadata.getJSONObject("@injected")
      if (injectedJSONObject != null && injectedJSONObject.has("extensions")) {
      val extensionsObject = injectedJSONObject.getJSONObject("extensions")
      if (extensionsObject.has("sentiment-analysis")) {

      val sentimentObject = extensionsObject.getJSONObject("sentiment-analysis")
      val sentiment= sentimentObject.getString("sentiment")
      if (sentimentObject.has("sentiment_score")) {
      if (sentimentObject.has("positive"))
        val positive=sentimentObject.getInt("positive")
      if (sentimentObject.has("neutral"))
       val neutral= sentimentObject.getInt("neutral")
      if (sentimentObject.has("negative"))
       val negative= sentimentObject.getInt("negative")
      if (sentimentObject.has("mixed"))
        val mixed= sentimentObject.getInt("mixed")
      }         
     }
    }
   }
 }
let textMessage = message as? TextMessage
var metadata : [String : Any]? = message.metaData
if metadata != nil {

  var injectedObject : [String : Any]? = (metadata?["@injected"] as? [String : Any])!
            
  if injectedObject != nil && (injectedObject!["extensions"] != nil){

    var extensionsObject : [String : Any]? = injectedObject?["extensions"] as? [String : Any]
                
    if extensionsObject != nil && extensionsObject?["sentiment-analysis"] != nil         {

      var sentimentAnalysisObject = extensionsObject?["sentiment-analysis"] as! [String :  Any]
                    
        let sentiment = sentimentAnalysisObject["sentiment"] as! String

        if sentimentAnalysisObject["sentiment_score"] {
                        
          let positive = imageModerationObject["positive"] as! Int
          let neutral = imageModerationObject["neutral"] as! Int
          let negative = imageModerationObject["negative"] as! Int
          let mixed = imageModerationObject["mixed"] as! Int
        }
      }
   }
}

Did this page help you?