
`]c        ;   @   s  d  Z  d d l Z d d l Z d d l Z d d l m Z d d l Z d d l m	 Z	 d Z
 d Z d Z d	 Z e j d
 j e j e j    Z d d d d d d d d d d d d d d d d d g Z d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV h; Z iB e
 dW 6e
 dX 6e
 dY 6e
 dZ 6e
 d[ 6e
 d\ 6e
 d] 6e
 d^ 6e
 d_ 6e
 d` 6e
 da 6e
 db 6e
 dc 6e
 dd 6e
 de 6e
 df 6e
 dg 6e
 dh 6e
 di 6e
 dj 6e
 dk 6e
 dl 6e
 dm 6e
 dn 6e
 do 6e
 dp 6e
 dq 6e
 dr 6e
 ds 6e
 dt 6e
 du 6e
 dv 6e
 dw 6e
 dx 6e
 dy 6e
 dz 6e
 d{ 6e
 d| 6e
 d} 6e
 d~ 6e
 d 6e
 d 6e
 d 6e
 d 6e
 d 6e
 d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6e d 6Z i d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z e d  Z d d  Z d   Z d   Z d e f d     YZ d e f d     YZ d S(   s  
If you use the VADER sentiment analysis tools, please cite:

Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for
Sentiment Analysis of Social Media Text. Eighth International Conference on
Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014.
iN(   t   producti   (   t   pairwisegn?gnҿg~jt?gGzs   [{0}]t   .t   !t   ?t   ,t   ;t   :t   -t   's   "s   !!s   !!!s   ??s   ???s   ?!?s   !?!s   ?!?!s   !?!?t   aintt   arentt   cannott   cantt   couldntt   darentt   didntt   doesnts   ain'ts   aren'ts   can'ts   couldn'ts   daren'ts   didn'ts   doesn'tt   dontt   hadntt   hasntt   haventt   isntt   mightntt   mustntt   neithers   don'ts   hadn'ts   hasn'ts   haven'ts   isn'ts   mightn'ts   mustn'tt   neednts   needn'tt   nevert   nonet   nopet   nort   nott   nothingt   nowheret   oughtntt   shantt   shouldntt   uhuht   wasntt   werents   oughtn'ts   shan'ts	   shouldn'ts   uh-uhs   wasn'ts   weren'tt   withoutt   wontt   wouldnts   won'ts   wouldn'tt   rarelyt   seldomt   despitet
   absolutelyt	   amazinglyt   awfullyt
   completelyt   considerablyt	   decidedlyt   deeplyt   effingt
   enormouslyt   entirelyt
   especiallyt   exceptionallyt	   extremelyt
   fabulouslyt   flippingt   flippint   frickingt   frickint   friggingt   friggint   fullyt   fuckingt   greatlyt   hellat   highlyt   hugelyt
   incrediblyt	   intenselyt   majorlyt   moret   mostt   particularlyt   purelyt   quitet   reallyt
   remarkablyt   sot   substantiallyt
   thoroughlyt   totallyt   tremendouslyt   ubert   unbelievablyt	   unusuallyt   utterlyt   veryt   almostt   barelyt   hardlys   just enoughs   kind oft   kindat   kindofs   kind-oft   lesst   littlet
   marginallyt   occasionallyt   partlyt   scarcelyt   slightlyt   somewhats   sort oft   sortat   sortofs   sort-ofi   s   the shits   the bombg      ?s   bad assis
   yeah righti   s   cut the mustardg      s   kiss of deaths   hand to mouthc            s   t    t   f d   |  D  r& t S| rI t d   |  D  rI t Sn  xB t |   D]4 \ } } | j   d k rV | j   d k rV t SqV Wt S(   s4   
    Determine if input contains negation words
    c         3   s!   |  ] } | j      k Vq d  S(   N(   t   lower(   t   .0t   word(   t	   neg_words(    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pys	   <genexpr>   s    c         s   s!   |  ] } d  | j    k Vq d S(   s   n'tN(   Rk   (   Rl   Rm   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pys	   <genexpr>   s    t   leastt   at(   t   NEGATEt   anyt   TrueR   Rk   t   False(   t   input_wordst
   include_ntt   firstt   second(    (   Rn   s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   negated   s    $i   c         C   s   |  t  j |  |  |  } | S(   sp   
    Normalize the score to be between -1 and 1 using an alpha that
    approximates the max expected value
    (   t   matht   sqrt(   t   scoret   alphat
   norm_score(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt	   normalize   s    c         C   su   t  } d } x' |  D] } | j   r | d 7} q q Wt |   | } d | k  oc t |   k  n rq t } n  | S(   s   
    Check whether just some words in the input are ALL CAPS

    :param list words: The words to inspect
    :returns: `True` if some but not all items in `words` are ALL CAPS
    i    i   (   Rt   t   isuppert   lenRs   (   t   wordst   is_differentt   allcap_wordsRm   t   cap_differential(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   allcap_differential   s    "	c         C   s   d } |  j    } | t k r| t | } | d k  rA | d 9} n  |  j   r| | r| | d k rl | t 7} qy | t 8} q| n  | S(   s\   
    Check if the preceding words increase, decrease, or negate/nullify the
    valence
    g        i    i(   Rk   t   BOOSTER_DICTR   t   C_INCR(   Rm   t   valencet   is_cap_difft   scalart
   word_lower(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   scalar_inc_dec  s    
t	   SentiTextc           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   sL   
    Identify sentiment-relevant string-level properties of input text.
    c         C   sU   t  | t  s' t | j d   } n  | |  _ |  j   |  _ t |  j  |  _ d  S(   Ns   utf-8(   t
   isinstancet   strt   encodet   textt   _words_and_emoticonst   words_and_emoticonsR   R   (   t   selfR   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   __init__  s
    	c         C   s   t  j d |  j  } | j   } t d   | D  } d   t t |  D } d   t | t  D } | } | j |  | S(   st   
        Returns mapping of form:
        {
            'cat,': 'cat',
            ',cat': 'cat',
        }
        t    c         s   s'   |  ] } t  |  d  k r | Vq d S(   i   N(   R   (   Rl   t   w(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pys	   <genexpr>/  s    c         S   s&   i  |  ] } | d  d j  |   q S(   i   R   (   t   join(   Rl   t   p(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pys
   <dictcomp>1  s   	 c         S   s&   i  |  ] } | d  d j  |   q S(   i    R   (   R   (   Rl   R   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pys
   <dictcomp>2  s   	 (   t   REGEX_REMOVE_PUNCTUATIONt   subR   t   splitt   setR    t	   PUNC_LISTt   update(   R   t   no_punc_textt
   words_onlyt   punc_beforet
   punc_aftert   words_punc_dict(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   _words_plus_punc#  s    c         C   s   |  j  j   } |  j   } g  | D] } t |  d k r" | ^ q" } x7 t |  D]) \ } } | | k rS | | | | <qS qS W| S(   s   
        Removes leading and trailing puncutation
        Leaves contractions and most emoticons
            Does not preserve punc-plus-letter emoticons (e.g. :D)
        i   (   R   R   R   R   t	   enumerate(   R   t   wesR   t   wet   i(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR   7  s    +(   t   __name__t
   __module__t   __doc__R   R   R   (    (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR     s   			t   SentimentIntensityAnalyzerc           B   s   e  Z d  Z d d  Z d   Z d   Z d   Z d   Z d   Z d   Z	 d	   Z
 d
   Z d   Z d   Z d   Z d   Z RS(   s8   
    Give a sentiment intensity score to sentences.
    s;   sentiment/vader_lexicon.zip/vader_lexicon/vader_lexicon.txtc         C   s(   t  j j |  |  _ |  j   |  _ d  S(   N(   t   nltkt   datat   loadt   lexicon_filet   make_lex_dictt   lexicon(   R   R   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR   K  s    c         C   sY   i  } xL |  j  j d  D]8 } | j   j d  d d !\ } } t |  | | <q W| S(   s6   
        Convert lexicon file to a dictionary
        s   
s   	i    i   (   R   R   t   stript   float(   R   t   lex_dictt   lineRm   t   measure(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR   Q  s
    "c         C   s   t  |  } g  } | j } x | D] } d } | j |  } | t |  d k  r | j   d k r | | d j   d k s | j   t k r | j |  q" n  |  j | | | | |  } q" W|  j | |  } |  j	 | |  S(   s   
        Return a float for sentiment strength based on the input text.
        Positive values are positive valence, negative value are negative
        valence.
        i    i   t   kindt   of(
   R   R   t   indexR   Rk   R   t   appendt   sentiment_valencet
   _but_checkt   score_valence(   R   R   t	   sentitextt
   sentimentsR   t   itemR   R   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   polarity_scores[  s    	c         C   s  | j  } | j } | j   } | |  j k r|  j | } | j   rr | rr | d k re | t 7} qr | t 8} n  x t d d  D] }	 | |	 k r | | |	 d j   |  j k r t | | |	 d | |  }
 |	 d k r |
 d k r |
 d }
 n  |	 d k r|
 d k r|
 d }
 n  | |
 } |  j | | |	 |  } |	 d k rf|  j	 | | |  } qfq q W|  j
 | | |  } n  | j |  | S(   Ni    i   i   gffffff?i   g?(   R   R   Rk   R   R   R   t   rangeR   t   _never_checkt   _idioms_checkt   _least_checkR   (   R   R   R   R   R   R   R   R   t   item_lowercaset   start_it   s(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR   w  s6    		
	c         C   s   | d k r | | d j    |  j k r | | d j    d k r | | d j    d k r | | d j    d k r | t } q nP | d k r | | d j    |  j k r | | d j    d k r | t } n  | S(   Ni   Ro   i   Rp   R[   i    (   Rk   R   t   N_SCALAR(   R   R   R   R   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR     s    c         C   s   d | k s d | k r y | j  d  } Wn  t k
 rM | j  d  } n Xx | D]u } | j  |  } | | k  r | j |  | j | | d  qU | | k rU | j |  | j | | d  qU qU Wn  | S(   Nt   butt   BUTg      ?g      ?(   R   t
   ValueErrort   popt   insert(   R   R   R   t   bit	   sentimentt   si(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR     s    c         C   s  d j  | | d | |  } d j  | | d | | d | |  } d j  | | d | | d  } d j  | | d | | d | | d  } d j  | | d | | d  } | | | | | g }	 x( |	 D]  }
 |
 t k r t |
 } Pq q Wt |  d | k rHd j  | | | | d  } | t k rHt | } qHn  t |  d | d k rd j  | | | | d | | d  } | t k rt | } qn  | t k s| t k r| t } n  | S(   Ns   {0} {1}i   s   {0} {1} {2}i   i   (   t   formatt   SPECIAL_CASE_IDIOMSR   R   t   B_DECR(   R   R   R   R   t   onezerot
   twoonezerot   twoonet   threetwoonet   threetwot	   sequencest   seqt   zeroonet
   zeroonetwo(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR     sB    
c         C   s_  | d k r3 t  | | d g  r3 | t } q3 n  | d k r | | d d k r | | d d k s{ | | d d k r | d } q t  | | | d g  r | t } q n  | d k r[| | d d k r | | d d k s#| | d d k s#| | d d k s#| | d d k r0| d	 } q[t  | | | d g  r[| t } q[n  | S(
   Ni    i   i   R   RR   t   thisg      ?i   g      ?(   Ry   R   (   R   R   R   R   R   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR      s(    c         C   s,   |  j  |  } |  j |  } | | } | S(   N(   t   _amplify_ept   _amplify_qm(   R   t   sum_sR   t   ep_amplifiert   qm_amplifiert   punct_emph_amplifier(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   _punctuation_emphasis  s    
c         C   s2   | j  d  } | d k r$ d } n  | d } | S(   NR   i   g㥛 ?(   t   count(   R   R   t   ep_countR   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR   $  s
    	
c         C   sG   | j  d  } d } | d k rC | d k r: | d } qC d } n  | S(   NR   i    i   i   g
ףp=
?gQ?(   R   (   R   R   t   qm_countR   (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR   .  s    	c         C   s   d } d } d } xm | D]e } | d k rB | t  |  d 7} n  | d k  re | t  |  d 7} n  | d k r | d 7} q q W| | | f S(   Ng        i    i   (   R   (   R   R   t   pos_sumt   neg_sumt	   neu_countt   sentiment_score(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   _sift_sentiment_scores;  s    c         C   sy  | rt  t |   } |  j | |  } | d k rC | | 7} n | d k  r\ | | 8} n  t |  } |  j |  \ } } } | t j |  k r | | 7} n" | t j |  k  r | | 8} n  | t j |  | }	 t j | |	  }
 t j | |	  } t j | |	  } n d } d }
 d } d } i t | d  d 6t | d  d 6t |
 d  d 6t | d  d 6} | S(	   Ni    g        i   t   negt   neut   posi   t   compound(   R   t   sumR   R   R   Rz   t   fabst   round(   R   R   R   R   R   R   R   R   R   t   totalR   R   R   t   sentiment_dict(    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR   M  s6    (   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyR   F  s   	
		2			2			
		(   R   Rz   t   ret   stringt	   itertoolsR    t	   nltk.dataR   t   utilR   t   B_INCRR   R   R   t   compileR   t   escapet   punctuationR   R   Rq   R   R   Rs   Ry   R   R   R   t   objectR   R   (    (    (    s3   lib/python2.7/site-packages/nltk/sentiment/vader.pyt   <module>   sP  $		

			1