Emotion classification using NRC Lexicon in Python

Many a time, for real-world projects, emotion recognition is often just the start of the project. That time writing a whole code on that will not only increase time but also efficiency is hindered. 

NRCLexicon is an MIT-approved pypi project by Mark M. Bailey which predicts the sentiments and emotion of a given text. The package contains approximately 27,000 words and is based on the National Research Council Canada (NRC) affect lexicon and the NLTK library’s WordNet synonym sets.

Installation:

To install this module type the below command in the terminal.

pip install NRCLex

Even after the installation of this module, MissingCorpusError may occur while running programs. So it is advised to also install textblob.download_corpora by using the below command on the command prompt.

python -m textblob.download_corpora

Approach:



  • Import the module

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Import required modules
from nrclex import NRCLex

chevron_right


  • Assign input text

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Assinging list of words
text = ['hate', 'lovely', 'person', 'worst']

chevron_right


  • Create NRCLex object for each input text.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

for i in range(len(text)):
    
    # creating objects
    emotion = NRCLex(text[i])

chevron_right


  • Apply methods to classify emotions.
Sr. Method Description
1 emotion.words  Return words list.
2 emotion.sentences Return sentences list.
3 emotion.affect_list Return affect list.
4 emotion.affect_dict Return affect dictionary.
5 emotion.raw_emotion_scores Return raw emotional counts.
6 emotion.top_emotions Return highest emotions.
7 emotion.affect_frequencies Return affect frequencies.
  • Emotional affects measured include the following:
  1. fear
  2. anger
  3. anticipation
  4. trust
  5. surprise
  6. positive
  7. negative
  8. sadness
  9. disgust
  10. joy

Below is the Implementation.

Example 1:

Based on the above approach, the below example classifies various emotions using top_emotions.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Import module
from nrclex import NRCLex
  
# Assign list of strings
text = ['hate', 'lovely', 'person', 'worst']
  
# Iterate through list
for i in range(len(text)):
  
    # Create object
    emotion = NRCLex(text[i])
  
    # Classify emotion
    print('\n\n', text[i], ': ', emotion.top_emotions)

chevron_right


Output:



Example 2:

Here a single emotion love is classified using all the methods of NCRLex module.

Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Import module
from nrclex import NRCLex
  
# Assign emotion
text = 'love'
  
# Create object
emotion = NRCLex(text)
  
# Using methods to classigy emotion
print('\n', emotion.words)
print('\n', emotion.sentences)
print('\n', emotion.affect_list)
print('\n', emotion.affect_dict)
print('\n', emotion.raw_emotion_scores)
print('\n', emotion.top_emotions)
print('\n', emotion.affect_frequencies)

chevron_right


Output:


Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.