Comparing Sentiments

Sentiments

Following up on some previous explorations, I was curious about the relationship between the various sentiment libraries available in Python. The code below will let you compare a text for yourself, but the current list of three — Afinn, TextBlob, and Indico — is not exhaustive, but rather the three I used to draft out this bit of code, which is better than a lot of code I’ve written thus far but still probably quite crude to some.


#! /usr/bin/env python
# Imports
import matplotlib.pyplot as plt
import seaborn # for more appealing plots
from nltk import tokenize

# Customizations
seaborn.set_style("darkgrid")
plt.rcParams['figure.figsize'] = 12, 8

import math
import re
import sys
#reload(sys)
#sys.setdefaultencoding('utf-8')

# AFINN

def afinn_sentiment(filename):
    from afinn import Afinn
    afinn = Afinn()
    with open (my_file, "r") as myfile:
        text = myfile.read().replace('\n', ' ')   
        sentences = tokenize.sent_tokenize(text)
        sentiments = []
        for sentence in sentences:
            sentsent = afinn.score(sentence)
            sentiments.append(sentsent)
        return sentiments


# TextBlob

def textblob_sentiment(filename):
    from textblob import TextBlob
    with open (filename, "r") as myfile:
        text=myfile.read().replace('\n', ' ')   
        blob = TextBlob(text)       
        textsentiments = []
        for sentence in blob.sentences:
            sentsent = sentence.sentiment.polarity
            textsentiments.append(sentsent)
        return textsentiments

# Indico

def indico_sentiment(filename):
    import indicoio
    indicoio.config.api_key = 'yourkeyhere'
    with open (my_file, "r") as myfile:
        text = myfile.read().replace('\n', ' ')   
        sentences = tokenize.sent_tokenize(text)
        indico_sent = indicoio.sentiment(sentences)
    return indico_sent

def plot_sentiments(filename):
    fig = plt.figure()
    plt.title("Comparison of Sentiment Libraries")
    plt.plot(afinn_sentiment(filename), label = "Afinn")
    plt.plot(textblob_sentiment(filename), label = "TextBlob")
    plt.plot(indico_sentiment(filename), label = "Indico")
    plt.ylabel("Emotional Valence")
    plt.xlabel("Sentence #")
    plt.legend(loc='lower right')
    plt.annotate("Oral Legend LAU-14 Used", xy=(30, 2))

Once you’ve loaded this script, all you need to do is give it a file with which to work:


plot_sentiments("/Users/john/Code/texts/legends/lau-014.txt")

Leave a Reply