2

I'm trying to insert a new dataframe column with only the 'positive' or 'negative' string according to TextBlob classification ex: for the 1st line of my df the result is (pos, 0.75, 0.2499999999999997) and I would like to have 'positive' in a new column named 'algo_sentiment', I've been trying with this code:

def sentiment_algo(text):
    try:
        if TextBlob (text, analyzer=NaiveBayesAnalyzer()).sentiment == neg:
          return 'negative'
        return 'positive'
    except:
        return None

df_test['algo_sentiment'] = df_test['cleaned_tweets'].apply(sentiment_algo)

The new colum is indeed created, but returns always either everything positive or everything negative. I've runned some tests and cannot find a solution.

Andrej Kesely
  • 168,389
  • 15
  • 48
  • 91
P40l0
  • 33
  • 3

1 Answers1

2

The sentiment property returns a named tuple of (classification, p_pos, p_neg):

>>> TextBlob('love peace', analyzer=NaiveBayesAnalyzer()).sentiment
Sentiment(classification='pos', p_pos=0.700187151810585, p_neg=0.2998128481894153)

So change the function to test sentiment.classification:

def sentiment_algo(text):
    try:
        sentiment = TextBlob(text, analyzer=NaiveBayesAnalyzer()).sentiment
        return 'positive' if sentiment.classification == 'pos' else 'negative'
    except:
        return None

Toy example:

df_test = pd.DataFrame({'cleaned_tweets': ['love peace', 'worst day ever']})
df_test['algo_sentiment'] = df_test['cleaned_tweets'].apply(sentiment_algo)

#    cleaned_tweets  algo_sentiment
# 0      love peace        positive
# 1  worst day ever        negative
tdy
  • 36,675
  • 19
  • 86
  • 83