Compute Sentiment Measures¶

In [1]:
import pandas as pd
import numpy as np
import os, re, multiprocessing
import dask.dataframe as dd
In [2]:
import nltk
nltk.download('punkt')
nltk.download('punkt_tab')
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize
[nltk_data] Downloading package punkt to
[nltk_data]     C:\Users\rache\AppData\Roaming\nltk_data...
[nltk_data]   Package punkt is already up-to-date!
[nltk_data] Downloading package punkt_tab to
[nltk_data]     C:\Users\rache\AppData\Roaming\nltk_data...
[nltk_data]   Package punkt_tab is already up-to-date!
In [3]:
%matplotlib inline 
%load_ext autoreload
%autoreload 2
In [4]:
pd.set_option('display.memory_usage', 'deep')
pd.set_option('display.precision', 2) 
pd.set_option('display.width', 200)
pd.set_option('display.max_rows', 300)
pd.set_option('display.max_columns', None)
pd.set_option('display.max_colwidth', 80)
pd.options.display.float_format = '{:,.4f}'.format
In [5]:
from filepath_03 import * # change to reflect input and output file path 
In [6]:
complong = pd.read_pickle(filepath_complong)
In [7]:
LM_dictionary = pd.read_csv(filepath_LMdict)
In [8]:
Fin_Neg = LM_dictionary[LM_dictionary.Negative > 0]['Word'].str.lower()
Fin_Pos = LM_dictionary[LM_dictionary.Positive > 0]['Word'].str.lower()
In [9]:
def neg_count(text):
    wordlist = word_tokenize(text)
    count = 0
    for word in wordlist:
        if word in Fin_Neg.tolist():
            count+=1
    return count
        
def pos_count(text):
    wordlist = word_tokenize(text)
    count = 0
    for word in wordlist:
        if word in Fin_Pos.tolist():
            count+=1
    return count
In [10]:
%%time
ddf = dd.from_pandas(complong, npartitions=(multiprocessing.cpu_count()-1)*1)
meta_df = pd.Series(dtype=int)
complong['pos_ct'] = ddf.apply(lambda x: pos_count(x['text']), axis=1, meta=meta_df).compute(scheduler="multiprocessing")
complong['neg_ct'] = ddf.apply(lambda x: neg_count(x['text']), axis=1, meta=meta_df).compute(scheduler="multiprocessing")
CPU times: total: 1min 57s
Wall time: 6h 34min 42s
In [11]:
complong['pos_pct'] = complong['pos_ct'] / complong['nwords'] 
complong['neg_pct'] = complong['neg_ct'] / complong['nwords']
complong['sentiment'] = (complong['pos_ct'] - complong['neg_ct']) / complong['nwords']
In [12]:
cols = ['transcriptid','section','seq', 
        'pos_ct', 'neg_ct', 'nwords',
        'pos_pct', 'neg_pct', 'sentiment']
complong2 = complong[cols].copy()
In [13]:
complong2.to_pickle(outputpath_compsent)
In [ ]: