From 6c4c91718ad8ae49435ea26679a526e845fbf0e1 Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Mon, 11 Dec 2017 12:22:19 +0100 Subject: [PATCH 1/9] Add multilang support, fixes #104 --- README.md | 21 +- build/AFINN-en-165.txt | 3382 -------------------- build/AFINN.json | 1 - build/build.js | 33 +- build/build.json | 4151 ------------------------- build/emoji.json | 769 +++++ lib/helper.js | 23 + lib/index.js | 26 +- package-lock.json | 5 +- package.json | 3 + test/integration/async_inject.js | 14 + test/integration/async_lang.js | 14 + test/integration/async_lang_inject.js | 14 + test/integration/sync_lang.js | 14 + test/integration/sync_lang_inject.js | 14 + 15 files changed, 911 insertions(+), 7573 deletions(-) delete mode 100644 build/AFINN-en-165.txt delete mode 100644 build/AFINN.json delete mode 100644 build/build.json create mode 100644 build/emoji.json create mode 100644 lib/helper.js create mode 100644 test/integration/async_inject.js create mode 100644 test/integration/async_lang.js create mode 100644 test/integration/async_lang_inject.js create mode 100644 test/integration/sync_lang.js create mode 100644 test/integration/sync_lang_inject.js diff --git a/README.md b/README.md index fa94ed7..2293f65 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,19 @@ var r2 = sentiment('Cats are totally amazing!'); console.dir(r2); // Score: 4, Comparative: 1 ``` +### Usage with multiple languages +English language ('en') is set as a default option when no other parameter is set. +```javascript +var r3 = sentiment('Katzen sind dumm.', 'de'); +console.dir(r3); // Score: -2, Comparative: -0.6666666666666666, + +var r4 = sentiment('El gato es estรบpido.', 'es'); +console.dir(r4); // Score: -2, Comparative: -0.5, + +var r5 = sentiment('Le chat est stupide.', 'fr'); +console.dir(r5); // Score: -2, Comparative: -0.5, +``` + ### Adding / overwriting words You can append and/or overwrite values from AFINN by simply injecting key/value pairs into a sentiment method call: ```javascript @@ -42,7 +55,7 @@ console.dir(result); // Score: 7, Comparative: 1.75 --- ### How it works -#### AFINN +#### AFINN AFINN is a list of words rated for valence with an integer between minus five (negative) and plus five (positive). Sentiment analysis is performed by cross-checking the string tokens(words, emojis) with the AFINN list and getting their respective scores. The comparative score is simply: `sum of each token / number of tokens`. So for example let's take the following: `I love cats, but I am allergic to them.` @@ -80,10 +93,10 @@ That string results in the following: * __Score__: Score calculated by adding the sentiment values of recongnized words. * __Comparative__: Comparative score of the input string. * __Token__: All the tokens like words or emojis found in the input string. - * __Words__: List of words from input string that were found in AFINN list. + * __Words__: List of words from input string that were found in AFINN list. * __Positive__: List of postive words in input string that were found in AFINN list. * __Negative__: List of negative words in input string that were found in AFINN list. - + In this case, love has a value of 3, allergic has a value of -2, and the remaining tokens are neutral with a value of 0. Because the string has 9 tokens the resulting comparative score looks like: `(3 + -2) / 9 = 0.111111111` @@ -95,7 +108,7 @@ This approach leaves you with a mid-point of 0 and the upper and lower bounds ar ``` #### Tokenization -Tokenization works by splitting the lines of input string, then removing the special characters, and finally splitting it using spaces. This is used to get list of words in the string. +Tokenization works by splitting the lines of input string, then removing the special characters, and finally splitting it using spaces. This is used to get list of words in the string. --- diff --git a/build/AFINN-en-165.txt b/build/AFINN-en-165.txt deleted file mode 100644 index 8f2daac..0000000 --- a/build/AFINN-en-165.txt +++ /dev/null @@ -1,3382 +0,0 @@ -abandon -2 -abandoned -2 -abandons -2 -abducted -2 -abduction -2 -abductions -2 -abhor -3 -abhorred -3 -abhorrent -3 -abhors -3 -abilities 2 -ability 2 -aboard 1 -aborted -1 -aborts -1 -absentee -1 -absentees -1 -absolve 2 -absolved 2 -absolves 2 -absolving 2 -absorbed 1 -abuse -3 -abused -3 -abuses -3 -abusing -3 -abusive -3 -accept 1 -acceptable 1 -acceptance 1 -accepted 1 -accepting 1 -accepts 1 -accessible 1 -accident -2 -accidental -2 -accidentally -2 -accidents -2 -acclaim 2 -acclaimed 2 -accolade 2 -accomplish 2 -accomplished 2 -accomplishes 2 -accomplishment 2 -accomplishments 2 -accusation -2 -accusations -2 -accuse -2 -accused -2 -accuses -2 -accusing -2 -ache -2 -achievable 1 -aching -2 -acquit 2 -acquits 2 -acquitted 2 -acquitting 2 -acrimonious -3 -active 1 -adequate 1 -admire 3 -admired 3 -admires 3 -admiring 3 -admit -1 -admits -1 -admitted -1 -admonish -2 -admonished -2 -adopt 1 -adopts 1 -adorable 3 -adoration 3 -adore 3 -adored 3 -adores 3 -adoring 3 -adoringly 3 -advanced 1 -advantage 2 -advantageous 2 -advantageously 2 -advantages 2 -adventure 2 -adventures 2 -adventurous 2 -adversary -1 -advisable 1 -affected -1 -affection 3 -affectionate 3 -affectionateness 3 -afflicted -1 -affordable 2 -affronted -1 -aficionados 2 -afraid -2 -aggravate -2 -aggravated -2 -aggravates -2 -aggravating -2 -aggression -2 -aggressions -2 -aggressive -2 -aggressiveness -2 -aghast -2 -agog 2 -agonise -3 -agonised -3 -agonises -3 -agonising -3 -agonize -3 -agonized -3 -agonizes -3 -agonizing -3 -agree 1 -agreeable 2 -agreed 1 -agreement 1 -agrees 1 -alarm -2 -alarmed -2 -alarmist -2 -alarmists -2 -alas -1 -alert -1 -alienation -2 -alive 1 -allegation -2 -allegations -2 -allergic -2 -allow 1 -ally 2 -alone -2 -altruistic 2 -amaze 2 -amazed 2 -amazes 2 -amazing 4 -ambitious 2 -ambivalent -1 -amicable 2 -amuse 3 -amused 3 -amusement 3 -amusements 3 -anger -3 -angered -3 -angers -3 -angry -3 -anguish -3 -anguished -3 -animosity -2 -annoy -2 -annoyance -2 -annoyed -2 -annoying -2 -annoys -2 -antagonistic -2 -anti -1 -anticipation 1 -anxiety -2 -anxious -2 -apathetic -3 -apathy -3 -apeshit -3 -apocalyptic -2 -apologise -1 -apologised -1 -apologises -1 -apologising -1 -apologize -1 -apologized -1 -apologizes -1 -apologizing -1 -apology -1 -appalled -2 -appalling -2 -appealing 2 -appease 2 -appeased 2 -appeases 2 -appeasing 2 -applaud 2 -applauded 2 -applauding 2 -applauds 2 -applause 2 -appreciate 2 -appreciated 2 -appreciates 2 -appreciating 2 -appreciation 2 -apprehensive -2 -appropriate 2 -appropriately 2 -approval 2 -approved 2 -approves 2 -ardent 1 -arrest -2 -arrested -3 -arrests -2 -arrogant -2 -arsehole -4 -ashame -2 -ashamed -2 -ass -4 -assassination -3 -assassinations -3 -assault -2 -assaults -2 -asset 2 -assets 2 -assfucking -4 -asshole -4 -astonished 2 -astound 3 -astounded 3 -astounding 3 -astoundingly 3 -astounds 3 -atrocious -3 -atrocity -3 -attack -1 -attacked -1 -attacking -1 -attacks -1 -attract 1 -attracted 1 -attracting 2 -attraction 2 -attractions 2 -attractive 2 -attractively 2 -attractiveness 2 -attracts 1 -audacious 3 -aura 1 -authority 1 -avenge -2 -avenged -2 -avenger -2 -avengers -2 -avenges -2 -avenging -2 -avert -1 -averted -1 -averts -1 -avid 2 -avoid -1 -avoided -1 -avoids -1 -await -1 -awaited -1 -awaits -1 -award 3 -awarded 3 -awards 3 -awesome 4 -awful -3 -awkward -2 -axe -1 -axed -1 -backed 1 -backing 2 -backs 1 -bad -3 -bad luck -2 -badass -3 -badly -3 -badness -3 -bailout -2 -balanced 1 -bamboozle -2 -bamboozled -2 -bamboozles -2 -ban -2 -banish -1 -bankrupt -3 -bankruptcy -3 -bankster -3 -banned -2 -barbarian -2 -barbaric -2 -barbarous -2 -bargain 2 -barrier -2 -bastard -5 -bastards -5 -battle -1 -battled -1 -battles -1 -battling -2 -beaten -2 -beatific 3 -beating -1 -beauties 3 -beautiful 3 -beautifully 3 -beautify 3 -beauty 3 -befit 2 -befitting 2 -belittle -2 -belittled -2 -beloved 3 -benefactor 2 -benefactors 2 -benefit 2 -benefits 2 -benefitted 2 -benefitting 2 -benevolent 3 -bereave -2 -bereaved -2 -bereaves -2 -bereaving -2 -best 3 -best damn 4 -betray -3 -betrayal -3 -betrayed -3 -betraying -3 -betrays -3 -better 2 -bias -1 -biased -2 -big 1 -bitch -5 -bitches -5 -bitter -2 -bitterest -2 -bitterly -2 -bizarre -2 -blackmail -3 -blackmailed -3 -blackmailing -3 -blackmails -3 -blah -2 -blame -2 -blamed -2 -blames -2 -blaming -2 -bless 2 -blesses 2 -blessing 3 -blessings 3 -blind -1 -bliss 3 -blissful 3 -blithe 2 -bloated -1 -block -1 -blockade -2 -blockbuster 3 -blocked -1 -blocking -1 -blocks -1 -bloody -3 -blurry -2 -boastful -2 -bold 2 -boldly 2 -bomb -1 -boost 1 -boosted 1 -boosting 1 -boosts 1 -bore -2 -bored -2 -boring -3 -bother -2 -bothered -2 -bothers -2 -bothersome -2 -boycott -2 -boycotted -2 -boycotting -2 -boycotts -2 -brainwashing -3 -brave 2 -braveness 2 -bravery 2 -bravura 3 -breach -2 -breached -2 -breaches -2 -breaching -2 -breakthrough 3 -breathtaking 5 -bribe -3 -bribed -3 -bribes -3 -bribing -3 -bright 1 -brightest 2 -brightness 1 -brilliant 4 -brilliance 3 -brilliances 3 -brisk 2 -broke -1 -broken -1 -brooding -2 -brutal -3 -brutally -3 -bullied -2 -bullshit -4 -bully -2 -bullying -2 -bummer -2 -buoyant 2 -burden -2 -burdened -2 -burdening -2 -burdens -2 -burglar -2 -burglary -2 -calm 2 -calmed 2 -calming 2 -calms 2 -can't stand -3 -cancel -1 -cancelled -1 -cancelling -1 -cancels -1 -cancer -1 -capabilities 1 -capability 1 -capable 1 -captivated 3 -care 2 -carefree 1 -careful 2 -carefully 2 -carefulness 2 -careless -2 -cares 2 -caring 2 -cashing in -2 -casualty -2 -catastrophe -3 -catastrophic -4 -cautious -1 -celebrate 3 -celebrated 3 -celebrates 3 -celebrating 3 -celebration 3 -celebrations 3 -censor -2 -censored -2 -censors -2 -certain 1 -chagrin -2 -chagrined -2 -challenge -1 -champion 2 -championed 2 -champions 2 -chance 2 -chances 2 -chaos -2 -chaotic -2 -charged -3 -charges -2 -charisma 2 -charitable 2 -charm 3 -charming 3 -charmingly 3 -charmless -3 -chastise -3 -chastised -3 -chastises -3 -chastising -3 -cheat -3 -cheated -3 -cheater -3 -cheaters -3 -cheating -3 -cheats -3 -cheer 2 -cheered 2 -cheerful 2 -cheerfully 2 -cheering 2 -cheerless -2 -cheers 2 -cheery 3 -cherish 2 -cherished 2 -cherishes 2 -cherishing 2 -chic 2 -chide -3 -chided -3 -chides -3 -chiding -3 -childish -2 -chilling -1 -choke -2 -choked -2 -chokes -2 -choking -2 -clarifies 2 -clarity 2 -clash -2 -classy 3 -clean 2 -cleaner 2 -clear 1 -cleared 1 -clearly 1 -clears 1 -clever 2 -clouded -1 -clueless -2 -cock -5 -cocksucker -5 -cocksuckers -5 -cocky -2 -coerced -2 -coercion -2 -collapse -2 -collapsed -2 -collapses -2 -collapsing -2 -collide -1 -collides -1 -colliding -1 -collision -2 -collisions -2 -colluding -3 -combat -1 -combats -1 -comedy 1 -comfort 2 -comfortable 2 -comfortably 2 -comforting 2 -comforts 2 -comic 1 -commend 2 -commended 2 -commit 1 -commitment 2 -commits 1 -committed 1 -committing 1 -compassion 2 -compassionate 2 -compelled 1 -competencies 1 -competent 2 -competitive 2 -complacent -2 -complain -2 -complained -2 -complaining -2 -complains -2 -complaint -2 -complaints -2 -complicating -2 -compliment 2 -complimented 2 -compliments 2 -comprehensive 2 -concerned -2 -conciliate 2 -conciliated 2 -conciliates 2 -conciliating 2 -condemn -2 -condemnation -2 -condemned -2 -condemns -2 -confidence 2 -confident 2 -confidently 2 -conflict -2 -conflicting -2 -conflictive -2 -conflicts -2 -confuse -2 -confused -2 -confusing -2 -congrats 2 -congratulate 2 -congratulation 2 -congratulations 2 -consent 2 -consents 2 -consolable 2 -conspiracy -3 -constipation -2 -constrained -2 -contagion -2 -contagions -2 -contagious -1 -contaminant -2 -contaminants -2 -contaminate -2 -contaminated -2 -contaminates -2 -contaminating -2 -contamination -2 -contaminations -2 -contempt -2 -contemptible -2 -contemptuous -2 -contemptuously -2 -contend -1 -contender -1 -contending -1 -contentious -2 -contestable -2 -controversial -2 -controversially -2 -controversies -2 -controversy -2 -convicted -2 -convince 1 -convinced 1 -convinces 1 -convivial 2 -cool 1 -cool stuff 3 -cornered -2 -corpse -1 -corrupt -3 -corrupted -3 -corrupting -3 -corruption -3 -corrupts -3 -costly -2 -courage 2 -courageous 2 -courageously 2 -courageousness 2 -courteous 2 -courtesy 2 -cover-up -3 -coward -2 -cowardly -2 -coziness 2 -cramp -1 -crap -3 -crappy -3 -crash -2 -crazier -2 -craziest -2 -crazy -2 -creative 2 -crestfallen -2 -cried -2 -cries -2 -crime -3 -crimes -3 -criminal -3 -criminals -3 -criminate -3 -criminated -3 -criminates -3 -crisis -3 -critic -2 -criticise -2 -criticised -2 -criticises -2 -criticising -2 -criticism -2 -criticize -2 -criticized -2 -criticizes -2 -criticizing -2 -critics -2 -critique -2 -crowding -1 -crude -1 -cruel -3 -cruelty -3 -crush -1 -crushed -2 -crushes -1 -crushing -1 -cry -1 -crying -2 -cunning 2 -cunt -5 -curious 1 -curse -1 -cut -1 -cutback -2 -cutbacks -2 -cute 2 -cuts -1 -cutting -1 -cynic -2 -cynical -2 -cynicism -2 -damage -3 -damaged -3 -damages -3 -damaging -3 -damn -2 -damn cute 3 -damn good 4 -damned -4 -damnit -4 -danger -2 -dangerous -2 -dangerously -2 -daredevil 2 -daring 2 -darkest -2 -darkness -1 -dauntless 2 -dazzling 3 -dead -3 -deadening -2 -deadlock -2 -deadly -3 -deafening -1 -dear 2 -dearly 3 -death -2 -deaths -2 -debonair 2 -debt -2 -deceit -3 -deceitful -3 -deceive -3 -deceived -3 -deceives -3 -deceiving -3 -deception -3 -deceptive -3 -decisive 1 -dedicated 2 -dedication 2 -defeat -2 -defeated -2 -defect -3 -defective -3 -defects -3 -defender 2 -defenders 2 -defenseless -2 -defer -1 -deferring -1 -defiant -1 -deficient -2 -deficiency -2 -deficiencies -2 -deficit -2 -deformed -2 -deformities -2 -deformity -2 -defraud -3 -defrauds -3 -deft 2 -defunct -2 -degrade -2 -degraded -2 -degrades -2 -dehumanize -2 -dehumanized -2 -dehumanizes -2 -dehumanizing -2 -deject -2 -dejected -2 -dejecting -2 -dejects -2 -delay -1 -delayed -1 -delectable 3 -delicious 3 -delight 3 -delighted 3 -delightful 3 -delightfully 3 -delighting 3 -delights 3 -demand -1 -demanded -1 -demanding -1 -demands -1 -demonstration -1 -demoralize -2 -demoralized -2 -demoralizes -2 -demoralizing -2 -denial -2 -denials -2 -denied -2 -denier -2 -deniers -2 -denies -2 -denounce -2 -denounces -2 -dent -2 -deny -2 -denying -2 -deplore -3 -deplored -3 -deplores -3 -deploring -3 -deport -2 -deported -2 -deporting -2 -deports -2 -deportation -2 -deportations -2 -depressed -2 -depressing -2 -deprivation -3 -derail -2 -derailed -2 -derails -2 -derelict -2 -deride -2 -derided -2 -derides -2 -deriding -2 -derision -2 -desirable 2 -desire 1 -desired 2 -desirous 2 -despair -3 -despairing -3 -despairs -3 -desperate -3 -desperately -3 -despondent -3 -destroy -3 -destroyed -3 -destroying -3 -destroys -3 -destruction -3 -destructive -3 -detached -1 -detain -2 -detained -2 -detention -2 -deteriorate -2 -deteriorated -2 -deteriorates -2 -deteriorating -2 -determined 2 -deterrent -2 -detract -1 -detracted -1 -detracts -1 -devastate -2 -devastated -2 -devastating -2 -devastation -2 -devastations -2 -devoted 3 -devotion 2 -devotional 2 -diamond 1 -dick -4 -dickhead -4 -die -3 -died -3 -difficult -1 -diffident -2 -dignity 2 -dilemma -1 -dilligence 2 -dipshit -3 -dire -3 -direful -3 -dirt -2 -dirtier -2 -dirtiest -2 -dirty -2 -disabilities -2 -disability -2 -disabling -1 -disadvantage -2 -disadvantaged -2 -disagree -2 -disagreeable -2 -disagreement -2 -disappear -1 -disappeared -1 -disappears -1 -disappoint -2 -disappointed -2 -disappointing -2 -disappointment -2 -disappointments -2 -disappoints -2 -disapproval -2 -disapprovals -2 -disapprove -2 -disapproved -2 -disapproves -2 -disapproving -2 -disaster -2 -disasters -2 -disastrous -3 -disbelieve -2 -discard -1 -discarded -1 -discarding -1 -discards -1 -discernment 2 -discomfort -2 -disconsolate -2 -disconsolation -2 -discontented -2 -discord -2 -discounted -1 -discouraged -2 -discredited -2 -discriminate -2 -discriminated -2 -discriminates -2 -discriminating -2 -discriminatory -2 -disdain -2 -disease -1 -diseases -1 -disgrace -2 -disgraced -2 -disguise -1 -disguised -1 -disguises -1 -disguising -1 -disgust -3 -disgusted -3 -disgustful -3 -disgusting -3 -disheartened -2 -dishonest -2 -disillusioned -2 -disinclined -2 -disjointed -2 -dislike -2 -disliked -2 -dislikes -2 -dismal -2 -dismayed -2 -dismissed -2 -disorder -2 -disorders -2 -disorganized -2 -disoriented -2 -disparage -2 -disparaged -2 -disparages -2 -disparaging -2 -displeased -2 -displeasure -2 -disproportionate -2 -dispute -2 -disputed -2 -disputes -2 -disputing -2 -disqualified -2 -disquiet -2 -disregard -2 -disregarded -2 -disregarding -2 -disregards -2 -disrespect -2 -disrespected -2 -disrupt -2 -disrupted -2 -disrupting -2 -disruption -2 -disruptions -2 -disruptive -2 -disrupts -2 -dissatisfied -2 -distasteful -2 -distinguished 2 -distort -2 -distorted -2 -distorting -2 -distorts -2 -distract -2 -distracted -2 -distraction -2 -distracts -2 -distress -2 -distressed -2 -distresses -2 -distressing -2 -distrust -3 -distrustful -3 -disturb -2 -disturbed -2 -disturbing -2 -disturbs -2 -dithering -2 -diverting -1 -dizzy -1 -dodging -2 -dodgy -2 -does not work -3 -dolorous -2 -donate 2 -donated 2 -donates 2 -donating 2 -donation 2 -dont like -2 -doom -2 -doomed -2 -doubt -1 -doubted -1 -doubtful -1 -doubting -1 -doubts -1 -douche -3 -douchebag -3 -dour -2 -downcast -2 -downer -2 -downhearted -2 -downside -2 -drag -1 -dragged -1 -drags -1 -drained -2 -dread -2 -dreaded -2 -dreadful -3 -dreading -2 -dream 1 -dreams 1 -dreary -2 -droopy -2 -drop -1 -dropped -1 -drown -2 -drowned -2 -drowns -2 -drudgery -2 -drunk -2 -dubious -2 -dud -2 -dull -2 -dumb -3 -dumbass -3 -dump -1 -dumped -2 -dumps -1 -dupe -2 -duped -2 -dupery -2 -durable 2 -dying -3 -dysfunction -2 -eager 2 -earnest 2 -ease 2 -easy 1 -ecstatic 4 -eerie -2 -eery -2 -effective 2 -effectively 2 -effectiveness 2 -effortlessly 2 -elated 3 -elation 3 -elegant 2 -elegantly 2 -embarrass -2 -embarrassed -2 -embarrasses -2 -embarrassing -2 -embarrassment -2 -embezzlement -3 -embittered -2 -embrace 1 -emergency -2 -empathetic 2 -empower 2 -empowerment 2 -emptiness -1 -empty -1 -enchanted 2 -encourage 2 -encouraged 2 -encouragement 2 -encourages 2 -encouraging 2 -endorse 2 -endorsed 2 -endorsement 2 -endorses 2 -enemies -2 -enemy -2 -energetic 2 -engage 1 -engages 1 -engrossed 1 -engrossing 3 -enjoy 2 -enjoyable 2 -enjoyed 2 -enjoying 2 -enjoys 2 -enlighten 2 -enlightened 2 -enlightening 2 -enlightens 2 -ennui -2 -enrage -2 -enraged -2 -enrages -2 -enraging -2 -enrapture 3 -enslave -2 -enslaved -2 -enslaves -2 -ensure 1 -ensuring 1 -enterprising 1 -entertaining 2 -enthral 3 -enthusiastic 3 -entitled 1 -entrusted 2 -envies -1 -envious -2 -environment-friendly 2 -envy -1 -envying -1 -erroneous -2 -error -2 -errors -2 -escape -1 -escapes -1 -escaping -1 -esteem 2 -esteemed 2 -ethical 2 -euphoria 3 -euphoric 4 -evacuate -1 -evacuated -1 -evacuates -1 -evacuating -1 -evacuation -1 -evergreen 2 -evergreens 2 -evergreening -3 -eviction -1 -evil -3 -exacerbate -2 -exacerbated -2 -exacerbates -2 -exacerbating -2 -exaggerate -2 -exaggerated -2 -exaggerates -2 -exaggerating -2 -exasparate -2 -exasperated -2 -exasperates -2 -exasperating -2 -excellence 3 -excellent 3 -excite 3 -excited 3 -excitement 3 -exciting 3 -exclude -1 -excluded -2 -exclusion -1 -exclusive 2 -excruciatingly -1 -excuse -1 -exempt -1 -exhausted -2 -exhilarated 3 -exhilarates 3 -exhilarating 3 -exonerate 2 -exonerated 2 -exonerates 2 -exonerating 2 -expand 1 -expands 1 -expel -2 -expelled -2 -expelling -2 -expels -2 -expertly 2 -exploit -2 -exploited -2 -exploiting -2 -exploits -2 -exploration 1 -explorations 1 -expose -1 -exposed -1 -exposes -1 -exposing -1 -exquisite 3 -extend 1 -extends 1 -extremist -2 -extremists -2 -exuberant 4 -exultant 3 -exultantly 3 -fabulous 4 -fabulously 4 -fad -2 -fag -3 -faggot -3 -faggots -3 -fail -2 -failed -2 -failing -2 -fails -2 -failure -2 -failures -2 -fainthearted -2 -fair 2 -fairness 2 -faith 1 -faithful 3 -fake -3 -faker -3 -fakes -3 -faking -3 -fallen -2 -falling -1 -false -1 -falsely -2 -falsified -3 -falsify -3 -fame 1 -famine -2 -famous 2 -fan 3 -fantastic 4 -farce -1 -fascinate 3 -fascinated 3 -fascinates 3 -fascinating 3 -fascination 3 -fascist -2 -fascists -2 -fatal -3 -fatalities -3 -fatality -3 -fatigue -2 -fatigued -2 -fatigues -2 -fatiguing -2 -favor 2 -favorable 2 -favorably 2 -favored 2 -favorite 2 -favorited 2 -favorites 2 -favors 2 -favour 2 -favourable 2 -favourably 2 -favoured 2 -favourite 2 -favourited 2 -favourites 2 -favours 2 -fear -2 -fearful -2 -fearfully -2 -fearing -2 -fearless 2 -fearlessness 2 -fearsome -2 -fed up -3 -feeble -2 -feeling 1 -felonies -3 -felony -3 -fertile 2 -fervent 2 -fervid 2 -festive 2 -fever -2 -fiasco -3 -fidgety -2 -fight -1 -fighting -2 -fine 2 -fines -2 -finest 3 -fire -2 -fired -2 -firing -2 -fit 1 -fitness 1 -filth -2 -filthy -2 -flagship 2 -flaw -2 -flawed -3 -flawless 2 -flawlessly 2 -flaws -2 -flees -1 -flop -2 -flops -2 -flu -2 -flustered -2 -focused 2 -fond 2 -fondness 2 -fool -2 -foolish -2 -fools -2 -forbid -1 -forbidden -2 -forbidding -2 -forced -1 -foreclosure -2 -foreclosures -2 -forefront 1 -forget -1 -forgetful -2 -forgettable -1 -forgive 1 -forgiving 1 -forgot -1 -forgotten -1 -fortune 2 -fortunate 2 -fortunately 2 -foul -3 -frantic -1 -fraud -4 -frauds -4 -fraudster -4 -fraudsters -4 -fraudulence -4 -fraudulent -4 -freak -2 -free 1 -freedom 2 -freedoms 2 -frenzy -3 -fresh 1 -friend 1 -friendliness 2 -friendly 2 -friendship 2 -fright -2 -frightened -2 -frightening -3 -frikin -2 -frisky 2 -frowning -1 -fruitless -2 -frustrate -2 -frustrated -2 -frustrates -2 -frustrating -2 -frustration -2 -ftw 3 -fuck -4 -fucked -4 -fucker -4 -fuckers -4 -fuckface -4 -fuckhead -4 -fuckin -4 -fucking -4 -fucking amazing 4 -fucking beautiful 4 -fucking cute 4 -fucking fantastic 4 -fucking good 4 -fucking great 4 -fucking hot 2 -fucking love 4 -fucking loves 4 -fucking perfect 4 -fucktard -4 -fud -3 -fuked -4 -fuking -4 -fulfill 2 -fulfilled 2 -fulfillment 2 -fulfills 2 -fuming -2 -fun 4 -funeral -1 -funerals -1 -funky 2 -funnier 4 -funny 4 -furious -3 -futile -2 -gag -2 -gagged -2 -gain 2 -gained 2 -gaining 2 -gains 2 -gallant 3 -gallantly 3 -gallantry 3 -game-changing 3 -garbage -1 -gem 3 -generous 2 -generously 2 -genial 3 -ghastly -2 -ghost -1 -giddy -2 -gift 2 -glad 3 -glamorous 3 -glamourous 3 -glee 3 -gleeful 3 -gloom -1 -gloomy -2 -glorious 2 -glory 2 -glum -2 -god 1 -goddamn -3 -godsend 4 -gold 2 -good 3 -goodlooking 3 -goodmorning 1 -goodness 3 -goodwill 3 -goofiness -2 -goofy -2 -grace 1 -graceful 2 -gracious 3 -grand 3 -grant 1 -granted 1 -granting 1 -grants 1 -grateful 3 -gratification 2 -grave -2 -gray -1 -grisly -2 -gr8 3 -great 3 -greater 3 -greatest 3 -greed -3 -greedy -2 -green wash -3 -green washing -3 -greenwash -3 -greenwasher -3 -greenwashers -3 -greenwashing -3 -greet 1 -greeted 1 -greeting 1 -greetings 2 -greets 1 -grey -1 -grief -2 -grieved -2 -grim -2 -gripping 2 -groan -2 -groaned -2 -groaning -2 -groans -2 -gross -2 -growing 1 -growth 2 -growths 2 -gruesome -3 -guarantee 1 -guilt -3 -guilty -3 -gullibility -2 -gullible -2 -gun -1 -ha 2 -hacked -1 -haha 3 -hahaha 3 -hahahah 3 -hail 2 -hailed 2 -hallelujah 3 -handpicked 1 -handsome 3 -hapless -2 -haplessness -2 -happiest 3 -happiness 3 -happy 3 -harass -3 -harassed -3 -harasses -3 -harassing -3 -harassment -3 -hard -1 -hardier 2 -hardship -2 -hardy 2 -harm -2 -harmed -2 -harmful -2 -harming -2 -harmony 2 -harmonious 2 -harmoniously 2 -harms -2 -harried -2 -harsh -2 -harsher -2 -harshest -2 -harshly -2 -hate -3 -hated -3 -hater -3 -haters -3 -hates -3 -hating -3 -hatred -3 -haunt -1 -haunted -2 -haunting 1 -haunts -1 -havoc -2 -hazardous -3 -headache -2 -healthy 2 -heartbreaking -3 -heartbroken -3 -heartfelt 3 -heartless -2 -heartwarming 3 -heaven 2 -heavenly 4 -heavyhearted -2 -hehe 2 -hell -4 -hellish -2 -help 2 -helpful 2 -helping 2 -helpless -2 -helps 2 -hero 2 -heroes 2 -heroic 3 -hesitant -2 -hesitate -2 -hid -1 -hide -1 -hideous -3 -hides -1 -hiding -1 -highlight 2 -hilarious 2 -hinder -2 -hindrance -2 -hoax -2 -hollow -1 -homeless -2 -homesick -2 -homicide -2 -homicides -2 -honest 2 -honor 2 -honored 2 -honoring 2 -honour 2 -honoured 2 -honouring 2 -hooligan -2 -hooliganism -2 -hooligans -2 -hope 2 -hopeful 2 -hopefully 2 -hopeless -2 -hopelessness -2 -hopes 2 -hoping 2 -horrendous -3 -horrid -3 -horrible -3 -horrific -3 -horrified -3 -hospitalized -2 -hostile -2 -huckster -2 -hug 2 -huge 1 -hugs 2 -humane 2 -humble 1 -humbug -2 -humerous 3 -humiliated -3 -humiliation -3 -humor 2 -humorous 2 -humour 2 -humourous 2 -hunger -2 -hurrah 5 -hurt -2 -hurting -2 -hurts -2 -hypocritical -2 -hysteria -3 -hysterical -3 -hysterics -3 -icky -3 -idiocy -3 -idiot -3 -idiotic -3 -ignorance -2 -ignorant -2 -ignore -1 -ignored -2 -ignores -1 -ill -2 -ill-fated -2 -illegal -3 -illegally -3 -illegitimate -3 -illiteracy -2 -illness -2 -illnesses -2 -illogical -2 -imaginative 2 -imbecile -3 -immobilized -1 -immortal 2 -immune 1 -impair -2 -impaired -2 -impairing -2 -impairment -2 -impairs -2 -impatient -2 -impeachment -3 -impeachments -3 -impede -2 -impeded -2 -impedes -2 -impeding -2 -impedingly -2 -imperfect -2 -importance 2 -important 2 -impose -1 -imposed -1 -imposes -1 -imposing -1 -imposter -2 -impotent -2 -impress 3 -impressed 3 -impresses 3 -impressive 3 -imprisoned -2 -imprisonment -2 -improper -2 -improperly -2 -improve 2 -improved 2 -improvement 2 -improves 2 -improving 2 -inability -2 -inaction -2 -inadequate -2 -inadvertently -2 -inappropriate -2 -incapable -2 -incapacitated -2 -incapacitates -2 -incapacitating -2 -incense -2 -incensed -2 -incenses -2 -incensing -2 -incoherent -2 -incompetence -2 -incompetent -2 -incomplete -1 -incomprehensible -2 -inconsiderate -2 -inconvenience -2 -inconvenient -2 -increase 1 -increased 1 -indecisive -2 -indestructible 2 -indicted -2 -indifference -2 -indifferent -2 -indignant -2 -indignation -2 -indoctrinate -2 -indoctrinated -2 -indoctrinates -2 -indoctrinating -2 -inediable -2 -inexorable -3 -inexcusable -3 -ineffective -2 -ineffectively -2 -ineffectual -2 -inefficiency -2 -inefficient -2 -inefficiently -2 -inept -2 -ineptitude -2 -infantile -2 -infantilized -2 -infatuated 2 -infatuation 2 -infect -2 -infected -2 -infecting -2 -infection -2 -infections -2 -infectious -2 -infects -2 -inferior -2 -infest -2 -infested -2 -infesting -2 -infests -2 -inflamed -2 -inflict -2 -inflicted -2 -inflicting -2 -inflicts -2 -influential 2 -infract -2 -infracted -2 -infracting -2 -infracts -2 -infringement -2 -infuriate -2 -infuriated -2 -infuriates -2 -infuriating -2 -inhibit -1 -inhuman -2 -injured -2 -injuries -2 -injury -2 -injustice -2 -innovate 1 -innovates 1 -innovation 1 -innovative 2 -inoperative -2 -inquisition -2 -inquisitive 2 -insane -2 -insanity -2 -insecure -2 -insensitive -2 -insensitivity -2 -insignificant -2 -insipid -2 -insolvent -2 -insomnia -2 -inspiration 2 -inspirational 2 -inspire 2 -inspired 2 -inspires 2 -inspiring 3 -insufficiency -2 -insufficient -2 -insufficiently -2 -insult -2 -insulted -2 -insulting -2 -insults -2 -intact 2 -integrity 2 -intelligent 2 -intense 1 -interest 1 -interested 2 -interesting 2 -interests 1 -interrogated -2 -interrupt -2 -interrupted -2 -interrupting -2 -interruption -2 -interrupts -2 -intimacy 2 -intimidate -2 -intimidated -2 -intimidates -2 -intimidating -2 -intimidation -2 -intransigence -2 -intransigency -2 -intricate 2 -intrigues 1 -invasion -1 -invincible 2 -invite 1 -inviting 1 -invulnerable 2 -irate -3 -ironic -1 -irony -1 -irrational -1 -irreparable -2 -irreproducible -2 -irresistible 2 -irresistibly 2 -irresolute -2 -irresponsible -2 -irresponsibly -2 -irreversible -1 -irreversibly -1 -irritate -3 -irritated -3 -irritates -3 -irritating -3 -isolated -1 -itchy -2 -jackass -4 -jackasses -4 -jailed -2 -jaunty 2 -jealous -2 -jealousy -2 -jeopardy -2 -jerk -3 -jesus 1 -jewel 1 -jewels 1 -jocular 2 -join 1 -joke 2 -jokes 2 -jolly 2 -jovial 2 -joy 3 -joyful 3 -joyfully 3 -joyless -2 -joyous 3 -jubilant 3 -jumpy -1 -justice 2 -justifiably 2 -justified 2 -keen 1 -kickback -3 -kickbacks -3 -kidnap -2 -kidnapped -2 -kidnapping -2 -kidnappings -2 -kidnaps -2 -kill -3 -killed -3 -killing -3 -kills -3 -kind 2 -kind of 0 -kinder 2 -kindness 2 -kiss 2 -kudos 3 -lack -2 -lackadaisical -2 -lag -1 -lagged -2 -lagging -2 -lags -2 -lame -2 -landmark 2 -lapse -1 -lapsed -1 -laugh 1 -laughed 1 -laughing 1 -laughs 1 -laughting 1 -launched 1 -lawl 3 -lawsuit -2 -lawsuits -2 -lazy -1 -leadership 1 -leading 2 -leak -1 -leaked -1 -leave -1 -legal 1 -legally 1 -lenient 1 -lethal -2 -lethality -2 -lethargic -2 -lethargy -2 -liar -3 -liars -3 -libelous -2 -lied -2 -lifeless -1 -lifesaver 4 -lighthearted 1 -likable 2 -like 2 -likeable 2 -liked 2 -likers 2 -likes 2 -liking 2 -limitation -1 -limited -1 -limits -1 -litigation -1 -litigious -2 -lively 2 -livid -2 -lmao 4 -lmfao 4 -loathe -3 -loathed -3 -loathes -3 -loathing -3 -loathsome -3 -lobbied -2 -lobby -2 -lobbying -2 -lobbyist -2 -lobbyists -2 -lol 3 -lolol 4 -lololol 4 -lolololol 4 -lonely -2 -lonesome -2 -longing -1 -lool 3 -loom -1 -loomed -1 -looming -1 -looms -1 -loool 3 -looool 3 -loose -3 -looses -3 -loser -3 -losing -3 -loss -3 -losses -3 -lost -3 -lousy -2 -lovable 3 -love 3 -loved 3 -lovelies 3 -lovely 3 -loves 3 -loving 2 -loving-kindness 3 -lowest -1 -loyal 3 -loyalty 3 -luck 3 -luckily 3 -lucky 3 -lucrative 3 -ludicrous -3 -lugubrious -2 -lunatic -3 -lunatics -3 -lurk -1 -lurking -1 -lurks -1 -luxury 2 -macabre -2 -mad -3 -maddening -3 -made-up -1 -madly -3 -madness -3 -magnificent 3 -maladaption -2 -maldevelopment -2 -maltreatment -2 -mandatory -1 -manipulated -1 -manipulating -1 -manipulation -1 -manslaughter -3 -marvel 3 -marvelous 3 -marvels 3 -masterpiece 4 -masterpieces 4 -matter 1 -matters 1 -mature 2 -meaningful 2 -meaningless -2 -medal 3 -mediocrity -3 -meditative 1 -melancholy -2 -memorable 1 -memoriam -2 -menace -2 -menaced -2 -menaces -2 -mercy 2 -merry 3 -mesmerizing 3 -mess -2 -messed -2 -messing up -2 -methodical 2 -methodically 2 -mindless -2 -miracle 4 -mirth 3 -mirthful 3 -mirthfully 3 -misbehave -2 -misbehaved -2 -misbehaves -2 -misbehaving -2 -misbranding -3 -miscast -2 -mischief -1 -mischiefs -1 -misclassified -2 -misclassifies -2 -misclassify -2 -misconduct -2 -misconducted -2 -misconducting -2 -misconducts -2 -miserable -3 -miserably -3 -misery -2 -misfire -2 -misfortune -2 -misgiving -2 -misinformation -2 -misinformed -2 -misinterpreted -2 -mislead -3 -misleaded -3 -misleading -3 -misleads -3 -misplace -2 -misplaced -2 -misplaces -2 -misplacing -2 -mispricing -3 -misread -1 -misreport -2 -misreported -2 -misreporting -2 -misreports -2 -misrepresent -2 -misrepresentation -2 -misrepresentations -2 -misrepresented -2 -misrepresenting -2 -misrepresents -2 -miss -2 -missed -2 -missing -2 -mistake -2 -mistaken -2 -mistakes -2 -mistaking -2 -misunderstand -2 -misunderstanding -2 -misunderstands -2 -misunderstood -2 -misuse -2 -misused -2 -misuses -2 -misusing -2 -moan -2 -moaned -2 -moaning -2 -moans -2 -mock -2 -mocked -2 -mocking -2 -mocks -2 -modernize 2 -modernized 2 -modernizes 2 -modernizing 2 -mongering -2 -monopolize -2 -monopolized -2 -monopolizes -2 -monopolizing -2 -monotone -1 -moody -1 -mope -1 -moping -1 -moron -3 -motherfucker -5 -motherfucking -5 -motivate 1 -motivated 2 -motivating 2 -motivation 1 -mourn -2 -mourned -2 -mournful -2 -mourning -2 -mourns -2 -muddy -2 -mumpish -2 -murder -2 -murderer -2 -murdering -3 -murderous -3 -murders -2 -murky -2 -myth -1 -n00b -2 -naive -2 -narcissism -2 -nasty -3 -natural 1 -naรฏve -2 -needy -2 -negative -2 -negativity -2 -neglect -2 -neglected -2 -neglecting -2 -neglects -2 -nerves -1 -nervous -2 -nervously -2 -nice 3 -nifty 2 -niggas -5 -nigger -5 -no -1 -no fun -3 -noble 2 -noblest 2 -noisy -1 -non-approved -2 -nonsense -2 -noob -2 -nosey -2 -not good -2 -not working -3 -notable 2 -noticeable 2 -notorious -2 -novel 2 -numb -1 -nurturing 2 -nuts -3 -obliterate -2 -obliterated -2 -obnoxious -3 -obscene -2 -obscenity -2 -obsessed 2 -obsolete -2 -obstacle -2 -obstacles -2 -obstinate -2 -obstruct -2 -obstructed -2 -obstructing -2 -obstruction -2 -obstructs -2 -odd -2 -offence -2 -offences -2 -offend -2 -offended -2 -offender -2 -offending -2 -offends -2 -offense -2 -offenses -2 -offensive -2 -offensively -2 -offline -1 -oks 2 -ominous 3 -once-in-a-lifetime 3 -oops -2 -opportunities 2 -opportunity 2 -oppressed -2 -oppression -2 -oppressions -2 -oppressive -2 -optimism 2 -optimistic 2 -optionless -2 -ostracize -2 -ostracized -2 -ostracizes -2 -ouch -2 -outage -2 -outages -2 -outbreak -2 -outbreaks -2 -outcry -2 -outmaneuvered -2 -outnumbered -2 -outrage -3 -outraged -3 -outrageous -3 -outreach 2 -outstanding 5 -overjoyed 4 -overload -1 -overlooked -1 -overprotective -2 -overran -2 -overreact -2 -overreacted -2 -overreacting -2 -overreaction -2 -overreacts -2 -oversell -2 -overselling -2 -oversells -2 -oversight -1 -oversimplification -2 -oversimplified -2 -oversimplifies -2 -oversimplify -2 -oversold -2 -overstatement -2 -overstatements -2 -overweight -1 -overwrought -3 -oxymoron -1 -pain -2 -pained -2 -painful -2 -panic -3 -panicked -3 -panics -3 -paradise 3 -paradox -1 -pardon 2 -pardoned 2 -pardoning 2 -pardons 2 -parley -1 -passion 1 -passionate 2 -passive -1 -passively -1 -pathetic -2 -pay -1 -peace 2 -peaceful 2 -peacefully 2 -penalize -2 -penalized -2 -penalizes -2 -penalizing -2 -penalty -2 -pensive -1 -perfect 3 -perfected 2 -perfection 3 -perfectly 3 -perfects 2 -peril -2 -perjury -3 -perpetrated -2 -perpetrator -2 -perpetrators -2 -perplexed -2 -persecute -2 -persecuted -2 -persecutes -2 -persecuting -2 -perturbed -2 -pervert -3 -pesky -2 -pessimism -2 -pessimistic -2 -petrified -2 -philanthropy 2 -phobic -2 -picturesque 2 -pileup -1 -pillage -2 -pique -2 -piqued -2 -piss -4 -pissed -4 -pissing -3 -piteous -2 -pitied -1 -pity -2 -plague -3 -plagued -3 -plagues -3 -plaguing -3 -playful 2 -pleasant 3 -please 1 -pleased 3 -pleasurable 3 -pleasure 3 -plodding -2 -poignant 2 -pointless -2 -poised -2 -poison -2 -poisoned -2 -poisons -2 -polished 2 -polite 2 -politeness 2 -pollutant -2 -pollute -2 -polluted -2 -polluter -2 -polluters -2 -pollutes -2 -pollution -2 -poor -2 -poorer -2 -poorest -2 -poorly -2 -popular 3 -popularity 3 -positive 2 -positively 2 -possessive -2 -post-traumatic -2 -postpone -1 -postponed -1 -postpones -1 -postponing -1 -poverty -1 -powerful 2 -powerless -2 -praise 3 -praised 3 -praises 3 -praising 3 -pray 1 -praying 1 -prays 1 -prblm -2 -prblms -2 -predatory -2 -prepared 1 -pressure -1 -pressured -2 -pretend -1 -pretending -1 -pretends -1 -pretty 1 -prevent -1 -prevented -1 -preventing -1 -prevents -1 -prick -5 -prison -2 -prisoner -2 -prisoners -2 -privileged 2 -proactive 2 -problem -2 -problems -2 -profit 2 -profitable 2 -profiteer -2 -profits 2 -progress 2 -prohibit -1 -prohibits -1 -prominent 2 -promise 1 -promised 1 -promises 1 -promote 1 -promoted 1 -promotes 1 -promoting 1 -promptly 1 -propaganda -2 -prosecute -1 -prosecuted -2 -prosecutes -1 -prosecution -1 -prospect 1 -prospects 1 -prosperity 3 -prosperous 3 -protect 1 -protected 1 -protects 1 -protest -2 -protesters -2 -protesting -2 -protests -2 -proud 2 -proudly 2 -provoke -1 -provoked -1 -provokes -1 -provoking -1 -prudence 2 -pseudoscience -3 -psychopathic -2 -punish -2 -punished -2 -punishes -2 -punishing -2 -punitive -2 -pure 1 -purest 1 -purposeful 2 -pushy -1 -puzzled -2 -quaking -2 -qualities 2 -quality 2 -questionable -2 -questioned -1 -questioning -1 -racism -3 -racist -3 -racists -3 -rage -2 -rageful -2 -rainy -1 -rant -3 -ranter -3 -ranters -3 -rants -3 -rape -4 -raped -4 -rapist -4 -rapture 2 -raptured 2 -raptures 2 -rapturous 4 -rash -2 -ratified 2 -reach 1 -reached 1 -reaches 1 -reaching 1 -reassure 1 -reassured 1 -reassures 1 -reassuring 2 -rebel -2 -rebellion -2 -rebels -2 -recession -2 -reckless -2 -recognition 2 -recommend 2 -recommended 2 -recommends 2 -redeemed 2 -refine 1 -refined 1 -refines 1 -refreshingly 2 -refuse -2 -refused -2 -refuses -2 -refusing -2 -regret -2 -regretful -2 -regrets -2 -regretted -2 -regretting -2 -reigning 1 -reject -1 -rejected -1 -rejecting -1 -rejection -2 -rejects -1 -rejoice 4 -rejoiced 4 -rejoices 4 -rejoicing 4 -relaxed 2 -relentless -1 -reliability 2 -reliable 2 -reliably 2 -reliant 2 -relieve 1 -relieved 2 -relieves 1 -relieving 2 -relishing 2 -remarkable 2 -remorse -2 -repellent -2 -repercussion -2 -repercussions -2 -reprimand -2 -reprimanded -2 -reprimanding -2 -reprimands -2 -repulse -1 -repulsed -2 -repulsive -2 -rescue 2 -rescued 2 -rescues 2 -resentful -2 -resign -1 -resigned -1 -resigning -1 -resigns -1 -resolute 2 -resolution 2 -resolve 2 -resolved 2 -resolves 2 -resolving 2 -respect 2 -respected 2 -respects 2 -responsibility 1 -responsible 2 -responsive 2 -restful 2 -restless -2 -restore 1 -restored 1 -restores 1 -restoring 1 -restrict -2 -restricted -2 -restricting -2 -restriction -2 -restrictive -1 -restricts -2 -retained -1 -retard -2 -retarded -2 -retreat -1 -revenge -2 -revengeful -2 -revered 2 -revive 2 -revives 2 -revolting -2 -reward 2 -rewarded 2 -rewarding 2 -rewards 2 -rich 2 -richly 2 -ridiculous -3 -rig -1 -rigged -1 -right direction 3 -righteousness 2 -rightful 2 -rightfully 2 -rigorous 3 -rigorously 3 -riot -2 -riots -2 -rise 1 -rises 1 -risk -2 -risks -2 -risky -2 -riveting 3 -rob -2 -robber -2 -robed -2 -robing -2 -robs -2 -robust 2 -rofl 4 -roflcopter 4 -roflmao 4 -romance 2 -romantical 2 -romantically 2 -rose 1 -rotfl 4 -rotflmfao 4 -rotflol 4 -rotten -3 -rude -2 -ruin -2 -ruined -2 -ruining -2 -ruins -2 -sabotage -2 -sad -2 -sadden -2 -saddened -2 -sadly -2 -safe 1 -safely 1 -safer 2 -safety 1 -salient 1 -salute 2 -saluted 2 -salutes 2 -saluting 2 -salvation 2 -sappy -1 -sarcastic -2 -satisfied 2 -savange -2 -savanges -2 -save 2 -saved 2 -savings 1 -scam -2 -scams -2 -scandal -3 -scandalous -3 -scandals -3 -scapegoat -2 -scapegoats -2 -scare -2 -scared -2 -scar -2 -scars -2 -scary -2 -sceptical -2 -scold -2 -scoop 3 -scorn -2 -scornful -2 -scream -2 -screamed -2 -screaming -2 -screams -2 -screwed -2 -screwed up -3 -scum -3 -scumbag -4 -seamless 2 -seamlessly 2 -secure 2 -secured 2 -secures 2 -sedition -2 -seditious -2 -seduced -1 -self-abuse -2 -self-confident 2 -self-contradictory -2 -self-deluded -2 -selfish -3 -selfishness -3 -sentence -2 -sentenced -2 -sentences -2 -sentencing -2 -serene 2 -settlement 1 -settlements 1 -severe -2 -severely -2 -sexist -2 -sexistic -2 -sexy 3 -shaky -2 -shame -2 -shamed -2 -shameful -2 -share 1 -shared 1 -shares 1 -shattered -2 -shit -4 -shithead -4 -shitty -3 -shock -2 -shocked -2 -shocking -2 -shocks -2 -shoody -2 -shoot -1 -short-sighted -2 -short-sightedness -2 -shortage -2 -shortages -2 -shrew -4 -shy -1 -sick -2 -sickness -2 -side-effect -2 -side-effects -2 -sigh -2 -significance 1 -significant 1 -silencing -1 -silly -1 -simplicity 1 -sin -2 -sincere 2 -sincerely 2 -sincerest 2 -sincerity 2 -sinful -3 -singleminded -2 -sinister -2 -sins -2 -skeptic -2 -skeptical -2 -skepticism -2 -skeptics -2 -slam -2 -slash -2 -slashed -2 -slashes -2 -slashing -2 -slave -3 -slavery -3 -slaves -3 -sleeplessness -2 -slick 2 -slicker 2 -slickest 2 -slip -1 -sloppy -2 -sluggish -2 -slumping -1 -slut -5 -smart 1 -smarter 2 -smartest 2 -smear -2 -smile 2 -smiled 2 -smiles 2 -smiling 2 -smog -2 -smuggle -2 -smuggled -2 -smuggling -2 -smuggles -2 -sneaky -1 -sneeze -2 -sneezed -2 -sneezes -2 -sneezing -2 -snub -2 -snubbed -2 -snubbing -2 -snubs -2 -sobering 1 -solemn -1 -solid 2 -solidarity 2 -solidified 2 -solidifies 2 -solidify 2 -solidifying 2 -solution 1 -solutions 1 -solve 1 -solved 1 -solves 1 -solving 1 -somber -2 -some kind 0 -son-of-a-bitch -5 -soothe 3 -soothed 3 -soothing 3 -sophisticated 2 -sore -1 -sorrow -2 -sorrowful -2 -sorry -1 -spacious 1 -spam -2 -spammer -3 -spammers -3 -spamming -2 -spark 1 -sparkle 3 -sparkles 3 -sparkling 3 -spearhead 2 -speculative -2 -spirit 1 -spirited 2 -spiritless -2 -spiteful -2 -splendid 3 -spoiled -2 -spoilt -2 -spotless 2 -sprightly 2 -squander -2 -squandered -2 -squandering -2 -squanders -2 -squelched -1 -stab -2 -stabbed -2 -stable 2 -stabs -2 -stall -2 -stalled -2 -stalling -2 -stamina 2 -stampede -2 -stank -2 -startled -2 -startling 3 -starve -2 -starved -2 -starves -2 -starving -2 -steadfast 2 -steal -2 -stealing -2 -steals -2 -stereotype -2 -stereotyped -2 -stifled -1 -stimulate 1 -stimulated 1 -stimulates 1 -stimulating 2 -stingy -2 -stink -2 -stinked -2 -stinker -2 -stinking -2 -stinks -2 -stinky -2 -stole -2 -stolen -2 -stop -1 -stopped -1 -stopping -1 -stops -1 -stout 2 -straight 1 -strange -1 -strangely -1 -strangled -2 -strength 2 -strengthen 2 -strengthened 2 -strengthening 2 -strengthens 2 -strengths 2 -stress -1 -stressed -2 -stressor -2 -stressors -2 -stricken -2 -strike -1 -strikers -2 -strikes -1 -strong 2 -stronger 2 -strongest 2 -struck -1 -struggle -2 -struggled -2 -struggles -2 -struggling -2 -stubborn -2 -stuck -2 -stunned -2 -stunning 4 -stupid -2 -stupidity -3 -stupidly -2 -suave 2 -subpoena -2 -substantial 1 -substantially 1 -subversive -2 -succeed 3 -succeeded 3 -succeeding 3 -succeeds 3 -success 2 -successful 3 -successfully 3 -suck -3 -sucks -3 -sue -2 -sued -2 -sueing -2 -sues -2 -suffer -2 -suffered -2 -sufferer -2 -sufferers -2 -suffering -2 -suffers -2 -suicidal -2 -suicide -2 -suicides -2 -suing -2 -suitable 2 -suited 2 -sulking -2 -sulky -2 -sullen -2 -sunshine 2 -super 3 -superb 5 -superior 2 -support 2 -supported 2 -supporter 1 -supporters 1 -supporting 1 -supportive 2 -supports 2 -supreme 4 -survived 2 -surviving 2 -survivor 2 -suspect -1 -suspected -1 -suspecting -1 -suspects -1 -suspend -1 -suspended -1 -suspicious -2 -sustainability 1 -sustainable 2 -sustainably 2 -swear -2 -swearing -2 -swears -2 -sweet 2 -sweeter 3 -sweetest 3 -swift 2 -swiftly 2 -swindle -3 -swindles -3 -swindling -3 -sympathetic 2 -sympathy 2 -taint -2 -tainted -2 -talent 2 -tard -2 -tarnish -2 -tarnished -2 -tarnishes -2 -tears -2 -tender 2 -tenderness 2 -tense -2 -tension -1 -terrible -3 -terribly -3 -terrific 4 -terrifically 4 -terrified -3 -terror -3 -terrorist -2 -terrorists -2 -terrorize -3 -terrorized -3 -terrorizes -3 -thank 2 -thankful 2 -thanks 2 -thorny -2 -thoughtful 2 -thoughtless -2 -threat -2 -threaten -2 -threatened -2 -threatening -2 -threatens -2 -threats -2 -thrilled 5 -thwart -2 -thwarted -2 -thwarting -2 -thwarts -2 -timid -2 -timorous -2 -tired -2 -tits -2 -tolerance 2 -tolerant 2 -toothless -2 -top 2 -tops 2 -torn -2 -torture -4 -tortured -4 -tortures -4 -torturing -4 -totalitarian -2 -totalitarianism -2 -tout -2 -touted -2 -touting -2 -touts -2 -toxic -3 -tragedies -2 -tragedy -2 -tragic -2 -tranquil 2 -transgress -2 -transgressed -2 -transgresses -2 -transgressing -2 -trap -1 -trapped -2 -traps -1 -trauma -3 -traumatic -3 -travesty -2 -treason -3 -treasonous -3 -treasure 2 -treasures 2 -trembling -2 -tremor -2 -tremors -2 -tremulous -2 -tribulation -2 -tribute 2 -tricked -2 -trickery -2 -triumph 4 -triumphant 4 -troll -2 -trouble -2 -troubled -2 -troubles -2 -troubling -2 -true 2 -trust 1 -trusted 2 -trusts 1 -tumor -2 -twat -5 -tyran -3 -tyrannic -3 -tyrannical -3 -tyrannically -3 -tyrans -3 -ubiquitous 2 -ugh -2 -ugliness -3 -ugly -3 -unable -2 -unacceptable -2 -unappeasable -2 -unappreciated -2 -unapproved -2 -unattractive -2 -unavailable -1 -unavailing -2 -unaware -2 -unbearable -2 -unbelievable -1 -unbelieving -1 -unbiased 2 -uncertain -1 -unclear -1 -uncomfortable -2 -unconcerned -2 -unconfirmed -1 -unconvinced -1 -uncredited -1 -undecided -1 -undercooked -2 -underestimate -1 -underestimated -1 -underestimates -1 -underestimating -1 -undermine -2 -undermined -2 -undermines -2 -undermining -2 -underperform -2 -underperformed -2 -underperforming -2 -underperforms -2 -undeserving -2 -undesirable -2 -uneasy -2 -unemployed -1 -unemployment -2 -unequal -1 -unequaled 2 -unethical -2 -uneventful -2 -unfair -2 -unfavorable -2 -unfit -2 -unfitted -2 -unfocused -2 -unforgivable -3 -unforgiving -2 -unfulfilled -2 -unfunny -2 -ungenerous -2 -ungrateful -3 -unhappy -2 -unhappiness -2 -unhealthy -2 -unhygienic -2 -unified 1 -unimaginative -2 -unimpressed -2 -uninspired -2 -unintelligent -2 -unintentional -2 -uninvolving -2 -united 1 -unjust -2 -unlikely -1 -unlovable -2 -unloved -2 -unmatched 1 -unmotivated -2 -unoriginal -2 -unparliamentary -2 -unpleasant -2 -unpleasantness -2 -unprofessional -2 -unravel 1 -unreleting -2 -unresearched -2 -unsafe -2 -unsatisfied -2 -unscientific -2 -unsecured -2 -unselfish 2 -unsettled -1 -unsold -1 -unsophisticated -2 -unsound -2 -unstable -2 -unstoppable 2 -unsuccessful -2 -unsuccessfully -2 -unsupported -2 -unsure -1 -untarnished 2 -untrue -2 -unwanted -2 -unworthy -2 -uplifting 2 -uproar -3 -upset -2 -upsets -2 -upsetting -2 -uptight -2 -urgent -1 -useful 2 -usefulness 2 -useless -2 -uselessness -2 -vague -2 -validate 1 -validated 1 -validates 1 -validating 1 -vapid -2 -verdict -1 -verdicts -1 -vested 1 -vexation -2 -vexing -2 -vibrant 3 -vicious -2 -victim -3 -victimization -3 -victimize -3 -victimized -3 -victimizes -3 -victimizing -3 -victims -3 -victor 3 -victors 3 -victory 3 -victories 3 -vigilant 3 -vigor 3 -vile -3 -vindicate 2 -vindicated 2 -vindicates 2 -vindicating 2 -violate -2 -violated -2 -violates -2 -violating -2 -violation -2 -violations -2 -violence -3 -violence-related -3 -violent -3 -violently -3 -virtuous 2 -virulent -2 -vision 1 -visionary 3 -visioning 1 -visions 1 -vitality 3 -vitamin 1 -vitriolic -3 -vivacious 3 -vividly 2 -vociferous -1 -vomit -3 -vomited -3 -vomiting -3 -vomits -3 -vulnerability -2 -vulnerable -2 -walkout -2 -walkouts -2 -wanker -3 -want 1 -war -2 -warfare -2 -warm 1 -warmhearted 2 -warmness 2 -warmth 2 -warn -2 -warned -2 -warning -3 -warnings -3 -warns -2 -waste -1 -wasted -2 -wasting -2 -wavering -1 -weak -2 -weakened -2 -weakness -2 -weaknesses -2 -wealth 3 -wealthier 2 -wealthy 2 -weary -2 -weep -2 -weeping -2 -weird -2 -welcome 2 -welcomed 2 -welcomes 2 -well-being 2 -well-championed 3 -well-developed 2 -well-established 2 -well-focused 2 -well-groomed 2 -well-proportioned 2 -whimsical 1 -whitewash -3 -whore -4 -wicked -2 -widowed -1 -willingness 2 -win 4 -winner 4 -winning 4 -wins 4 -winwin 3 -wisdom 1 -wish 1 -wishes 1 -wishing 1 -withdrawal -3 -wits 2 -woebegone -2 -woeful -3 -won 3 -wonderful 4 -wonderfully 4 -woo 3 -woohoo 3 -wooo 4 -woow 4 -worn -1 -worried -3 -worries -3 -worry -3 -worrying -3 -worse -3 -worsen -3 -worsened -3 -worsening -3 -worsens -3 -worshiped 3 -worst -3 -worth 2 -worthless -2 -worthy 2 -wow 4 -wowow 4 -wowww 4 -wrathful -3 -wreck -2 -wrenching -2 -wrong -2 -wrongdoing -2 -wrongdoings -2 -wronged -2 -wrongful -2 -wrongfully -2 -wrongly -2 -wtf -4 -wtff -4 -wtfff -4 -xo 3 -xoxo 3 -xoxoxo 4 -xoxoxoxo 4 -yeah 1 -yearning 1 -yeees 2 -yes 1 -youthful 2 -yucky -2 -yummy 3 -zealot -2 -zealots -2 -zealous 2 diff --git a/build/AFINN.json b/build/AFINN.json deleted file mode 100644 index 6dba319..0000000 --- a/build/AFINN.json +++ /dev/null @@ -1 +0,0 @@ -{"๐Ÿ˜‚":1,"โค":3,"โ™ฅ":3,"๐Ÿ˜":3,"๐Ÿ˜ญ":-1,"๐Ÿ˜˜":3,"๐Ÿ˜Š":3,"๐Ÿ‘Œ":2,"๐Ÿ’•":3,"๐Ÿ‘":2,"๐Ÿ˜":2,"โ˜บ":3,"โ™ก":3,"๐Ÿ‘":2,"๐Ÿ˜ฉ":-2,"๐Ÿ™":2,"โœŒ":2,"๐Ÿ˜":1,"๐Ÿ˜‰":2,"๐Ÿ™Œ":2,"๐Ÿ™ˆ":2,"๐Ÿ’ช":2,"๐Ÿ˜„":2,"๐Ÿ˜’":-2,"๐Ÿ’ƒ":3,"๐Ÿ’–":3,"๐Ÿ˜ƒ":2,"๐Ÿ˜”":-1,"๐ŸŽ‰":3,"๐Ÿ˜œ":2,"๐ŸŒธ":3,"๐Ÿ’œ":3,"๐Ÿ’™":3,"โœจ":1,"๐Ÿ’—":3,"โ˜…":1,"โ–ˆ":-1,"โ˜€":2,"๐Ÿ˜ก":-1,"๐Ÿ˜Ž":2,"๐Ÿ’‹":3,"๐Ÿ˜‹":3,"๐Ÿ™Š":2,"๐Ÿ˜ด":-1,"๐ŸŽถ":2,"๐Ÿ’ž":3,"๐Ÿ˜Œ":2,"๐Ÿ”ซ":-1,"๐Ÿ’›":3,"๐Ÿ’":1,"๐Ÿ’š":3,"โ™ซ":1,"๐Ÿ˜ž":-1,"๐Ÿ˜†":2,"๐Ÿ˜":2,"๐Ÿ˜ช":-1,"๐Ÿ˜ซ":-1,"๐Ÿ‘Š":1,"๐Ÿ’€":-2,"๐Ÿ˜€":2,"๐Ÿ˜š":3,"๐Ÿ˜ป":3,"๐Ÿ’˜":3,"โ˜•":1,"๐Ÿ‘‹":2,"๐ŸŽŠ":3,"๐Ÿ•":2,"โ„":2,"๐Ÿ˜•":-2,"๐Ÿ’”":-1,"๐Ÿ˜ค":-2,"๐Ÿ˜ˆ":1,"โœˆ":2,"๐Ÿ”":2,"๐Ÿ˜ฐ":-1,"โšฝ":3,"๐Ÿ˜‘":-2,"๐Ÿ‘‘":3,"๐Ÿ‘‰":1,"๐Ÿƒ":1,"๐ŸŽ":3,"๐Ÿ˜ ":-2,"๐Ÿง":2,"โ˜†":2,"๐Ÿ€":1,"๐ŸŽˆ":3,"๐ŸŽ…":1,"๐Ÿ˜“":-1,"๐Ÿ˜ฃ":-2,"๐Ÿ˜":-2,"โœŠ":2,"๐Ÿ˜จ":-1,"๐Ÿ˜–":-1,"๐Ÿ’ค":1,"๐Ÿ’“":3,"๐Ÿ‘Ž":-1,"๐Ÿ’ฆ":2,"โœ”":1,"๐Ÿ˜ท":-1,"๐Ÿ™‹":2,"๐ŸŽ„":2,"๐Ÿ’ฉ":-1,"๐ŸŽต":2,"๐Ÿ˜›":3,"๐Ÿ‘ฏ":2,"๐Ÿ’Ž":2,"๐ŸŒฟ":1,"๐ŸŽ‚":3,"๐ŸŒŸ":1,"๐Ÿ”ฎ":1,"๐Ÿ‘ซ":1,"๐Ÿ†":3,"โœ–":1,"โ˜":1,"๐Ÿ˜™":3,"โ›„":2,"๐Ÿ‘…":2,"โ™ช":2,"๐Ÿ‚":2,"๐Ÿ’":1,"๐ŸŒด":2,"๐Ÿ‘ˆ":2,"๐ŸŒน":3,"๐Ÿ™†":2,"๐Ÿ‘ป":1,"๐Ÿ’ฐ":1,"๐Ÿป":2,"๐Ÿ™…":-2,"๐ŸŒž":2,"๐Ÿ":2,"โญ":2,"โ–ช":1,"๐ŸŽ€":3,"๐Ÿท":1,"๐Ÿ™‰":1,"๐ŸŒบ":2,"๐Ÿ’…":1,"๐Ÿถ":2,"๐ŸŒš":2,"๐Ÿ‘ฝ":1,"๐ŸŽค":2,"๐Ÿ‘ญ":2,"๐ŸŽง":2,"๐Ÿ‘†":1,"๐Ÿธ":2,"๐Ÿท":2,"ยฎ":1,"๐Ÿ‰":3,"๐Ÿ˜‡":3,"๐Ÿƒ":2,"๐Ÿ˜ฟ":-2,"โ”‚":1,"๐Ÿบ":2,"โ–ถ":1,"๐Ÿ˜ฒ":-1,"๐ŸŽธ":2,"๐Ÿน":3,"๐Ÿ’ซ":2,"๐Ÿ“š":1,"๐Ÿ˜ถ":-1,"๐ŸŒท":2,"๐Ÿ’":3,"๐Ÿ’จ":1,"๐Ÿˆ":2,"๐Ÿ’":2,"โ˜”":1,"๐Ÿ‘ธ":3,"๐Ÿ‡ช":3,"โ–‘":-1,"๐Ÿฉ":1,"๐Ÿ‘พ":1,"โ˜":1,"๐ŸŒป":2,"โ†ฟ":3,"๐Ÿฏ":2,"๐Ÿ‘ผ":1,"๐Ÿ”":1,"๐Ÿ˜ธ":2,"๐Ÿ‘ถ":2,"โ†พ":3,"๐Ÿ’":3,"๐ŸŒŠ":2,"๐Ÿฆ":2,"๐Ÿ“":3,"๐Ÿ‘‡":1,"๐Ÿ’†":1,"๐Ÿด":2,"๐Ÿ˜ง":-1,"๐Ÿ‡ธ":2,"๐Ÿ˜ฎ":1,"๐Ÿšซ":-3,"๐Ÿ˜ฝ":2,"๐ŸŒˆ":2,"๐Ÿ™€":1,"โš ":-1,"๐ŸŽฎ":2,"โ•ฏ":-1,"๐Ÿ†":2,"๐Ÿฐ":2,"โœ“":1,"๐Ÿ‘":-1,"๐ŸŸ":1,"๐ŸŒ":2,"๐Ÿ’‘":3,"๐Ÿ‘ฌ":-1,"๐Ÿฃ":2,"๐ŸŽƒ":3,"โ–ฌ":2,"๏ฟผ":-3,"๐Ÿพ":3,"๐ŸŽ“":2,"๐ŸŠ":2,"๐Ÿ“ท":2,"๐Ÿ‘„":2,"๐ŸŒผ":4,"๐Ÿšถ":-1,"๐Ÿฑ":2,"๐Ÿธ":-1,"๐Ÿ‡บ":2,"๐Ÿ‘ฟ":-3,"๐Ÿšฌ":2,"โœฟ":1,"๐Ÿ’":2,"๐ŸŒ":3,"โ”Š":5,"๐Ÿฅ":3,"๐Ÿผ":1,"๐ŸŽฅ":1,"๐Ÿ’„":2,"โ›”":2,"๐Ÿ€":1,"๐Ÿ’‰":1,"๐Ÿ’Ÿ":3,"๐Ÿš—":1,"๐Ÿ“":1,"โ™ฆ":2,"๐Ÿ’ญ":1,"๐ŸŒ™":3,"๐ŸŸ":3,"๐Ÿ‘ฃ":1,"โœ‚":-3,"๐Ÿ—ฟ":2,"๐Ÿ‘ช":-1,"๐Ÿญ":1,"๐ŸŒƒ":2,"โŒ":1,"๐Ÿฐ":3,"๐Ÿ’Š":2,"๐Ÿšจ":3,"๐Ÿ˜ฆ":-2,"๐Ÿช":1,"๐Ÿฃ":-2,"โœง":1,"๐ŸŽ†":3,"๐ŸŽŽ":4,"๐Ÿ‡ฉ":3,"โœ…":2,"๐Ÿ“ฑ":1,"๐Ÿ™":-2,"๐Ÿ‘":1,"๐ŸŽผ":1,"๐Ÿ”Š":2,"๐ŸŒŒ":2,"๐ŸŽ":1,"๐Ÿป":2,"โ•ฐ":-1,"๐Ÿ’‡":1,"โ™ฌ":1,"๐Ÿ”ด":2,"๐Ÿฑ":-2,"๐ŸŠ":2,"๐Ÿ’":1,"๐Ÿญ":3,"๐Ÿ‘Ÿ":2,"๐ŸŒŽ":1,"๐Ÿ":2,"๐Ÿฎ":3,"๐Ÿ“ฒ":1,"โ˜ผ":1,"๐ŸŒ…":1,"๐Ÿ‡ท":3,"๐Ÿ‘ ":1,"๐ŸŒฝ":2,"๐Ÿ’ง":-1,"๐Ÿฌ":1,"๐Ÿ˜บ":2,"๐Ÿš€":2,"ยฆ":3,"๐Ÿ’ข":1,"๐ŸŽฌ":1,"๐Ÿง":1,"๐Ÿœ":2,"๐Ÿ":3,"๐Ÿ„":2,"โžค":1,"โฌ†":1,"๐Ÿ‹":1,"๐Ÿ†—":2,"โšช":2,"๐Ÿ“บ":2,"๐Ÿ…":1,"โ›…":2,"๐Ÿข":1,"๐Ÿ‘™":2,"๐Ÿก":2,"๐ŸŒพ":2,"โ—‰":1,"โœ":1,"๐Ÿฌ":2,"๐Ÿ‡น":3,"โ™ฃ":1,"๐Ÿ":1,"๐ŸŒ":1,"๐Ÿ‡ฎ":3,"๐Ÿ”‹":-3,"๐Ÿ":1,"โ™”":2,"๐Ÿ”ต":1,"๐Ÿ˜พ":-2,"๐ŸŒ•":3,"๐Ÿจ":2,"๐Ÿ”":1,"๐Ÿ’ฟ":3,"๐ŸŒณ":2,"๐Ÿ‘ฐ":2,"โ€":2,"โš“":3,"๐Ÿšด":3,"โ–€":-1,"๐Ÿ‘—":1,"โž•":2,"๐Ÿ’ฌ":2,"โ–’":-1,"๐Ÿ”œ":1,"๐Ÿจ":1,"๐Ÿ’ฒ":1,"๐Ÿ™":1,"๐Ÿฅ":-4,"โ–ธ":1,"โ™›":1,"๐Ÿ˜ผ":1,"๐Ÿ™":2,"๐Ÿ‘จ":2,"๐Ÿš":2,"โ™จ":4,"๐ŸŽน":1,"โ™•":2,"โ–ƒ":5,"๐Ÿ‡ฌ":1,"๐Ÿ‡ง":1,"โ˜ ":-1,"๐Ÿ ":2,"๐Ÿšน":3,"๐Ÿ’ต":2,"โœฐ":4,"โ• ":1,"๐Ÿ‘›":2,"๐ŸŒฑ":3,"๐Ÿ’ป":1,"๐ŸŒ":1,"โ–„":-1,"๐Ÿ‘“":1,"โ—„":1,"โšพ":-1,"๐ŸŒฒ":2,"๐Ÿ‘ด":1,"๐Ÿ ":2,"๐Ÿ‡":1,"๐Ÿ˜":2,"๐Ÿ‡":1,"๐Ÿ”ž":-1,"๐Ÿ‘ต":2,"โ—€":1,"๐Ÿ”™":1,"๐ŸŒต":1,"๐Ÿฎ":-1,"๐ŸŽ‡":3,"๐ŸŽ":2,"โž”":-1,"๐Ÿค":2,"โ•ฉ":1,"๐ŸŒ‘":2,"๐Ÿšฒ":2,"๐Ÿ‘":-1,"๐Ÿ":2,"๐ŸŽพ":3,"โ•š":1,"๐Ÿˆน":1,"๐Ÿ‘ฎ":-2,"โ˜น":-3,"๐Ÿต":2,"โœช":1,"โ—•":2,"๐Ÿ—ผ":3,"โ–":-1,"โ™ ":1,"โ”ณ":-2,"๐Ÿ‘บ":-2,"๐Ÿš":1,"๐Ÿ‘‚":-1,"๐Ÿ—ฝ":1,"๐Ÿต":2,"๐Ÿ†’":2,"๐Ÿบ":1,"โ‡จ":2,"๐ŸŒ“":3,"๐Ÿ”’":1,"โ•ฌ":-1,"๐Ÿ‘ณ":3,"๐ŸŒ‚":1,"๐ŸšŒ":1,"โ™ฉ":3,"๐Ÿก":-1,"โฅ":1,"๐ŸŽก":1,"๐Ÿ’Œ":2,"๐Ÿฉ":2,"๐ŸŒœ":2,"โŒš":1,"๐Ÿšฟ":3,"๐Ÿ”†":3,"๐ŸŒ›":3,"๐Ÿ’‚":-1,"๐Ÿ”":1,"๐Ÿ™Ž":-1,"๐Ÿฉ":2,"๐Ÿ‡ซ":2,"๐Ÿ”จ":-1,"๐Ÿ“ข":2,"๐Ÿฆ":2,"๐Ÿฒ":-1,"โ™ป":2,"๐ŸŒ˜":3,"๐ŸŒ”":3,"๐Ÿ‘–":2,"๐Ÿ˜—":3,"๐Ÿ„":1,"โ—Ÿ":-1,"๐Ÿข":-1,"๐ŸŽจ":1,"โฌ‡":2,"๐Ÿšผ":3,"๐Ÿ‡ด":2,"๐ŸŒ—":3,"๐ŸŒ–":3,"๐Ÿ”…":5,"๐Ÿ‘œ":1,"๐ŸŒ":3,"๐Ÿ’ผ":3,"๐Ÿน":1,"๐ŸŒ ":3,"๐Ÿˆ":1,"๐ŸŒ":1,"โšซ":1,"โ™ง":2,"๐Ÿฐ":1,"๐Ÿšต":2,"๐ŸŽข":2,"๐ŸŽท":3,"๐ŸŽ":1,"โ”ˆ":-4,"โ•—":2,"๐ŸŒ‡":3,"โฐ":2,"๐Ÿš‚":1,"โ— ":2,"๐ŸŽฟ":2,"๐Ÿ†”":4,"๐ŸŒ’":3,"๐Ÿช":3,"โ•”":1,"โ•":2,"๐Ÿ‘”":2,"๐Ÿ†“":1,"๐Ÿ‹":1,"โ–ฝ":2,"๐Ÿ›":1,"๐Ÿ‘•":2,"๐Ÿ’ณ":2,"๐Ÿง":5,"๐Ÿ’ก":3,"โฌ…":2,"๐Ÿซ":2,"๐Ÿ‡ฑ":2,"๐Ÿ“น":2,"๐Ÿ‘ž":2,"๐Ÿ‘š":3,"โ–ก":-2,"๐Ÿšฃ":3,"๐Ÿ‰":3,"๐Ÿ—ป":3,"โ•ฆ":2,"โ›บ":3,"๐Ÿ•":1,"๐Ÿ‚":2,"๐Ÿ‘ก":2,"๐Ÿ“ป":2,"โœ’":1,"๐ŸŒฐ":3,"๐Ÿข":1,"๐ŸŽ’":3,"โŒ’":3,"๐Ÿซ":-2,"๐Ÿ“ด":4,"๐Ÿšข":1,"๐Ÿšš":-1,"๐Ÿ‰":1,"โ’":1,"๐Ÿ””":5,"โ—ข":4,"๐Ÿฅ":1,"๐Ÿš–":-1,"โ–Œ":-2,"โ˜›":2,"๐Ÿ’’":3,"๐Ÿšค":2,"๐Ÿ":2,"โ– ":-2,"๐Ÿ”š":2,"๐ŸŽป":2,"๐Ÿ”ท":1,"๐ŸŽฝ":2,"๐Ÿ“…":1,"๐ŸŽบ":3,"๐Ÿˆ":-3,"โœ‰":1,"โ—ค":5,"โ—‹":3,"๐Ÿผ":3,"๐Ÿš›":-2,"๐Ÿ““":1,"โ˜‰":1,"๐Ÿ’ด":-2,"โžฐ":-1,"๐Ÿ”Œ":-1,"๐Ÿ“•":1,"๐Ÿ“ฃ":2,"๐Ÿš“":1,"๐Ÿ—":3,"โ›ณ":4,"โ”ป":-3,"โ”›":3,"โ”ƒ":2,"๐Ÿ’บ":1,"๐Ÿ‡":-1,"โ˜ป":1,"๐Ÿ“ž":2,"โ’ถ":-1,"๐ŸŒ‰":3,"๐Ÿšฉ":-2,"โœŽ":3,"๐Ÿ“ƒ":2,"๐Ÿจ":1,"๐Ÿ“Œ":-3,"โ™Ž":-1,"๐Ÿ’ท":2,"๐Ÿš„":3,"โ–ฒ":3,"โ›ต":3,"๐Ÿ”ธ":1,"๐Ÿšœ":5,"๐Ÿ†":2,"๐Ÿ‘’":1,"โ•":1,"๐Ÿ”›":2,"โ™ข":2,"๐Ÿ‡ฒ":2,"โ…":4,"๐Ÿ‘":2,"โœž":2,"โ—ก":1,"๐ŸŽ‹":3,"๐Ÿ‘ฅ":1,"๐Ÿก":1,"โ—†":4,"๐Ÿ”ญ":2,"๐ŸŽช":1,"๐Ÿœ":3,"โ™Œ":4,"โ˜":-5,"๐Ÿ‘ท":1,"๐Ÿ”ˆ":1,"๐Ÿ“„":5,"๐Ÿš":4,"๐ŸŒ‹":3,"๐Ÿ“ก":1,"๐Ÿšณ":5,"โœ˜":4,"๐Ÿ…ฐ":1,"๐Ÿ‡ผ":2,"โ”“":3,"โ”ฃ":3,"โ“":2,"โ’บ":2,"๐Ÿ‘ค":4,"๐Ÿš":1,"๐ŸŽ ":3,"๐Ÿ":-2,"๐Ÿ“—":1,"โ”":-1,"โ™‚":1,"๐Ÿ“ฏ":-1,"๐Ÿ”ฉ":1,"๐Ÿ‘ข":4,"โ—‚":2,"๐Ÿ“ฐ":1,"๐Ÿ“ถ":2,"๐ŸŒ„":1,"๐Ÿ—พ":2,"๐Ÿ”ถ":2,"๐Ÿค":2,"๐ŸŽฉ":2,"โ“‚":1,"๐Ÿ”ง":-4,"๐Ÿ…":1,"โ™ฎ":1,"๐Ÿ…พ":-1,"๐Ÿ“ฆ":1,"๐ŸšŠ":1,"๐Ÿ”ฒ":3,"โ–ณ":1,"๐Ÿ“†":5,"โ›":2,"๐Ÿ“‰":2,"โ–ต":2,"๐Ÿ”Ž":3,"โ˜œ":1,"๐Ÿ‡ฏ":2,"๐Ÿ‡ต":2,"๐Ÿ“˜":1,"โ“”":3,"๐Ÿ”‘":1,"โญ•":2,"๐Ÿ”˜":1,"๐Ÿšญ":5,"๐Ÿš‰":3,"๐Ÿšช":3,"โžณ":2,"๐Ÿšƒ":3,"โ”ฏ":-3,"๐Ÿ†™":2,"๐Ÿ†–":1,"โ”—":5,"โ“„":2,"โ‡":3,"โœด":3,"โ˜Š":5,"๐Ÿ”•":-2,"โฌ›":-2,"๐Ÿšž":3,"๐Ÿถ":3,"๐ŸŒ":3,"โ™€":1,"๐Ÿš…":3,"๐Ÿš’":-2,"โ™‹":1,"โ™":3,"๐Ÿ•":-2,"โ“":5,"๐Ÿ“™":1,"โ“ˆ":1,"๐Ÿ“‹":3,"๐ŸŽฑ":1,"๐Ÿž":1,"๐Ÿ”บ":1,"โ“ก":5,"โ™ค":3,"๐ŸŽฏ":3,"๐Ÿ”‰":3,"โ†ฉ":5,"๐Ÿšพ":1,"๐ŸŽฃ":-4,"๐Ÿ”ฃ":1,"โŽ":-5,"โžฅ":1,"๐ŸŽŒ":5,"โ—ฃ":1,"โฌ":5,"โ™ญ":1,"โ“ž":5,"๐Ÿ”ณ":2,"๐Ÿญ":2,"๐ŸŽณ":-3,"โ˜š":5,"โžฝ":2,"โžซ":2,"โž–":-5,"๊’ฐ":2,"๊’ฑ":2,"โ—":-3,"๐Ÿ“‘":5,"โ“ง":5,"๐Ÿ”Ÿ":5,"ใ€“":5,"โ“œ":2,"โž ":5,"๐Ÿš†":2,"โ„…":-5,"โ˜ƒ":2,"๐Ÿšฝ":5,"โ“":5,"โ‡ฆ":5,"๐Ÿ‘ฒ":2,"๐Ÿšก":-3,"๐Ÿ”ฌ":5,"โž—":-3,"๐Ÿ“ˆ":2,"โช":2,"โ—Ž":5,"๊’ฆ":-5,"๐Ÿ“Ž":5,"โ‘…":5,"โœญ":5,"โ™“":2,"โ”":5,"โ˜‡":5,"เฟŽ":-5,"๐Ÿ‘˜":5,"โ†™":5,"โ’ป":2,"โ“Œ":2,"โ“…":2,"๐Ÿ•‘":2,"๐Ÿ•›":5,"โ™ˆ":-5,"โ†ฌ":5,"โœ":5,"๐Ÿฆ":5,"๐Ÿ”ป":5,"โ“Ÿ":5,"โ“•":5,"โ“˜":5,"โ™ฟ":5,"โ‡—":5,"โ‡˜":5,"โ“จ":5,"โ“™":5,"โ–ซ":5,"๐Ÿ”‡":5,"โŒƒ":-5,"๐Ÿ”–":5,"๐Ÿ“œ":5,"๐Ÿš":5,"โ”˜":-5,"โœ":-5,"โฃ":-5,"๐Ÿ“ฎ":-5,"๐Ÿ••":-5,"๐Ÿ”ฏ":5,"โžธ":5,"๊’ต":5,"๐Ÿ•ฅ":-5,"โœฝ":5,"๐Ÿ“ผ":5,"๐Ÿ•":-5,"๐Ÿ€„":5,"โœฌ":5,"โœซ":5,"๐Ÿ•”":-5,"โฃ":5,"๐Ÿ“ซ":5,"๐Ÿ‰":5,"๐Ÿˆ‚":-5,"๐ŸŽฐ":-5,"า‚":-5,"โ•ค":-5,"๐Ÿ“”":5,"abandon":-2,"abandoned":-2,"abandons":-2,"abducted":-2,"abduction":-2,"abductions":-2,"abhor":-3,"abhorred":-3,"abhorrent":-3,"abhors":-3,"abilities":2,"ability":2,"aboard":1,"aborted":-1,"aborts":-1,"absentee":-1,"absentees":-1,"absolve":2,"absolved":2,"absolves":2,"absolving":2,"absorbed":1,"abuse":-3,"abused":-3,"abuses":-3,"abusing":-3,"abusive":-3,"accept":1,"acceptable":1,"acceptance":1,"accepted":1,"accepting":1,"accepts":1,"accessible":1,"accident":-2,"accidental":-2,"accidentally":-2,"accidents":-2,"acclaim":2,"acclaimed":2,"accolade":2,"accomplish":2,"accomplished":2,"accomplishes":2,"accomplishment":2,"accomplishments":2,"accusation":-2,"accusations":-2,"accuse":-2,"accused":-2,"accuses":-2,"accusing":-2,"ache":-2,"achievable":1,"aching":-2,"acquit":2,"acquits":2,"acquitted":2,"acquitting":2,"acrimonious":-3,"active":1,"adequate":1,"admire":3,"admired":3,"admires":3,"admiring":3,"admit":-1,"admits":-1,"admitted":-1,"admonish":-2,"admonished":-2,"adopt":1,"adopts":1,"adorable":3,"adoration":3,"adore":3,"adored":3,"adores":3,"adoring":3,"adoringly":3,"advanced":1,"advantage":2,"advantageous":2,"advantageously":2,"advantages":2,"adventure":2,"adventures":2,"adventurous":2,"adversary":-1,"advisable":1,"affected":-1,"affection":3,"affectionate":3,"affectionateness":3,"afflicted":-1,"affordable":2,"affronted":-1,"aficionados":2,"afraid":-2,"aggravate":-2,"aggravated":-2,"aggravates":-2,"aggravating":-2,"aggression":-2,"aggressions":-2,"aggressive":-2,"aggressiveness":-2,"aghast":-2,"agog":2,"agonise":-3,"agonised":-3,"agonises":-3,"agonising":-3,"agonize":-3,"agonized":-3,"agonizes":-3,"agonizing":-3,"agree":1,"agreeable":2,"agreed":1,"agreement":1,"agrees":1,"alarm":-2,"alarmed":-2,"alarmist":-2,"alarmists":-2,"alas":-1,"alert":-1,"alienation":-2,"alive":1,"allegation":-2,"allegations":-2,"allergic":-2,"allow":1,"ally":2,"alone":-2,"altruistic":2,"amaze":2,"amazed":2,"amazes":2,"amazing":4,"ambitious":2,"ambivalent":-1,"amicable":2,"amuse":3,"amused":3,"amusement":3,"amusements":3,"anger":-3,"angered":-3,"angers":-3,"angry":-3,"anguish":-3,"anguished":-3,"animosity":-2,"annoy":-2,"annoyance":-2,"annoyed":-2,"annoying":-2,"annoys":-2,"antagonistic":-2,"anti":-1,"anticipation":1,"anxiety":-2,"anxious":-2,"apathetic":-3,"apathy":-3,"apeshit":-3,"apocalyptic":-2,"apologise":-1,"apologised":-1,"apologises":-1,"apologising":-1,"apologize":-1,"apologized":-1,"apologizes":-1,"apologizing":-1,"apology":-1,"appalled":-2,"appalling":-2,"appealing":2,"appease":2,"appeased":2,"appeases":2,"appeasing":2,"applaud":2,"applauded":2,"applauding":2,"applauds":2,"applause":2,"appreciate":2,"appreciated":2,"appreciates":2,"appreciating":2,"appreciation":2,"apprehensive":-2,"appropriate":2,"appropriately":2,"approval":2,"approved":2,"approves":2,"ardent":1,"arrest":-2,"arrested":-3,"arrests":-2,"arrogant":-2,"arsehole":-4,"ashame":-2,"ashamed":-2,"ass":-4,"assassination":-3,"assassinations":-3,"assault":-2,"assaults":-2,"asset":2,"assets":2,"assfucking":-4,"asshole":-4,"astonished":2,"astound":3,"astounded":3,"astounding":3,"astoundingly":3,"astounds":3,"atrocious":-3,"atrocity":-3,"attack":-1,"attacked":-1,"attacking":-1,"attacks":-1,"attract":1,"attracted":1,"attracting":2,"attraction":2,"attractions":2,"attractive":2,"attractively":2,"attractiveness":2,"attracts":1,"audacious":3,"aura":1,"authority":1,"avenge":-2,"avenged":-2,"avenger":-2,"avengers":-2,"avenges":-2,"avenging":-2,"avert":-1,"averted":-1,"averts":-1,"avid":2,"avoid":-1,"avoided":-1,"avoids":-1,"await":-1,"awaited":-1,"awaits":-1,"award":3,"awarded":3,"awards":3,"awesome":4,"awful":-3,"awkward":-2,"axe":-1,"axed":-1,"backed":1,"backing":2,"backs":1,"bad":-3,"bad luck":-2,"badass":-3,"badly":-3,"badness":-3,"bailout":-2,"balanced":1,"bamboozle":-2,"bamboozled":-2,"bamboozles":-2,"ban":-2,"banish":-1,"bankrupt":-3,"bankruptcy":-3,"bankster":-3,"banned":-2,"barbarian":-2,"barbaric":-2,"barbarous":-2,"bargain":2,"barrier":-2,"bastard":-5,"bastards":-5,"battle":-1,"battled":-1,"battles":-1,"battling":-2,"beaten":-2,"beatific":3,"beating":-1,"beauties":3,"beautiful":3,"beautifully":3,"beautify":3,"beauty":3,"befit":2,"befitting":2,"belittle":-2,"belittled":-2,"beloved":3,"benefactor":2,"benefactors":2,"benefit":2,"benefits":2,"benefitted":2,"benefitting":2,"benevolent":3,"bereave":-2,"bereaved":-2,"bereaves":-2,"bereaving":-2,"best":3,"best damn":4,"betray":-3,"betrayal":-3,"betrayed":-3,"betraying":-3,"betrays":-3,"better":2,"bias":-1,"biased":-2,"big":1,"bitch":-5,"bitches":-5,"bitter":-2,"bitterest":-2,"bitterly":-2,"bizarre":-2,"blackmail":-3,"blackmailed":-3,"blackmailing":-3,"blackmails":-3,"blah":-2,"blame":-2,"blamed":-2,"blames":-2,"blaming":-2,"bless":2,"blesses":2,"blessing":3,"blessings":3,"blind":-1,"bliss":3,"blissful":3,"blithe":2,"bloated":-1,"block":-1,"blockade":-2,"blockbuster":3,"blocked":-1,"blocking":-1,"blocks":-1,"bloody":-3,"blurry":-2,"boastful":-2,"bold":2,"boldly":2,"bomb":-1,"boost":1,"boosted":1,"boosting":1,"boosts":1,"bore":-2,"bored":-2,"boring":-3,"bother":-2,"bothered":-2,"bothers":-2,"bothersome":-2,"boycott":-2,"boycotted":-2,"boycotting":-2,"boycotts":-2,"brainwashing":-3,"brave":2,"braveness":2,"bravery":2,"bravura":3,"breach":-2,"breached":-2,"breaches":-2,"breaching":-2,"breakthrough":3,"breathtaking":5,"bribe":-3,"bribed":-3,"bribes":-3,"bribing":-3,"bright":1,"brightest":2,"brightness":1,"brilliant":4,"brilliance":3,"brilliances":3,"brisk":2,"broke":-1,"broken":-1,"brooding":-2,"brutal":-3,"brutally":-3,"bullied":-2,"bullshit":-4,"bully":-2,"bullying":-2,"bummer":-2,"buoyant":2,"burden":-2,"burdened":-2,"burdening":-2,"burdens":-2,"burglar":-2,"burglary":-2,"calm":2,"calmed":2,"calming":2,"calms":2,"can't stand":-3,"cancel":-1,"cancelled":-1,"cancelling":-1,"cancels":-1,"cancer":-1,"capabilities":1,"capability":1,"capable":1,"captivated":3,"care":2,"carefree":1,"careful":2,"carefully":2,"carefulness":2,"careless":-2,"cares":2,"caring":2,"cashing in":-2,"casualty":-2,"catastrophe":-3,"catastrophic":-4,"cautious":-1,"celebrate":3,"celebrated":3,"celebrates":3,"celebrating":3,"celebration":3,"celebrations":3,"censor":-2,"censored":-2,"censors":-2,"certain":1,"chagrin":-2,"chagrined":-2,"challenge":-1,"champion":2,"championed":2,"champions":2,"chance":2,"chances":2,"chaos":-2,"chaotic":-2,"charged":-3,"charges":-2,"charisma":2,"charitable":2,"charm":3,"charming":3,"charmingly":3,"charmless":-3,"chastise":-3,"chastised":-3,"chastises":-3,"chastising":-3,"cheat":-3,"cheated":-3,"cheater":-3,"cheaters":-3,"cheating":-3,"cheats":-3,"cheer":2,"cheered":2,"cheerful":2,"cheerfully":2,"cheering":2,"cheerless":-2,"cheers":2,"cheery":3,"cherish":2,"cherished":2,"cherishes":2,"cherishing":2,"chic":2,"chide":-3,"chided":-3,"chides":-3,"chiding":-3,"childish":-2,"chilling":-1,"choke":-2,"choked":-2,"chokes":-2,"choking":-2,"clarifies":2,"clarity":2,"clash":-2,"classy":3,"clean":2,"cleaner":2,"clear":1,"cleared":1,"clearly":1,"clears":1,"clever":2,"clouded":-1,"clueless":-2,"cock":-5,"cocksucker":-5,"cocksuckers":-5,"cocky":-2,"coerced":-2,"coercion":-2,"collapse":-2,"collapsed":-2,"collapses":-2,"collapsing":-2,"collide":-1,"collides":-1,"colliding":-1,"collision":-2,"collisions":-2,"colluding":-3,"combat":-1,"combats":-1,"comedy":1,"comfort":2,"comfortable":2,"comfortably":2,"comforting":2,"comforts":2,"comic":1,"commend":2,"commended":2,"commit":1,"commitment":2,"commits":1,"committed":1,"committing":1,"compassion":2,"compassionate":2,"compelled":1,"competencies":1,"competent":2,"competitive":2,"complacent":-2,"complain":-2,"complained":-2,"complaining":-2,"complains":-2,"complaint":-2,"complaints":-2,"complicating":-2,"compliment":2,"complimented":2,"compliments":2,"comprehensive":2,"concerned":-2,"conciliate":2,"conciliated":2,"conciliates":2,"conciliating":2,"condemn":-2,"condemnation":-2,"condemned":-2,"condemns":-2,"confidence":2,"confident":2,"confidently":2,"conflict":-2,"conflicting":-2,"conflictive":-2,"conflicts":-2,"confuse":-2,"confused":-2,"confusing":-2,"congrats":2,"congratulate":2,"congratulation":2,"congratulations":2,"consent":2,"consents":2,"consolable":2,"conspiracy":-3,"constipation":-2,"constrained":-2,"contagion":-2,"contagions":-2,"contagious":-1,"contaminant":-2,"contaminants":-2,"contaminate":-2,"contaminated":-2,"contaminates":-2,"contaminating":-2,"contamination":-2,"contaminations":-2,"contempt":-2,"contemptible":-2,"contemptuous":-2,"contemptuously":-2,"contend":-1,"contender":-1,"contending":-1,"contentious":-2,"contestable":-2,"controversial":-2,"controversially":-2,"controversies":-2,"controversy":-2,"convicted":-2,"convince":1,"convinced":1,"convinces":1,"convivial":2,"cool":1,"cool stuff":3,"cornered":-2,"corpse":-1,"corrupt":-3,"corrupted":-3,"corrupting":-3,"corruption":-3,"corrupts":-3,"costly":-2,"courage":2,"courageous":2,"courageously":2,"courageousness":2,"courteous":2,"courtesy":2,"cover-up":-3,"coward":-2,"cowardly":-2,"coziness":2,"cramp":-1,"crap":-3,"crappy":-3,"crash":-2,"crazier":-2,"craziest":-2,"crazy":-2,"creative":2,"crestfallen":-2,"cried":-2,"cries":-2,"crime":-3,"crimes":-3,"criminal":-3,"criminals":-3,"criminate":-3,"criminated":-3,"criminates":-3,"crisis":-3,"critic":-2,"criticise":-2,"criticised":-2,"criticises":-2,"criticising":-2,"criticism":-2,"criticize":-2,"criticized":-2,"criticizes":-2,"criticizing":-2,"critics":-2,"critique":-2,"crowding":-1,"crude":-1,"cruel":-3,"cruelty":-3,"crush":-1,"crushed":-2,"crushes":-1,"crushing":-1,"cry":-1,"crying":-2,"cunning":2,"cunt":-5,"curious":1,"curse":-1,"cut":-1,"cutback":-2,"cutbacks":-2,"cute":2,"cuts":-1,"cutting":-1,"cynic":-2,"cynical":-2,"cynicism":-2,"damage":-3,"damaged":-3,"damages":-3,"damaging":-3,"damn":-2,"damn cute":3,"damn good":4,"damned":-4,"damnit":-4,"danger":-2,"dangerous":-2,"dangerously":-2,"daredevil":2,"daring":2,"darkest":-2,"darkness":-1,"dauntless":2,"dazzling":3,"dead":-3,"deadening":-2,"deadlock":-2,"deadly":-3,"deafening":-1,"dear":2,"dearly":3,"death":-2,"deaths":-2,"debonair":2,"debt":-2,"deceit":-3,"deceitful":-3,"deceive":-3,"deceived":-3,"deceives":-3,"deceiving":-3,"deception":-3,"deceptive":-3,"decisive":1,"dedicated":2,"dedication":2,"defeat":-2,"defeated":-2,"defect":-3,"defective":-3,"defects":-3,"defender":2,"defenders":2,"defenseless":-2,"defer":-1,"deferring":-1,"defiant":-1,"deficient":-2,"deficiency":-2,"deficiencies":-2,"deficit":-2,"deformed":-2,"deformities":-2,"deformity":-2,"defraud":-3,"defrauds":-3,"deft":2,"defunct":-2,"degrade":-2,"degraded":-2,"degrades":-2,"dehumanize":-2,"dehumanized":-2,"dehumanizes":-2,"dehumanizing":-2,"deject":-2,"dejected":-2,"dejecting":-2,"dejects":-2,"delay":-1,"delayed":-1,"delectable":3,"delicious":3,"delight":3,"delighted":3,"delightful":3,"delightfully":3,"delighting":3,"delights":3,"demand":-1,"demanded":-1,"demanding":-1,"demands":-1,"demonstration":-1,"demoralize":-2,"demoralized":-2,"demoralizes":-2,"demoralizing":-2,"denial":-2,"denials":-2,"denied":-2,"denier":-2,"deniers":-2,"denies":-2,"denounce":-2,"denounces":-2,"dent":-2,"deny":-2,"denying":-2,"deplore":-3,"deplored":-3,"deplores":-3,"deploring":-3,"deport":-2,"deported":-2,"deporting":-2,"deports":-2,"deportation":-2,"deportations":-2,"depressed":-2,"depressing":-2,"deprivation":-3,"derail":-2,"derailed":-2,"derails":-2,"derelict":-2,"deride":-2,"derided":-2,"derides":-2,"deriding":-2,"derision":-2,"desirable":2,"desire":1,"desired":2,"desirous":2,"despair":-3,"despairing":-3,"despairs":-3,"desperate":-3,"desperately":-3,"despondent":-3,"destroy":-3,"destroyed":-3,"destroying":-3,"destroys":-3,"destruction":-3,"destructive":-3,"detached":-1,"detain":-2,"detained":-2,"detention":-2,"deteriorate":-2,"deteriorated":-2,"deteriorates":-2,"deteriorating":-2,"determined":2,"deterrent":-2,"detract":-1,"detracted":-1,"detracts":-1,"devastate":-2,"devastated":-2,"devastating":-2,"devastation":-2,"devastations":-2,"devoted":3,"devotion":2,"devotional":2,"diamond":1,"dick":-4,"dickhead":-4,"die":-3,"died":-3,"difficult":-1,"diffident":-2,"dignity":2,"dilemma":-1,"dilligence":2,"dipshit":-3,"dire":-3,"direful":-3,"dirt":-2,"dirtier":-2,"dirtiest":-2,"dirty":-2,"disabilities":-2,"disability":-2,"disabling":-1,"disadvantage":-2,"disadvantaged":-2,"disagree":-2,"disagreeable":-2,"disagreement":-2,"disappear":-1,"disappeared":-1,"disappears":-1,"disappoint":-2,"disappointed":-2,"disappointing":-2,"disappointment":-2,"disappointments":-2,"disappoints":-2,"disapproval":-2,"disapprovals":-2,"disapprove":-2,"disapproved":-2,"disapproves":-2,"disapproving":-2,"disaster":-2,"disasters":-2,"disastrous":-3,"disbelieve":-2,"discard":-1,"discarded":-1,"discarding":-1,"discards":-1,"discernment":2,"discomfort":-2,"disconsolate":-2,"disconsolation":-2,"discontented":-2,"discord":-2,"discounted":-1,"discouraged":-2,"discredited":-2,"discriminate":-2,"discriminated":-2,"discriminates":-2,"discriminating":-2,"discriminatory":-2,"disdain":-2,"disease":-1,"diseases":-1,"disgrace":-2,"disgraced":-2,"disguise":-1,"disguised":-1,"disguises":-1,"disguising":-1,"disgust":-3,"disgusted":-3,"disgustful":-3,"disgusting":-3,"disheartened":-2,"dishonest":-2,"disillusioned":-2,"disinclined":-2,"disjointed":-2,"dislike":-2,"disliked":-2,"dislikes":-2,"dismal":-2,"dismayed":-2,"dismissed":-2,"disorder":-2,"disorders":-2,"disorganized":-2,"disoriented":-2,"disparage":-2,"disparaged":-2,"disparages":-2,"disparaging":-2,"displeased":-2,"displeasure":-2,"disproportionate":-2,"dispute":-2,"disputed":-2,"disputes":-2,"disputing":-2,"disqualified":-2,"disquiet":-2,"disregard":-2,"disregarded":-2,"disregarding":-2,"disregards":-2,"disrespect":-2,"disrespected":-2,"disrupt":-2,"disrupted":-2,"disrupting":-2,"disruption":-2,"disruptions":-2,"disruptive":-2,"disrupts":-2,"dissatisfied":-2,"distasteful":-2,"distinguished":2,"distort":-2,"distorted":-2,"distorting":-2,"distorts":-2,"distract":-2,"distracted":-2,"distraction":-2,"distracts":-2,"distress":-2,"distressed":-2,"distresses":-2,"distressing":-2,"distrust":-3,"distrustful":-3,"disturb":-2,"disturbed":-2,"disturbing":-2,"disturbs":-2,"dithering":-2,"diverting":-1,"dizzy":-1,"dodging":-2,"dodgy":-2,"does not work":-3,"dolorous":-2,"donate":2,"donated":2,"donates":2,"donating":2,"donation":2,"dont like":-2,"doom":-2,"doomed":-2,"doubt":-1,"doubted":-1,"doubtful":-1,"doubting":-1,"doubts":-1,"douche":-3,"douchebag":-3,"dour":-2,"downcast":-2,"downer":-2,"downhearted":-2,"downside":-2,"drag":-1,"dragged":-1,"drags":-1,"drained":-2,"dread":-2,"dreaded":-2,"dreadful":-3,"dreading":-2,"dream":1,"dreams":1,"dreary":-2,"droopy":-2,"drop":-1,"dropped":-1,"drown":-2,"drowned":-2,"drowns":-2,"drudgery":-2,"drunk":-2,"dubious":-2,"dud":-2,"dull":-2,"dumb":-3,"dumbass":-3,"dump":-1,"dumped":-2,"dumps":-1,"dupe":-2,"duped":-2,"dupery":-2,"durable":2,"dying":-3,"dysfunction":-2,"eager":2,"earnest":2,"ease":2,"easy":1,"ecstatic":4,"eerie":-2,"eery":-2,"effective":2,"effectively":2,"effectiveness":2,"effortlessly":2,"elated":3,"elation":3,"elegant":2,"elegantly":2,"embarrass":-2,"embarrassed":-2,"embarrasses":-2,"embarrassing":-2,"embarrassment":-2,"embezzlement":-3,"embittered":-2,"embrace":1,"emergency":-2,"empathetic":2,"empower":2,"empowerment":2,"emptiness":-1,"empty":-1,"enchanted":2,"encourage":2,"encouraged":2,"encouragement":2,"encourages":2,"encouraging":2,"endorse":2,"endorsed":2,"endorsement":2,"endorses":2,"enemies":-2,"enemy":-2,"energetic":2,"engage":1,"engages":1,"engrossed":1,"engrossing":3,"enjoy":2,"enjoyable":2,"enjoyed":2,"enjoying":2,"enjoys":2,"enlighten":2,"enlightened":2,"enlightening":2,"enlightens":2,"ennui":-2,"enrage":-2,"enraged":-2,"enrages":-2,"enraging":-2,"enrapture":3,"enslave":-2,"enslaved":-2,"enslaves":-2,"ensure":1,"ensuring":1,"enterprising":1,"entertaining":2,"enthral":3,"enthusiastic":3,"entitled":1,"entrusted":2,"envies":-1,"envious":-2,"environment-friendly":2,"envy":-1,"envying":-1,"erroneous":-2,"error":-2,"errors":-2,"escape":-1,"escapes":-1,"escaping":-1,"esteem":2,"esteemed":2,"ethical":2,"euphoria":3,"euphoric":4,"evacuate":-1,"evacuated":-1,"evacuates":-1,"evacuating":-1,"evacuation":-1,"evergreen":2,"evergreens":2,"evergreening":-3,"eviction":-1,"evil":-3,"exacerbate":-2,"exacerbated":-2,"exacerbates":-2,"exacerbating":-2,"exaggerate":-2,"exaggerated":-2,"exaggerates":-2,"exaggerating":-2,"exasparate":-2,"exasperated":-2,"exasperates":-2,"exasperating":-2,"excellence":3,"excellent":3,"excite":3,"excited":3,"excitement":3,"exciting":3,"exclude":-1,"excluded":-2,"exclusion":-1,"exclusive":2,"excruciatingly":-1,"excuse":-1,"exempt":-1,"exhausted":-2,"exhilarated":3,"exhilarates":3,"exhilarating":3,"exonerate":2,"exonerated":2,"exonerates":2,"exonerating":2,"expand":1,"expands":1,"expel":-2,"expelled":-2,"expelling":-2,"expels":-2,"expertly":2,"exploit":-2,"exploited":-2,"exploiting":-2,"exploits":-2,"exploration":1,"explorations":1,"expose":-1,"exposed":-1,"exposes":-1,"exposing":-1,"exquisite":3,"extend":1,"extends":1,"extremist":-2,"extremists":-2,"exuberant":4,"exultant":3,"exultantly":3,"fabulous":4,"fabulously":4,"fad":-2,"fag":-3,"faggot":-3,"faggots":-3,"fail":-2,"failed":-2,"failing":-2,"fails":-2,"failure":-2,"failures":-2,"fainthearted":-2,"fair":2,"fairness":2,"faith":1,"faithful":3,"fake":-3,"faker":-3,"fakes":-3,"faking":-3,"fallen":-2,"falling":-1,"false":-1,"falsely":-2,"falsified":-3,"falsify":-3,"fame":1,"famine":-2,"famous":2,"fan":3,"fantastic":4,"farce":-1,"fascinate":3,"fascinated":3,"fascinates":3,"fascinating":3,"fascination":3,"fascist":-2,"fascists":-2,"fatal":-3,"fatalities":-3,"fatality":-3,"fatigue":-2,"fatigued":-2,"fatigues":-2,"fatiguing":-2,"favor":2,"favorable":2,"favorably":2,"favored":2,"favorite":2,"favorited":2,"favorites":2,"favors":2,"favour":2,"favourable":2,"favourably":2,"favoured":2,"favourite":2,"favourited":2,"favourites":2,"favours":2,"fear":-2,"fearful":-2,"fearfully":-2,"fearing":-2,"fearless":2,"fearlessness":2,"fearsome":-2,"fed up":-3,"feeble":-2,"feeling":1,"felonies":-3,"felony":-3,"fertile":2,"fervent":2,"fervid":2,"festive":2,"fever":-2,"fiasco":-3,"fidgety":-2,"fight":-1,"fighting":-2,"fine":2,"fines":-2,"finest":3,"fire":-2,"fired":-2,"firing":-2,"fit":1,"fitness":1,"filth":-2,"filthy":-2,"flagship":2,"flaw":-2,"flawed":-3,"flawless":2,"flawlessly":2,"flaws":-2,"flees":-1,"flop":-2,"flops":-2,"flu":-2,"flustered":-2,"focused":2,"fond":2,"fondness":2,"fool":-2,"foolish":-2,"fools":-2,"forbid":-1,"forbidden":-2,"forbidding":-2,"forced":-1,"foreclosure":-2,"foreclosures":-2,"forefront":1,"forget":-1,"forgetful":-2,"forgettable":-1,"forgive":1,"forgiving":1,"forgot":-1,"forgotten":-1,"fortune":2,"fortunate":2,"fortunately":2,"foul":-3,"frantic":-1,"fraud":-4,"frauds":-4,"fraudster":-4,"fraudsters":-4,"fraudulence":-4,"fraudulent":-4,"freak":-2,"free":1,"freedom":2,"freedoms":2,"frenzy":-3,"fresh":1,"friend":1,"friendliness":2,"friendly":2,"friendship":2,"fright":-2,"frightened":-2,"frightening":-3,"frikin":-2,"frisky":2,"frowning":-1,"fruitless":-2,"frustrate":-2,"frustrated":-2,"frustrates":-2,"frustrating":-2,"frustration":-2,"ftw":3,"fuck":-4,"fucked":-4,"fucker":-4,"fuckers":-4,"fuckface":-4,"fuckhead":-4,"fuckin":-4,"fucking":-4,"fucking amazing":4,"fucking beautiful":4,"fucking cute":4,"fucking fantastic":4,"fucking good":4,"fucking great":4,"fucking hot":2,"fucking love":4,"fucking loves":4,"fucking perfect":4,"fucktard":-4,"fud":-3,"fuked":-4,"fuking":-4,"fulfill":2,"fulfilled":2,"fulfillment":2,"fulfills":2,"fuming":-2,"fun":4,"funeral":-1,"funerals":-1,"funky":2,"funnier":4,"funny":4,"furious":-3,"futile":-2,"gag":-2,"gagged":-2,"gain":2,"gained":2,"gaining":2,"gains":2,"gallant":3,"gallantly":3,"gallantry":3,"game-changing":3,"garbage":-1,"gem":3,"generous":2,"generously":2,"genial":3,"ghastly":-2,"ghost":-1,"giddy":-2,"gift":2,"glad":3,"glamorous":3,"glamourous":3,"glee":3,"gleeful":3,"gloom":-1,"gloomy":-2,"glorious":2,"glory":2,"glum":-2,"god":1,"goddamn":-3,"godsend":4,"gold":2,"good":3,"goodlooking":3,"goodmorning":1,"goodness":3,"goodwill":3,"goofiness":-2,"goofy":-2,"grace":1,"graceful":2,"gracious":3,"grand":3,"grant":1,"granted":1,"granting":1,"grants":1,"grateful":3,"gratification":2,"grave":-2,"gray":-1,"grisly":-2,"gr8":3,"great":3,"greater":3,"greatest":3,"greed":-3,"greedy":-2,"green wash":-3,"green washing":-3,"greenwash":-3,"greenwasher":-3,"greenwashers":-3,"greenwashing":-3,"greet":1,"greeted":1,"greeting":1,"greetings":2,"greets":1,"grey":-1,"grief":-2,"grieved":-2,"grim":-2,"gripping":2,"groan":-2,"groaned":-2,"groaning":-2,"groans":-2,"gross":-2,"growing":1,"growth":2,"growths":2,"gruesome":-3,"guarantee":1,"guilt":-3,"guilty":-3,"gullibility":-2,"gullible":-2,"gun":-1,"ha":2,"hacked":-1,"haha":3,"hahaha":3,"hahahah":3,"hail":2,"hailed":2,"hallelujah":3,"handpicked":1,"handsome":3,"hapless":-2,"haplessness":-2,"happiest":3,"happiness":3,"happy":3,"harass":-3,"harassed":-3,"harasses":-3,"harassing":-3,"harassment":-3,"hard":-1,"hardier":2,"hardship":-2,"hardy":2,"harm":-2,"harmed":-2,"harmful":-2,"harming":-2,"harmony":2,"harmonious":2,"harmoniously":2,"harms":-2,"harried":-2,"harsh":-2,"harsher":-2,"harshest":-2,"harshly":-2,"hate":-3,"hated":-3,"hater":-3,"haters":-3,"hates":-3,"hating":-3,"hatred":-3,"haunt":-1,"haunted":-2,"haunting":1,"haunts":-1,"havoc":-2,"hazardous":-3,"headache":-2,"healthy":2,"heartbreaking":-3,"heartbroken":-3,"heartfelt":3,"heartless":-2,"heartwarming":3,"heaven":2,"heavenly":4,"heavyhearted":-2,"hehe":2,"hell":-4,"hellish":-2,"help":2,"helpful":2,"helping":2,"helpless":-2,"helps":2,"hero":2,"heroes":2,"heroic":3,"hesitant":-2,"hesitate":-2,"hid":-1,"hide":-1,"hideous":-3,"hides":-1,"hiding":-1,"highlight":2,"hilarious":2,"hinder":-2,"hindrance":-2,"hoax":-2,"hollow":-1,"homeless":-2,"homesick":-2,"homicide":-2,"homicides":-2,"honest":2,"honor":2,"honored":2,"honoring":2,"honour":2,"honoured":2,"honouring":2,"hooligan":-2,"hooliganism":-2,"hooligans":-2,"hope":2,"hopeful":2,"hopefully":2,"hopeless":-2,"hopelessness":-2,"hopes":2,"hoping":2,"horrendous":-3,"horrid":-3,"horrible":-3,"horrific":-3,"horrified":-3,"hospitalized":-2,"hostile":-2,"huckster":-2,"hug":2,"huge":1,"hugs":2,"humane":2,"humble":1,"humbug":-2,"humerous":3,"humiliated":-3,"humiliation":-3,"humor":2,"humorous":2,"humour":2,"humourous":2,"hunger":-2,"hurrah":5,"hurt":-2,"hurting":-2,"hurts":-2,"hypocritical":-2,"hysteria":-3,"hysterical":-3,"hysterics":-3,"icky":-3,"idiocy":-3,"idiot":-3,"idiotic":-3,"ignorance":-2,"ignorant":-2,"ignore":-1,"ignored":-2,"ignores":-1,"ill":-2,"ill-fated":-2,"illegal":-3,"illegally":-3,"illegitimate":-3,"illiteracy":-2,"illness":-2,"illnesses":-2,"illogical":-2,"imaginative":2,"imbecile":-3,"immobilized":-1,"immortal":2,"immune":1,"impair":-2,"impaired":-2,"impairing":-2,"impairment":-2,"impairs":-2,"impatient":-2,"impeachment":-3,"impeachments":-3,"impede":-2,"impeded":-2,"impedes":-2,"impeding":-2,"impedingly":-2,"imperfect":-2,"importance":2,"important":2,"impose":-1,"imposed":-1,"imposes":-1,"imposing":-1,"imposter":-2,"impotent":-2,"impress":3,"impressed":3,"impresses":3,"impressive":3,"imprisoned":-2,"imprisonment":-2,"improper":-2,"improperly":-2,"improve":2,"improved":2,"improvement":2,"improves":2,"improving":2,"inability":-2,"inaction":-2,"inadequate":-2,"inadvertently":-2,"inappropriate":-2,"incapable":-2,"incapacitated":-2,"incapacitates":-2,"incapacitating":-2,"incense":-2,"incensed":-2,"incenses":-2,"incensing":-2,"incoherent":-2,"incompetence":-2,"incompetent":-2,"incomplete":-1,"incomprehensible":-2,"inconsiderate":-2,"inconvenience":-2,"inconvenient":-2,"increase":1,"increased":1,"indecisive":-2,"indestructible":2,"indicted":-2,"indifference":-2,"indifferent":-2,"indignant":-2,"indignation":-2,"indoctrinate":-2,"indoctrinated":-2,"indoctrinates":-2,"indoctrinating":-2,"inediable":-2,"inexorable":-3,"inexcusable":-3,"ineffective":-2,"ineffectively":-2,"ineffectual":-2,"inefficiency":-2,"inefficient":-2,"inefficiently":-2,"inept":-2,"ineptitude":-2,"infantile":-2,"infantilized":-2,"infatuated":2,"infatuation":2,"infect":-2,"infected":-2,"infecting":-2,"infection":-2,"infections":-2,"infectious":-2,"infects":-2,"inferior":-2,"infest":-2,"infested":-2,"infesting":-2,"infests":-2,"inflamed":-2,"inflict":-2,"inflicted":-2,"inflicting":-2,"inflicts":-2,"influential":2,"infract":-2,"infracted":-2,"infracting":-2,"infracts":-2,"infringement":-2,"infuriate":-2,"infuriated":-2,"infuriates":-2,"infuriating":-2,"inhibit":-1,"inhuman":-2,"injured":-2,"injuries":-2,"injury":-2,"injustice":-2,"innovate":1,"innovates":1,"innovation":1,"innovative":2,"inoperative":-2,"inquisition":-2,"inquisitive":2,"insane":-2,"insanity":-2,"insecure":-2,"insensitive":-2,"insensitivity":-2,"insignificant":-2,"insipid":-2,"insolvent":-2,"insomnia":-2,"inspiration":2,"inspirational":2,"inspire":2,"inspired":2,"inspires":2,"inspiring":3,"insufficiency":-2,"insufficient":-2,"insufficiently":-2,"insult":-2,"insulted":-2,"insulting":-2,"insults":-2,"intact":2,"integrity":2,"intelligent":2,"intense":1,"interest":1,"interested":2,"interesting":2,"interests":1,"interrogated":-2,"interrupt":-2,"interrupted":-2,"interrupting":-2,"interruption":-2,"interrupts":-2,"intimacy":2,"intimidate":-2,"intimidated":-2,"intimidates":-2,"intimidating":-2,"intimidation":-2,"intransigence":-2,"intransigency":-2,"intricate":2,"intrigues":1,"invasion":-1,"invincible":2,"invite":1,"inviting":1,"invulnerable":2,"irate":-3,"ironic":-1,"irony":-1,"irrational":-1,"irreparable":-2,"irreproducible":-2,"irresistible":2,"irresistibly":2,"irresolute":-2,"irresponsible":-2,"irresponsibly":-2,"irreversible":-1,"irreversibly":-1,"irritate":-3,"irritated":-3,"irritates":-3,"irritating":-3,"isolated":-1,"itchy":-2,"jackass":-4,"jackasses":-4,"jailed":-2,"jaunty":2,"jealous":-2,"jealousy":-2,"jeopardy":-2,"jerk":-3,"jesus":1,"jewel":1,"jewels":1,"jocular":2,"join":1,"joke":2,"jokes":2,"jolly":2,"jovial":2,"joy":3,"joyful":3,"joyfully":3,"joyless":-2,"joyous":3,"jubilant":3,"jumpy":-1,"justice":2,"justifiably":2,"justified":2,"keen":1,"kickback":-3,"kickbacks":-3,"kidnap":-2,"kidnapped":-2,"kidnapping":-2,"kidnappings":-2,"kidnaps":-2,"kill":-3,"killed":-3,"killing":-3,"kills":-3,"kind":2,"kind of":0,"kinder":2,"kindness":2,"kiss":2,"kudos":3,"lack":-2,"lackadaisical":-2,"lag":-1,"lagged":-2,"lagging":-2,"lags":-2,"lame":-2,"landmark":2,"lapse":-1,"lapsed":-1,"laugh":1,"laughed":1,"laughing":1,"laughs":1,"laughting":1,"launched":1,"lawl":3,"lawsuit":-2,"lawsuits":-2,"lazy":-1,"leadership":1,"leading":2,"leak":-1,"leaked":-1,"leave":-1,"legal":1,"legally":1,"lenient":1,"lethal":-2,"lethality":-2,"lethargic":-2,"lethargy":-2,"liar":-3,"liars":-3,"libelous":-2,"lied":-2,"lifeless":-1,"lifesaver":4,"lighthearted":1,"likable":2,"like":2,"likeable":2,"liked":2,"likers":2,"likes":2,"liking":2,"limitation":-1,"limited":-1,"limits":-1,"litigation":-1,"litigious":-2,"lively":2,"livid":-2,"lmao":4,"lmfao":4,"loathe":-3,"loathed":-3,"loathes":-3,"loathing":-3,"loathsome":-3,"lobbied":-2,"lobby":-2,"lobbying":-2,"lobbyist":-2,"lobbyists":-2,"lol":3,"lolol":4,"lololol":4,"lolololol":4,"lonely":-2,"lonesome":-2,"longing":-1,"lool":3,"loom":-1,"loomed":-1,"looming":-1,"looms":-1,"loool":3,"looool":3,"loose":-3,"looses":-3,"loser":-3,"losing":-3,"loss":-3,"losses":-3,"lost":-3,"lousy":-2,"lovable":3,"love":3,"loved":3,"lovelies":3,"lovely":3,"loves":3,"loving":2,"loving-kindness":3,"lowest":-1,"loyal":3,"loyalty":3,"luck":3,"luckily":3,"lucky":3,"lucrative":3,"ludicrous":-3,"lugubrious":-2,"lunatic":-3,"lunatics":-3,"lurk":-1,"lurking":-1,"lurks":-1,"luxury":2,"macabre":-2,"mad":-3,"maddening":-3,"made-up":-1,"madly":-3,"madness":-3,"magnificent":3,"maladaption":-2,"maldevelopment":-2,"maltreatment":-2,"mandatory":-1,"manipulated":-1,"manipulating":-1,"manipulation":-1,"manslaughter":-3,"marvel":3,"marvelous":3,"marvels":3,"masterpiece":4,"masterpieces":4,"matter":1,"matters":1,"mature":2,"meaningful":2,"meaningless":-2,"medal":3,"mediocrity":-3,"meditative":1,"melancholy":-2,"memorable":1,"memoriam":-2,"menace":-2,"menaced":-2,"menaces":-2,"mercy":2,"merry":3,"mesmerizing":3,"mess":-2,"messed":-2,"messing up":-2,"methodical":2,"methodically":2,"mindless":-2,"miracle":4,"mirth":3,"mirthful":3,"mirthfully":3,"misbehave":-2,"misbehaved":-2,"misbehaves":-2,"misbehaving":-2,"misbranding":-3,"miscast":-2,"mischief":-1,"mischiefs":-1,"misclassified":-2,"misclassifies":-2,"misclassify":-2,"misconduct":-2,"misconducted":-2,"misconducting":-2,"misconducts":-2,"miserable":-3,"miserably":-3,"misery":-2,"misfire":-2,"misfortune":-2,"misgiving":-2,"misinformation":-2,"misinformed":-2,"misinterpreted":-2,"mislead":-3,"misleaded":-3,"misleading":-3,"misleads":-3,"misplace":-2,"misplaced":-2,"misplaces":-2,"misplacing":-2,"mispricing":-3,"misread":-1,"misreport":-2,"misreported":-2,"misreporting":-2,"misreports":-2,"misrepresent":-2,"misrepresentation":-2,"misrepresentations":-2,"misrepresented":-2,"misrepresenting":-2,"misrepresents":-2,"miss":-2,"missed":-2,"missing":-2,"mistake":-2,"mistaken":-2,"mistakes":-2,"mistaking":-2,"misunderstand":-2,"misunderstanding":-2,"misunderstands":-2,"misunderstood":-2,"misuse":-2,"misused":-2,"misuses":-2,"misusing":-2,"moan":-2,"moaned":-2,"moaning":-2,"moans":-2,"mock":-2,"mocked":-2,"mocking":-2,"mocks":-2,"modernize":2,"modernized":2,"modernizes":2,"modernizing":2,"mongering":-2,"monopolize":-2,"monopolized":-2,"monopolizes":-2,"monopolizing":-2,"monotone":-1,"moody":-1,"mope":-1,"moping":-1,"moron":-3,"motherfucker":-5,"motherfucking":-5,"motivate":1,"motivated":2,"motivating":2,"motivation":1,"mourn":-2,"mourned":-2,"mournful":-2,"mourning":-2,"mourns":-2,"muddy":-2,"mumpish":-2,"murder":-2,"murderer":-2,"murdering":-3,"murderous":-3,"murders":-2,"murky":-2,"myth":-1,"n00b":-2,"naive":-2,"narcissism":-2,"nasty":-3,"natural":1,"naรฏve":-2,"needy":-2,"negative":-2,"negativity":-2,"neglect":-2,"neglected":-2,"neglecting":-2,"neglects":-2,"nerves":-1,"nervous":-2,"nervously":-2,"nice":3,"nifty":2,"niggas":-5,"nigger":-5,"no":-1,"no fun":-3,"noble":2,"noblest":2,"noisy":-1,"non-approved":-2,"nonsense":-2,"noob":-2,"nosey":-2,"not good":-2,"not working":-3,"notable":2,"noticeable":2,"notorious":-2,"novel":2,"numb":-1,"nurturing":2,"nuts":-3,"obliterate":-2,"obliterated":-2,"obnoxious":-3,"obscene":-2,"obscenity":-2,"obsessed":2,"obsolete":-2,"obstacle":-2,"obstacles":-2,"obstinate":-2,"obstruct":-2,"obstructed":-2,"obstructing":-2,"obstruction":-2,"obstructs":-2,"odd":-2,"offence":-2,"offences":-2,"offend":-2,"offended":-2,"offender":-2,"offending":-2,"offends":-2,"offense":-2,"offenses":-2,"offensive":-2,"offensively":-2,"offline":-1,"oks":2,"ominous":3,"once-in-a-lifetime":3,"oops":-2,"opportunities":2,"opportunity":2,"oppressed":-2,"oppression":-2,"oppressions":-2,"oppressive":-2,"optimism":2,"optimistic":2,"optionless":-2,"ostracize":-2,"ostracized":-2,"ostracizes":-2,"ouch":-2,"outage":-2,"outages":-2,"outbreak":-2,"outbreaks":-2,"outcry":-2,"outmaneuvered":-2,"outnumbered":-2,"outrage":-3,"outraged":-3,"outrageous":-3,"outreach":2,"outstanding":5,"overjoyed":4,"overload":-1,"overlooked":-1,"overprotective":-2,"overran":-2,"overreact":-2,"overreacted":-2,"overreacting":-2,"overreaction":-2,"overreacts":-2,"oversell":-2,"overselling":-2,"oversells":-2,"oversight":-1,"oversimplification":-2,"oversimplified":-2,"oversimplifies":-2,"oversimplify":-2,"oversold":-2,"overstatement":-2,"overstatements":-2,"overweight":-1,"overwrought":-3,"oxymoron":-1,"pain":-2,"pained":-2,"painful":-2,"panic":-3,"panicked":-3,"panics":-3,"paradise":3,"paradox":-1,"pardon":2,"pardoned":2,"pardoning":2,"pardons":2,"parley":-1,"passion":1,"passionate":2,"passive":-1,"passively":-1,"pathetic":-2,"pay":-1,"peace":2,"peaceful":2,"peacefully":2,"penalize":-2,"penalized":-2,"penalizes":-2,"penalizing":-2,"penalty":-2,"pensive":-1,"perfect":3,"perfected":2,"perfection":3,"perfectly":3,"perfects":2,"peril":-2,"perjury":-3,"perpetrated":-2,"perpetrator":-2,"perpetrators":-2,"perplexed":-2,"persecute":-2,"persecuted":-2,"persecutes":-2,"persecuting":-2,"perturbed":-2,"pervert":-3,"pesky":-2,"pessimism":-2,"pessimistic":-2,"petrified":-2,"philanthropy":2,"phobic":-2,"picturesque":2,"pileup":-1,"pillage":-2,"pique":-2,"piqued":-2,"piss":-4,"pissed":-4,"pissing":-3,"piteous":-2,"pitied":-1,"pity":-2,"plague":-3,"plagued":-3,"plagues":-3,"plaguing":-3,"playful":2,"pleasant":3,"please":1,"pleased":3,"pleasurable":3,"pleasure":3,"plodding":-2,"poignant":2,"pointless":-2,"poised":-2,"poison":-2,"poisoned":-2,"poisons":-2,"polished":2,"polite":2,"politeness":2,"pollutant":-2,"pollute":-2,"polluted":-2,"polluter":-2,"polluters":-2,"pollutes":-2,"pollution":-2,"poor":-2,"poorer":-2,"poorest":-2,"poorly":-2,"popular":3,"popularity":3,"positive":2,"positively":2,"possessive":-2,"post-traumatic":-2,"postpone":-1,"postponed":-1,"postpones":-1,"postponing":-1,"poverty":-1,"powerful":2,"powerless":-2,"praise":3,"praised":3,"praises":3,"praising":3,"pray":1,"praying":1,"prays":1,"prblm":-2,"prblms":-2,"predatory":-2,"prepared":1,"pressure":-1,"pressured":-2,"pretend":-1,"pretending":-1,"pretends":-1,"pretty":1,"prevent":-1,"prevented":-1,"preventing":-1,"prevents":-1,"prick":-5,"prison":-2,"prisoner":-2,"prisoners":-2,"privileged":2,"proactive":2,"problem":-2,"problems":-2,"profit":2,"profitable":2,"profiteer":-2,"profits":2,"progress":2,"prohibit":-1,"prohibits":-1,"prominent":2,"promise":1,"promised":1,"promises":1,"promote":1,"promoted":1,"promotes":1,"promoting":1,"promptly":1,"propaganda":-2,"prosecute":-1,"prosecuted":-2,"prosecutes":-1,"prosecution":-1,"prospect":1,"prospects":1,"prosperity":3,"prosperous":3,"protect":1,"protected":1,"protects":1,"protest":-2,"protesters":-2,"protesting":-2,"protests":-2,"proud":2,"proudly":2,"provoke":-1,"provoked":-1,"provokes":-1,"provoking":-1,"prudence":2,"pseudoscience":-3,"psychopathic":-2,"punish":-2,"punished":-2,"punishes":-2,"punishing":-2,"punitive":-2,"pure":1,"purest":1,"purposeful":2,"pushy":-1,"puzzled":-2,"quaking":-2,"qualities":2,"quality":2,"questionable":-2,"questioned":-1,"questioning":-1,"racism":-3,"racist":-3,"racists":-3,"rage":-2,"rageful":-2,"rainy":-1,"rant":-3,"ranter":-3,"ranters":-3,"rants":-3,"rape":-4,"raped":-4,"rapist":-4,"rapture":2,"raptured":2,"raptures":2,"rapturous":4,"rash":-2,"ratified":2,"reach":1,"reached":1,"reaches":1,"reaching":1,"reassure":1,"reassured":1,"reassures":1,"reassuring":2,"rebel":-2,"rebellion":-2,"rebels":-2,"recession":-2,"reckless":-2,"recognition":2,"recommend":2,"recommended":2,"recommends":2,"redeemed":2,"refine":1,"refined":1,"refines":1,"refreshingly":2,"refuse":-2,"refused":-2,"refuses":-2,"refusing":-2,"regret":-2,"regretful":-2,"regrets":-2,"regretted":-2,"regretting":-2,"reigning":1,"reject":-1,"rejected":-1,"rejecting":-1,"rejection":-2,"rejects":-1,"rejoice":4,"rejoiced":4,"rejoices":4,"rejoicing":4,"relaxed":2,"relentless":-1,"reliability":2,"reliable":2,"reliably":2,"reliant":2,"relieve":1,"relieved":2,"relieves":1,"relieving":2,"relishing":2,"remarkable":2,"remorse":-2,"repellent":-2,"repercussion":-2,"repercussions":-2,"reprimand":-2,"reprimanded":-2,"reprimanding":-2,"reprimands":-2,"repulse":-1,"repulsed":-2,"repulsive":-2,"rescue":2,"rescued":2,"rescues":2,"resentful":-2,"resign":-1,"resigned":-1,"resigning":-1,"resigns":-1,"resolute":2,"resolution":2,"resolve":2,"resolved":2,"resolves":2,"resolving":2,"respect":2,"respected":2,"respects":2,"responsibility":1,"responsible":2,"responsive":2,"restful":2,"restless":-2,"restore":1,"restored":1,"restores":1,"restoring":1,"restrict":-2,"restricted":-2,"restricting":-2,"restriction":-2,"restrictive":-1,"restricts":-2,"retained":-1,"retard":-2,"retarded":-2,"retreat":-1,"revenge":-2,"revengeful":-2,"revered":2,"revive":2,"revives":2,"revolting":-2,"reward":2,"rewarded":2,"rewarding":2,"rewards":2,"rich":2,"richly":2,"ridiculous":-3,"rig":-1,"rigged":-1,"right direction":3,"righteousness":2,"rightful":2,"rightfully":2,"rigorous":3,"rigorously":3,"riot":-2,"riots":-2,"rise":1,"rises":1,"risk":-2,"risks":-2,"risky":-2,"riveting":3,"rob":-2,"robber":-2,"robed":-2,"robing":-2,"robs":-2,"robust":2,"rofl":4,"roflcopter":4,"roflmao":4,"romance":2,"romantical":2,"romantically":2,"rose":1,"rotfl":4,"rotflmfao":4,"rotflol":4,"rotten":-3,"rude":-2,"ruin":-2,"ruined":-2,"ruining":-2,"ruins":-2,"sabotage":-2,"sad":-2,"sadden":-2,"saddened":-2,"sadly":-2,"safe":1,"safely":1,"safer":2,"safety":1,"salient":1,"salute":2,"saluted":2,"salutes":2,"saluting":2,"salvation":2,"sappy":-1,"sarcastic":-2,"satisfied":2,"savange":-2,"savanges":-2,"save":2,"saved":2,"savings":1,"scam":-2,"scams":-2,"scandal":-3,"scandalous":-3,"scandals":-3,"scapegoat":-2,"scapegoats":-2,"scare":-2,"scared":-2,"scar":-2,"scars":-2,"scary":-2,"sceptical":-2,"scold":-2,"scoop":3,"scorn":-2,"scornful":-2,"scream":-2,"screamed":-2,"screaming":-2,"screams":-2,"screwed":-2,"screwed up":-3,"scum":-3,"scumbag":-4,"seamless":2,"seamlessly":2,"secure":2,"secured":2,"secures":2,"sedition":-2,"seditious":-2,"seduced":-1,"self-abuse":-2,"self-confident":2,"self-contradictory":-2,"self-deluded":-2,"selfish":-3,"selfishness":-3,"sentence":-2,"sentenced":-2,"sentences":-2,"sentencing":-2,"serene":2,"settlement":1,"settlements":1,"severe":-2,"severely":-2,"sexist":-2,"sexistic":-2,"sexy":3,"shaky":-2,"shame":-2,"shamed":-2,"shameful":-2,"share":1,"shared":1,"shares":1,"shattered":-2,"shit":-4,"shithead":-4,"shitty":-3,"shock":-2,"shocked":-2,"shocking":-2,"shocks":-2,"shoody":-2,"shoot":-1,"short-sighted":-2,"short-sightedness":-2,"shortage":-2,"shortages":-2,"shrew":-4,"shy":-1,"sick":-2,"sickness":-2,"side-effect":-2,"side-effects":-2,"sigh":-2,"significance":1,"significant":1,"silencing":-1,"silly":-1,"simplicity":1,"sin":-2,"sincere":2,"sincerely":2,"sincerest":2,"sincerity":2,"sinful":-3,"singleminded":-2,"sinister":-2,"sins":-2,"skeptic":-2,"skeptical":-2,"skepticism":-2,"skeptics":-2,"slam":-2,"slash":-2,"slashed":-2,"slashes":-2,"slashing":-2,"slave":-3,"slavery":-3,"slaves":-3,"sleeplessness":-2,"slick":2,"slicker":2,"slickest":2,"slip":-1,"sloppy":-2,"sluggish":-2,"slumping":-1,"slut":-5,"smart":1,"smarter":2,"smartest":2,"smear":-2,"smile":2,"smiled":2,"smiles":2,"smiling":2,"smog":-2,"smuggle":-2,"smuggled":-2,"smuggling":-2,"smuggles":-2,"sneaky":-1,"sneeze":-2,"sneezed":-2,"sneezes":-2,"sneezing":-2,"snub":-2,"snubbed":-2,"snubbing":-2,"snubs":-2,"sobering":1,"solemn":-1,"solid":2,"solidarity":2,"solidified":2,"solidifies":2,"solidify":2,"solidifying":2,"solution":1,"solutions":1,"solve":1,"solved":1,"solves":1,"solving":1,"somber":-2,"some kind":0,"son-of-a-bitch":-5,"soothe":3,"soothed":3,"soothing":3,"sophisticated":2,"sore":-1,"sorrow":-2,"sorrowful":-2,"sorry":-1,"spacious":1,"spam":-2,"spammer":-3,"spammers":-3,"spamming":-2,"spark":1,"sparkle":3,"sparkles":3,"sparkling":3,"spearhead":2,"speculative":-2,"spirit":1,"spirited":2,"spiritless":-2,"spiteful":-2,"splendid":3,"spoiled":-2,"spoilt":-2,"spotless":2,"sprightly":2,"squander":-2,"squandered":-2,"squandering":-2,"squanders":-2,"squelched":-1,"stab":-2,"stabbed":-2,"stable":2,"stabs":-2,"stall":-2,"stalled":-2,"stalling":-2,"stamina":2,"stampede":-2,"stank":-2,"startled":-2,"startling":3,"starve":-2,"starved":-2,"starves":-2,"starving":-2,"steadfast":2,"steal":-2,"stealing":-2,"steals":-2,"stereotype":-2,"stereotyped":-2,"stifled":-1,"stimulate":1,"stimulated":1,"stimulates":1,"stimulating":2,"stingy":-2,"stink":-2,"stinked":-2,"stinker":-2,"stinking":-2,"stinks":-2,"stinky":-2,"stole":-2,"stolen":-2,"stop":-1,"stopped":-1,"stopping":-1,"stops":-1,"stout":2,"straight":1,"strange":-1,"strangely":-1,"strangled":-2,"strength":2,"strengthen":2,"strengthened":2,"strengthening":2,"strengthens":2,"strengths":2,"stress":-1,"stressed":-2,"stressor":-2,"stressors":-2,"stricken":-2,"strike":-1,"strikers":-2,"strikes":-1,"strong":2,"stronger":2,"strongest":2,"struck":-1,"struggle":-2,"struggled":-2,"struggles":-2,"struggling":-2,"stubborn":-2,"stuck":-2,"stunned":-2,"stunning":4,"stupid":-2,"stupidity":-3,"stupidly":-2,"suave":2,"subpoena":-2,"substantial":1,"substantially":1,"subversive":-2,"succeed":3,"succeeded":3,"succeeding":3,"succeeds":3,"success":2,"successful":3,"successfully":3,"suck":-3,"sucks":-3,"sue":-2,"sued":-2,"sueing":-2,"sues":-2,"suffer":-2,"suffered":-2,"sufferer":-2,"sufferers":-2,"suffering":-2,"suffers":-2,"suicidal":-2,"suicide":-2,"suicides":-2,"suing":-2,"suitable":2,"suited":2,"sulking":-2,"sulky":-2,"sullen":-2,"sunshine":2,"super":3,"superb":5,"superior":2,"support":2,"supported":2,"supporter":1,"supporters":1,"supporting":1,"supportive":2,"supports":2,"supreme":4,"survived":2,"surviving":2,"survivor":2,"suspect":-1,"suspected":-1,"suspecting":-1,"suspects":-1,"suspend":-1,"suspended":-1,"suspicious":-2,"sustainability":1,"sustainable":2,"sustainably":2,"swear":-2,"swearing":-2,"swears":-2,"sweet":2,"sweeter":3,"sweetest":3,"swift":2,"swiftly":2,"swindle":-3,"swindles":-3,"swindling":-3,"sympathetic":2,"sympathy":2,"taint":-2,"tainted":-2,"talent":2,"tard":-2,"tarnish":-2,"tarnished":-2,"tarnishes":-2,"tears":-2,"tender":2,"tenderness":2,"tense":-2,"tension":-1,"terrible":-3,"terribly":-3,"terrific":4,"terrifically":4,"terrified":-3,"terror":-3,"terrorist":-2,"terrorists":-2,"terrorize":-3,"terrorized":-3,"terrorizes":-3,"thank":2,"thankful":2,"thanks":2,"thorny":-2,"thoughtful":2,"thoughtless":-2,"threat":-2,"threaten":-2,"threatened":-2,"threatening":-2,"threatens":-2,"threats":-2,"thrilled":5,"thwart":-2,"thwarted":-2,"thwarting":-2,"thwarts":-2,"timid":-2,"timorous":-2,"tired":-2,"tits":-2,"tolerance":2,"tolerant":2,"toothless":-2,"top":2,"tops":2,"torn":-2,"torture":-4,"tortured":-4,"tortures":-4,"torturing":-4,"totalitarian":-2,"totalitarianism":-2,"tout":-2,"touted":-2,"touting":-2,"touts":-2,"toxic":-3,"tragedies":-2,"tragedy":-2,"tragic":-2,"tranquil":2,"transgress":-2,"transgressed":-2,"transgresses":-2,"transgressing":-2,"trap":-1,"trapped":-2,"traps":-1,"trauma":-3,"traumatic":-3,"travesty":-2,"treason":-3,"treasonous":-3,"treasure":2,"treasures":2,"trembling":-2,"tremor":-2,"tremors":-2,"tremulous":-2,"tribulation":-2,"tribute":2,"tricked":-2,"trickery":-2,"triumph":4,"triumphant":4,"troll":-2,"trouble":-2,"troubled":-2,"troubles":-2,"troubling":-2,"true":2,"trust":1,"trusted":2,"trusts":1,"tumor":-2,"twat":-5,"tyran":-3,"tyrannic":-3,"tyrannical":-3,"tyrannically":-3,"tyrans":-3,"ubiquitous":2,"ugh":-2,"ugliness":-3,"ugly":-3,"unable":-2,"unacceptable":-2,"unappeasable":-2,"unappreciated":-2,"unapproved":-2,"unattractive":-2,"unavailable":-1,"unavailing":-2,"unaware":-2,"unbearable":-2,"unbelievable":-1,"unbelieving":-1,"unbiased":2,"uncertain":-1,"unclear":-1,"uncomfortable":-2,"unconcerned":-2,"unconfirmed":-1,"unconvinced":-1,"uncredited":-1,"undecided":-1,"undercooked":-2,"underestimate":-1,"underestimated":-1,"underestimates":-1,"underestimating":-1,"undermine":-2,"undermined":-2,"undermines":-2,"undermining":-2,"underperform":-2,"underperformed":-2,"underperforming":-2,"underperforms":-2,"undeserving":-2,"undesirable":-2,"uneasy":-2,"unemployed":-1,"unemployment":-2,"unequal":-1,"unequaled":2,"unethical":-2,"uneventful":-2,"unfair":-2,"unfavorable":-2,"unfit":-2,"unfitted":-2,"unfocused":-2,"unforgivable":-3,"unforgiving":-2,"unfulfilled":-2,"unfunny":-2,"ungenerous":-2,"ungrateful":-3,"unhappy":-2,"unhappiness":-2,"unhealthy":-2,"unhygienic":-2,"unified":1,"unimaginative":-2,"unimpressed":-2,"uninspired":-2,"unintelligent":-2,"unintentional":-2,"uninvolving":-2,"united":1,"unjust":-2,"unlikely":-1,"unlovable":-2,"unloved":-2,"unmatched":1,"unmotivated":-2,"unoriginal":-2,"unparliamentary":-2,"unpleasant":-2,"unpleasantness":-2,"unprofessional":-2,"unravel":1,"unreleting":-2,"unresearched":-2,"unsafe":-2,"unsatisfied":-2,"unscientific":-2,"unsecured":-2,"unselfish":2,"unsettled":-1,"unsold":-1,"unsophisticated":-2,"unsound":-2,"unstable":-2,"unstoppable":2,"unsuccessful":-2,"unsuccessfully":-2,"unsupported":-2,"unsure":-1,"untarnished":2,"untrue":-2,"unwanted":-2,"unworthy":-2,"uplifting":2,"uproar":-3,"upset":-2,"upsets":-2,"upsetting":-2,"uptight":-2,"urgent":-1,"useful":2,"usefulness":2,"useless":-2,"uselessness":-2,"vague":-2,"validate":1,"validated":1,"validates":1,"validating":1,"vapid":-2,"verdict":-1,"verdicts":-1,"vested":1,"vexation":-2,"vexing":-2,"vibrant":3,"vicious":-2,"victim":-3,"victimization":-3,"victimize":-3,"victimized":-3,"victimizes":-3,"victimizing":-3,"victims":-3,"victor":3,"victors":3,"victory":3,"victories":3,"vigilant":3,"vigor":3,"vile":-3,"vindicate":2,"vindicated":2,"vindicates":2,"vindicating":2,"violate":-2,"violated":-2,"violates":-2,"violating":-2,"violation":-2,"violations":-2,"violence":-3,"violence-related":-3,"violent":-3,"violently":-3,"virtuous":2,"virulent":-2,"vision":1,"visionary":3,"visioning":1,"visions":1,"vitality":3,"vitamin":1,"vitriolic":-3,"vivacious":3,"vividly":2,"vociferous":-1,"vomit":-3,"vomited":-3,"vomiting":-3,"vomits":-3,"vulnerability":-2,"vulnerable":-2,"walkout":-2,"walkouts":-2,"wanker":-3,"want":1,"war":-2,"warfare":-2,"warm":1,"warmhearted":2,"warmness":2,"warmth":2,"warn":-2,"warned":-2,"warning":-3,"warnings":-3,"warns":-2,"waste":-1,"wasted":-2,"wasting":-2,"wavering":-1,"weak":-2,"weakened":-2,"weakness":-2,"weaknesses":-2,"wealth":3,"wealthier":2,"wealthy":2,"weary":-2,"weep":-2,"weeping":-2,"weird":-2,"welcome":2,"welcomed":2,"welcomes":2,"well-being":2,"well-championed":3,"well-developed":2,"well-established":2,"well-focused":2,"well-groomed":2,"well-proportioned":2,"whimsical":1,"whitewash":-3,"whore":-4,"wicked":-2,"widowed":-1,"willingness":2,"win":4,"winner":4,"winning":4,"wins":4,"winwin":3,"wisdom":1,"wish":1,"wishes":1,"wishing":1,"withdrawal":-3,"wits":2,"woebegone":-2,"woeful":-3,"won":3,"wonderful":4,"wonderfully":4,"woo":3,"woohoo":3,"wooo":4,"woow":4,"worn":-1,"worried":-3,"worries":-3,"worry":-3,"worrying":-3,"worse":-3,"worsen":-3,"worsened":-3,"worsening":-3,"worsens":-3,"worshiped":3,"worst":-3,"worth":2,"worthless":-2,"worthy":2,"wow":4,"wowow":4,"wowww":4,"wrathful":-3,"wreck":-2,"wrenching":-2,"wrong":-2,"wrongdoing":-2,"wrongdoings":-2,"wronged":-2,"wrongful":-2,"wrongfully":-2,"wrongly":-2,"wtf":-4,"wtff":-4,"wtfff":-4,"xo":3,"xoxo":3,"xoxoxo":4,"xoxoxoxo":4,"yeah":1,"yearning":1,"yeees":2,"yes":1,"youthful":2,"yucky":-2,"yummy":3,"zealot":-2,"zealots":-2,"zealous":2,"":null} \ No newline at end of file diff --git a/build/build.js b/build/build.js index 64fba4d..806fb10 100644 --- a/build/build.js +++ b/build/build.js @@ -3,9 +3,8 @@ var fs = require('fs'); var path = require('path'); // File paths -var AFINN_PATH = path.resolve(__dirname, 'AFINN-en-165.txt'); var EMOJI_PATH = path.resolve(__dirname, 'Emoji_Sentiment_Data_v1.0.csv'); -var RESULT_PATH = path.resolve(__dirname, 'build.json'); +var RESULT_PATH = path.resolve(__dirname, 'emoji.json'); /** * Read emoji data from original format (CSV). @@ -49,35 +48,6 @@ function processEmoji(hash, callback) { }); } -/** - * Read AFINN data from original format (TSV). - * @param {object} hash Result hash - * @param {Function} callback Callback - * @return {void} - */ -function processAFINN(hash, callback) { - // Read file - fs.readFile(AFINN_PATH, 'utf8', function (err, data) { - if (err) return callback(err); - - // Split data by new line - data = data.split(/\n/); - - // Iterate over dataset and add to hash - for (var i in data) { - var line = data[i].split(/\t/); - - // Validate line - if (line[0] === '') continue; - - // Add to hash - hash[line[0]] = Number(line[1]); - } - - callback(null, hash); - }); -} - /** * Write sentiment score hash to disk. * @param {object} hash Result hash @@ -98,7 +68,6 @@ async.waterfall([ cb(null, {}); }, processEmoji, - processAFINN, finish ], function(err, result) { if (err) throw new Error(err); diff --git a/build/build.json b/build/build.json deleted file mode 100644 index 64e6c8b..0000000 --- a/build/build.json +++ /dev/null @@ -1,4151 +0,0 @@ -{ - "๐Ÿ˜‚": 1, - "โค": 3, - "โ™ฅ": 3, - "๐Ÿ˜": 3, - "๐Ÿ˜ญ": -1, - "๐Ÿ˜˜": 3, - "๐Ÿ˜Š": 3, - "๐Ÿ‘Œ": 2, - "๐Ÿ’•": 3, - "๐Ÿ‘": 2, - "๐Ÿ˜": 2, - "โ˜บ": 3, - "โ™ก": 3, - "๐Ÿ‘": 2, - "๐Ÿ˜ฉ": -2, - "๐Ÿ™": 2, - "โœŒ": 2, - "๐Ÿ˜": 1, - "๐Ÿ˜‰": 2, - "๐Ÿ™Œ": 2, - "๐Ÿ™ˆ": 2, - "๐Ÿ’ช": 2, - "๐Ÿ˜„": 2, - "๐Ÿ˜’": -2, - "๐Ÿ’ƒ": 3, - "๐Ÿ’–": 3, - "๐Ÿ˜ƒ": 2, - "๐Ÿ˜”": -1, - "๐ŸŽ‰": 3, - "๐Ÿ˜œ": 2, - "๐ŸŒธ": 3, - "๐Ÿ’œ": 3, - "๐Ÿ’™": 3, - "โœจ": 1, - "๐Ÿ’—": 3, - "โ˜…": 1, - "โ–ˆ": -1, - "โ˜€": 2, - "๐Ÿ˜ก": -1, - "๐Ÿ˜Ž": 2, - "๐Ÿ’‹": 3, - "๐Ÿ˜‹": 3, - "๐Ÿ™Š": 2, - "๐Ÿ˜ด": -1, - "๐ŸŽถ": 2, - "๐Ÿ’ž": 3, - "๐Ÿ˜Œ": 2, - "๐Ÿ”ซ": -1, - "๐Ÿ’›": 3, - "๐Ÿ’": 1, - "๐Ÿ’š": 3, - "โ™ซ": 1, - "๐Ÿ˜ž": -1, - "๐Ÿ˜†": 2, - "๐Ÿ˜": 2, - "๐Ÿ˜ช": -1, - "๐Ÿ˜ซ": -1, - "๐Ÿ‘Š": 1, - "๐Ÿ’€": -2, - "๐Ÿ˜€": 2, - "๐Ÿ˜š": 3, - "๐Ÿ˜ป": 3, - "๐Ÿ’˜": 3, - "โ˜•": 1, - "๐Ÿ‘‹": 2, - "๐ŸŽŠ": 3, - "๐Ÿ•": 2, - "โ„": 2, - "๐Ÿ˜•": -2, - "๐Ÿ’”": -1, - "๐Ÿ˜ค": -2, - "๐Ÿ˜ˆ": 1, - "โœˆ": 2, - "๐Ÿ”": 2, - "๐Ÿ˜ฐ": -1, - "โšฝ": 3, - "๐Ÿ˜‘": -2, - "๐Ÿ‘‘": 3, - "๐Ÿ‘‰": 1, - "๐Ÿƒ": 1, - "๐ŸŽ": 3, - "๐Ÿ˜ ": -2, - "๐Ÿง": 2, - "โ˜†": 2, - "๐Ÿ€": 1, - "๐ŸŽˆ": 3, - "๐ŸŽ…": 1, - "๐Ÿ˜“": -1, - "๐Ÿ˜ฃ": -2, - "๐Ÿ˜": -2, - "โœŠ": 2, - "๐Ÿ˜จ": -1, - "๐Ÿ˜–": -1, - "๐Ÿ’ค": 1, - "๐Ÿ’“": 3, - "๐Ÿ‘Ž": -1, - "๐Ÿ’ฆ": 2, - "โœ”": 1, - "๐Ÿ˜ท": -1, - "๐Ÿ™‹": 2, - "๐ŸŽ„": 2, - "๐Ÿ’ฉ": -1, - "๐ŸŽต": 2, - "๐Ÿ˜›": 3, - "๐Ÿ‘ฏ": 2, - "๐Ÿ’Ž": 2, - "๐ŸŒฟ": 1, - "๐ŸŽ‚": 3, - "๐ŸŒŸ": 1, - "๐Ÿ”ฎ": 1, - "๐Ÿ‘ซ": 1, - "๐Ÿ†": 3, - "โœ–": 1, - "โ˜": 1, - "๐Ÿ˜™": 3, - "โ›„": 2, - "๐Ÿ‘…": 2, - "โ™ช": 2, - "๐Ÿ‚": 2, - "๐Ÿ’": 1, - "๐ŸŒด": 2, - "๐Ÿ‘ˆ": 2, - "๐ŸŒน": 3, - "๐Ÿ™†": 2, - "๐Ÿ‘ป": 1, - "๐Ÿ’ฐ": 1, - "๐Ÿป": 2, - "๐Ÿ™…": -2, - "๐ŸŒž": 2, - "๐Ÿ": 2, - "โญ": 2, - "โ–ช": 1, - "๐ŸŽ€": 3, - "๐Ÿท": 1, - "๐Ÿ™‰": 1, - "๐ŸŒบ": 2, - "๐Ÿ’…": 1, - "๐Ÿถ": 2, - "๐ŸŒš": 2, - "๐Ÿ‘ฝ": 1, - "๐ŸŽค": 2, - "๐Ÿ‘ญ": 2, - "๐ŸŽง": 2, - "๐Ÿ‘†": 1, - "๐Ÿธ": 2, - "๐Ÿท": 2, - "ยฎ": 1, - "๐Ÿ‰": 3, - "๐Ÿ˜‡": 3, - "๐Ÿƒ": 2, - "๐Ÿ˜ฟ": -2, - "โ”‚": 1, - "๐Ÿบ": 2, - "โ–ถ": 1, - "๐Ÿ˜ฒ": -1, - "๐ŸŽธ": 2, - "๐Ÿน": 3, - "๐Ÿ’ซ": 2, - "๐Ÿ“š": 1, - "๐Ÿ˜ถ": -1, - "๐ŸŒท": 2, - "๐Ÿ’": 3, - "๐Ÿ’จ": 1, - "๐Ÿˆ": 2, - "๐Ÿ’": 2, - "โ˜”": 1, - "๐Ÿ‘ธ": 3, - "๐Ÿ‡ช": 3, - "โ–‘": -1, - "๐Ÿฉ": 1, - "๐Ÿ‘พ": 1, - "โ˜": 1, - "๐ŸŒป": 2, - "โ†ฟ": 3, - "๐Ÿฏ": 2, - "๐Ÿ‘ผ": 1, - "๐Ÿ”": 1, - "๐Ÿ˜ธ": 2, - "๐Ÿ‘ถ": 2, - "โ†พ": 3, - "๐Ÿ’": 3, - "๐ŸŒŠ": 2, - "๐Ÿฆ": 2, - "๐Ÿ“": 3, - "๐Ÿ‘‡": 1, - "๐Ÿ’†": 1, - "๐Ÿด": 2, - "๐Ÿ˜ง": -1, - "๐Ÿ‡ธ": 2, - "๐Ÿ˜ฎ": 1, - "๐Ÿšซ": -3, - "๐Ÿ˜ฝ": 2, - "๐ŸŒˆ": 2, - "๐Ÿ™€": 1, - "โš ": -1, - "๐ŸŽฎ": 2, - "โ•ฏ": -1, - "๐Ÿ†": 2, - "๐Ÿฐ": 2, - "โœ“": 1, - "๐Ÿ‘": -1, - "๐ŸŸ": 1, - "๐ŸŒ": 2, - "๐Ÿ’‘": 3, - "๐Ÿ‘ฌ": -1, - "๐Ÿฃ": 2, - "๐ŸŽƒ": 3, - "โ–ฌ": 2, - "๏ฟผ": -3, - "๐Ÿพ": 3, - "๐ŸŽ“": 2, - "๐ŸŠ": 2, - "๐Ÿ“ท": 2, - "๐Ÿ‘„": 2, - "๐ŸŒผ": 4, - "๐Ÿšถ": -1, - "๐Ÿฑ": 2, - "๐Ÿธ": -1, - "๐Ÿ‡บ": 2, - "๐Ÿ‘ฟ": -3, - "๐Ÿšฌ": 2, - "โœฟ": 1, - "๐Ÿ’": 2, - "๐ŸŒ": 3, - "โ”Š": 5, - "๐Ÿฅ": 3, - "๐Ÿผ": 1, - "๐ŸŽฅ": 1, - "๐Ÿ’„": 2, - "โ›”": 2, - "๐Ÿ€": 1, - "๐Ÿ’‰": 1, - "๐Ÿ’Ÿ": 3, - "๐Ÿš—": 1, - "๐Ÿ“": 1, - "โ™ฆ": 2, - "๐Ÿ’ญ": 1, - "๐ŸŒ™": 3, - "๐ŸŸ": 3, - "๐Ÿ‘ฃ": 1, - "โœ‚": -3, - "๐Ÿ—ฟ": 2, - "๐Ÿ‘ช": -1, - "๐Ÿญ": 1, - "๐ŸŒƒ": 2, - "โŒ": 1, - "๐Ÿฐ": 3, - "๐Ÿ’Š": 2, - "๐Ÿšจ": 3, - "๐Ÿ˜ฆ": -2, - "๐Ÿช": 1, - "๐Ÿฃ": -2, - "โœง": 1, - "๐ŸŽ†": 3, - "๐ŸŽŽ": 4, - "๐Ÿ‡ฉ": 3, - "โœ…": 2, - "๐Ÿ“ฑ": 1, - "๐Ÿ™": -2, - "๐Ÿ‘": 1, - "๐ŸŽผ": 1, - "๐Ÿ”Š": 2, - "๐ŸŒŒ": 2, - "๐ŸŽ": 1, - "๐Ÿป": 2, - "โ•ฐ": -1, - "๐Ÿ’‡": 1, - "โ™ฌ": 1, - "๐Ÿ”ด": 2, - "๐Ÿฑ": -2, - "๐ŸŠ": 2, - "๐Ÿ’": 1, - "๐Ÿญ": 3, - "๐Ÿ‘Ÿ": 2, - "๐ŸŒŽ": 1, - "๐Ÿ": 2, - "๐Ÿฎ": 3, - "๐Ÿ“ฒ": 1, - "โ˜ผ": 1, - "๐ŸŒ…": 1, - "๐Ÿ‡ท": 3, - "๐Ÿ‘ ": 1, - "๐ŸŒฝ": 2, - "๐Ÿ’ง": -1, - "๐Ÿฌ": 1, - "๐Ÿ˜บ": 2, - "๐Ÿš€": 2, - "ยฆ": 3, - "๐Ÿ’ข": 1, - "๐ŸŽฌ": 1, - "๐Ÿง": 1, - "๐Ÿœ": 2, - "๐Ÿ": 3, - "๐Ÿ„": 2, - "โžค": 1, - "โฌ†": 1, - "๐Ÿ‹": 1, - "๐Ÿ†—": 2, - "โšช": 2, - "๐Ÿ“บ": 2, - "๐Ÿ…": 1, - "โ›…": 2, - "๐Ÿข": 1, - "๐Ÿ‘™": 2, - "๐Ÿก": 2, - "๐ŸŒพ": 2, - "โ—‰": 1, - "โœ": 1, - "๐Ÿฌ": 2, - "๐Ÿ‡น": 3, - "โ™ฃ": 1, - "๐Ÿ": 1, - "๐ŸŒ": 1, - "๐Ÿ‡ฎ": 3, - "๐Ÿ”‹": -3, - "๐Ÿ": 1, - "โ™”": 2, - "๐Ÿ”ต": 1, - "๐Ÿ˜พ": -2, - "๐ŸŒ•": 3, - "๐Ÿจ": 2, - "๐Ÿ”": 1, - "๐Ÿ’ฟ": 3, - "๐ŸŒณ": 2, - "๐Ÿ‘ฐ": 2, - "โ€": 2, - "โš“": 3, - "๐Ÿšด": 3, - "โ–€": -1, - "๐Ÿ‘—": 1, - "โž•": 2, - "๐Ÿ’ฌ": 2, - "โ–’": -1, - "๐Ÿ”œ": 1, - "๐Ÿจ": 1, - "๐Ÿ’ฒ": 1, - "๐Ÿ™": 1, - "๐Ÿฅ": -4, - "โ–ธ": 1, - "โ™›": 1, - "๐Ÿ˜ผ": 1, - "๐Ÿ™": 2, - "๐Ÿ‘จ": 2, - "๐Ÿš": 2, - "โ™จ": 4, - "๐ŸŽน": 1, - "โ™•": 2, - "โ–ƒ": 5, - "๐Ÿ‡ฌ": 1, - "๐Ÿ‡ง": 1, - "โ˜ ": -1, - "๐Ÿ ": 2, - "๐Ÿšน": 3, - "๐Ÿ’ต": 2, - "โœฐ": 4, - "โ• ": 1, - "๐Ÿ‘›": 2, - "๐ŸŒฑ": 3, - "๐Ÿ’ป": 1, - "๐ŸŒ": 1, - "โ–„": -1, - "๐Ÿ‘“": 1, - "โ—„": 1, - "โšพ": -1, - "๐ŸŒฒ": 2, - "๐Ÿ‘ด": 1, - "๐Ÿ ": 2, - "๐Ÿ‡": 1, - "๐Ÿ˜": 2, - "๐Ÿ‡": 1, - "๐Ÿ”ž": -1, - "๐Ÿ‘ต": 2, - "โ—€": 1, - "๐Ÿ”™": 1, - "๐ŸŒต": 1, - "๐Ÿฎ": -1, - "๐ŸŽ‡": 3, - "๐ŸŽ": 2, - "โž”": -1, - "๐Ÿค": 2, - "โ•ฉ": 1, - "๐ŸŒ‘": 2, - "๐Ÿšฒ": 2, - "๐Ÿ‘": -1, - "๐Ÿ": 2, - "๐ŸŽพ": 3, - "โ•š": 1, - "๐Ÿˆน": 1, - "๐Ÿ‘ฎ": -2, - "โ˜น": -3, - "๐Ÿต": 2, - "โœช": 1, - "โ—•": 2, - "๐Ÿ—ผ": 3, - "โ–": -1, - "โ™ ": 1, - "โ”ณ": -2, - "๐Ÿ‘บ": -2, - "๐Ÿš": 1, - "๐Ÿ‘‚": -1, - "๐Ÿ—ฝ": 1, - "๐Ÿต": 2, - "๐Ÿ†’": 2, - "๐Ÿบ": 1, - "โ‡จ": 2, - "๐ŸŒ“": 3, - "๐Ÿ”’": 1, - "โ•ฌ": -1, - "๐Ÿ‘ณ": 3, - "๐ŸŒ‚": 1, - "๐ŸšŒ": 1, - "โ™ฉ": 3, - "๐Ÿก": -1, - "โฅ": 1, - "๐ŸŽก": 1, - "๐Ÿ’Œ": 2, - "๐Ÿฉ": 2, - "๐ŸŒœ": 2, - "โŒš": 1, - "๐Ÿšฟ": 3, - "๐Ÿ”†": 3, - "๐ŸŒ›": 3, - "๐Ÿ’‚": -1, - "๐Ÿ”": 1, - "๐Ÿ™Ž": -1, - "๐Ÿฉ": 2, - "๐Ÿ‡ซ": 2, - "๐Ÿ”จ": -1, - "๐Ÿ“ข": 2, - "๐Ÿฆ": 2, - "๐Ÿฒ": -1, - "โ™ป": 2, - "๐ŸŒ˜": 3, - "๐ŸŒ”": 3, - "๐Ÿ‘–": 2, - "๐Ÿ˜—": 3, - "๐Ÿ„": 1, - "โ—Ÿ": -1, - "๐Ÿข": -1, - "๐ŸŽจ": 1, - "โฌ‡": 2, - "๐Ÿšผ": 3, - "๐Ÿ‡ด": 2, - "๐ŸŒ—": 3, - "๐ŸŒ–": 3, - "๐Ÿ”…": 5, - "๐Ÿ‘œ": 1, - "๐ŸŒ": 3, - "๐Ÿ’ผ": 3, - "๐Ÿน": 1, - "๐ŸŒ ": 3, - "๐Ÿˆ": 1, - "๐ŸŒ": 1, - "โšซ": 1, - "โ™ง": 2, - "๐Ÿฐ": 1, - "๐Ÿšต": 2, - "๐ŸŽข": 2, - "๐ŸŽท": 3, - "๐ŸŽ": 1, - "โ”ˆ": -4, - "โ•—": 2, - "๐ŸŒ‡": 3, - "โฐ": 2, - "๐Ÿš‚": 1, - "โ— ": 2, - "๐ŸŽฟ": 2, - "๐Ÿ†”": 4, - "๐ŸŒ’": 3, - "๐Ÿช": 3, - "โ•”": 1, - "โ•": 2, - "๐Ÿ‘”": 2, - "๐Ÿ†“": 1, - "๐Ÿ‹": 1, - "โ–ฝ": 2, - "๐Ÿ›": 1, - "๐Ÿ‘•": 2, - "๐Ÿ’ณ": 2, - "๐Ÿง": 5, - "๐Ÿ’ก": 3, - "โฌ…": 2, - "๐Ÿซ": 2, - "๐Ÿ‡ฑ": 2, - "๐Ÿ“น": 2, - "๐Ÿ‘ž": 2, - "๐Ÿ‘š": 3, - "โ–ก": -2, - "๐Ÿšฃ": 3, - "๐Ÿ‰": 3, - "๐Ÿ—ป": 3, - "โ•ฆ": 2, - "โ›บ": 3, - "๐Ÿ•": 1, - "๐Ÿ‚": 2, - "๐Ÿ‘ก": 2, - "๐Ÿ“ป": 2, - "โœ’": 1, - "๐ŸŒฐ": 3, - "๐Ÿข": 1, - "๐ŸŽ’": 3, - "โŒ’": 3, - "๐Ÿซ": -2, - "๐Ÿ“ด": 4, - "๐Ÿšข": 1, - "๐Ÿšš": -1, - "๐Ÿ‰": 1, - "โ’": 1, - "๐Ÿ””": 5, - "โ—ข": 4, - "๐Ÿฅ": 1, - "๐Ÿš–": -1, - "โ–Œ": -2, - "โ˜›": 2, - "๐Ÿ’’": 3, - "๐Ÿšค": 2, - "๐Ÿ": 2, - "โ– ": -2, - "๐Ÿ”š": 2, - "๐ŸŽป": 2, - "๐Ÿ”ท": 1, - "๐ŸŽฝ": 2, - "๐Ÿ“…": 1, - "๐ŸŽบ": 3, - "๐Ÿˆ": -3, - "โœ‰": 1, - "โ—ค": 5, - "โ—‹": 3, - "๐Ÿผ": 3, - "๐Ÿš›": -2, - "๐Ÿ““": 1, - "โ˜‰": 1, - "๐Ÿ’ด": -2, - "โžฐ": -1, - "๐Ÿ”Œ": -1, - "๐Ÿ“•": 1, - "๐Ÿ“ฃ": 2, - "๐Ÿš“": 1, - "๐Ÿ—": 3, - "โ›ณ": 4, - "โ”ป": -3, - "โ”›": 3, - "โ”ƒ": 2, - "๐Ÿ’บ": 1, - "๐Ÿ‡": -1, - "โ˜ป": 1, - "๐Ÿ“ž": 2, - "โ’ถ": -1, - "๐ŸŒ‰": 3, - "๐Ÿšฉ": -2, - "โœŽ": 3, - "๐Ÿ“ƒ": 2, - "๐Ÿจ": 1, - "๐Ÿ“Œ": -3, - "โ™Ž": -1, - "๐Ÿ’ท": 2, - "๐Ÿš„": 3, - "โ–ฒ": 3, - "โ›ต": 3, - "๐Ÿ”ธ": 1, - "๐Ÿšœ": 5, - "๐Ÿ†": 2, - "๐Ÿ‘’": 1, - "โ•": 1, - "๐Ÿ”›": 2, - "โ™ข": 2, - "๐Ÿ‡ฒ": 2, - "โ…": 4, - "๐Ÿ‘": 2, - "โœž": 2, - "โ—ก": 1, - "๐ŸŽ‹": 3, - "๐Ÿ‘ฅ": 1, - "๐Ÿก": 1, - "โ—†": 4, - "๐Ÿ”ญ": 2, - "๐ŸŽช": 1, - "๐Ÿœ": 3, - "โ™Œ": 4, - "โ˜": -5, - "๐Ÿ‘ท": 1, - "๐Ÿ”ˆ": 1, - "๐Ÿ“„": 5, - "๐Ÿš": 4, - "๐ŸŒ‹": 3, - "๐Ÿ“ก": 1, - "๐Ÿšณ": 5, - "โœ˜": 4, - "๐Ÿ…ฐ": 1, - "๐Ÿ‡ผ": 2, - "โ”“": 3, - "โ”ฃ": 3, - "โ“": 2, - "โ’บ": 2, - "๐Ÿ‘ค": 4, - "๐Ÿš": 1, - "๐ŸŽ ": 3, - "๐Ÿ": -2, - "๐Ÿ“—": 1, - "โ”": -1, - "โ™‚": 1, - "๐Ÿ“ฏ": -1, - "๐Ÿ”ฉ": 1, - "๐Ÿ‘ข": 4, - "โ—‚": 2, - "๐Ÿ“ฐ": 1, - "๐Ÿ“ถ": 2, - "๐ŸŒ„": 1, - "๐Ÿ—พ": 2, - "๐Ÿ”ถ": 2, - "๐Ÿค": 2, - "๐ŸŽฉ": 2, - "โ“‚": 1, - "๐Ÿ”ง": -4, - "๐Ÿ…": 1, - "โ™ฎ": 1, - "๐Ÿ…พ": -1, - "๐Ÿ“ฆ": 1, - "๐ŸšŠ": 1, - "๐Ÿ”ฒ": 3, - "โ–ณ": 1, - "๐Ÿ“†": 5, - "โ›": 2, - "๐Ÿ“‰": 2, - "โ–ต": 2, - "๐Ÿ”Ž": 3, - "โ˜œ": 1, - "๐Ÿ‡ฏ": 2, - "๐Ÿ‡ต": 2, - "๐Ÿ“˜": 1, - "โ“”": 3, - "๐Ÿ”‘": 1, - "โญ•": 2, - "๐Ÿ”˜": 1, - "๐Ÿšญ": 5, - "๐Ÿš‰": 3, - "๐Ÿšช": 3, - "โžณ": 2, - "๐Ÿšƒ": 3, - "โ”ฏ": -3, - "๐Ÿ†™": 2, - "๐Ÿ†–": 1, - "โ”—": 5, - "โ“„": 2, - "โ‡": 3, - "โœด": 3, - "โ˜Š": 5, - "๐Ÿ”•": -2, - "โฌ›": -2, - "๐Ÿšž": 3, - "๐Ÿถ": 3, - "๐ŸŒ": 3, - "โ™€": 1, - "๐Ÿš…": 3, - "๐Ÿš’": -2, - "โ™‹": 1, - "โ™": 3, - "๐Ÿ•": -2, - "โ“": 5, - "๐Ÿ“™": 1, - "โ“ˆ": 1, - "๐Ÿ“‹": 3, - "๐ŸŽฑ": 1, - "๐Ÿž": 1, - "๐Ÿ”บ": 1, - "โ“ก": 5, - "โ™ค": 3, - "๐ŸŽฏ": 3, - "๐Ÿ”‰": 3, - "โ†ฉ": 5, - "๐Ÿšพ": 1, - "๐ŸŽฃ": -4, - "๐Ÿ”ฃ": 1, - "โŽ": -5, - "โžฅ": 1, - "๐ŸŽŒ": 5, - "โ—ฃ": 1, - "โฌ": 5, - "โ™ญ": 1, - "โ“ž": 5, - "๐Ÿ”ณ": 2, - "๐Ÿญ": 2, - "๐ŸŽณ": -3, - "โ˜š": 5, - "โžฝ": 2, - "โžซ": 2, - "โž–": -5, - "๊’ฐ": 2, - "๊’ฑ": 2, - "โ—": -3, - "๐Ÿ“‘": 5, - "โ“ง": 5, - "๐Ÿ”Ÿ": 5, - "ใ€“": 5, - "โ“œ": 2, - "โž ": 5, - "๐Ÿš†": 2, - "โ„…": -5, - "โ˜ƒ": 2, - "๐Ÿšฝ": 5, - "โ“": 5, - "โ‡ฆ": 5, - "๐Ÿ‘ฒ": 2, - "๐Ÿšก": -3, - "๐Ÿ”ฌ": 5, - "โž—": -3, - "๐Ÿ“ˆ": 2, - "โช": 2, - "โ—Ž": 5, - "๊’ฆ": -5, - "๐Ÿ“Ž": 5, - "โ‘…": 5, - "โœญ": 5, - "โ™“": 2, - "โ”": 5, - "โ˜‡": 5, - "เฟŽ": -5, - "๐Ÿ‘˜": 5, - "โ†™": 5, - "โ’ป": 2, - "โ“Œ": 2, - "โ“…": 2, - "๐Ÿ•‘": 2, - "๐Ÿ•›": 5, - "โ™ˆ": -5, - "โ†ฌ": 5, - "โœ": 5, - "๐Ÿฆ": 5, - "๐Ÿ”ป": 5, - "โ“Ÿ": 5, - "โ“•": 5, - "โ“˜": 5, - "โ™ฟ": 5, - "โ‡—": 5, - "โ‡˜": 5, - "โ“จ": 5, - "โ“™": 5, - "โ–ซ": 5, - "๐Ÿ”‡": 5, - "โŒƒ": -5, - "๐Ÿ”–": 5, - "๐Ÿ“œ": 5, - "๐Ÿš": 5, - "โ”˜": -5, - "โœ": -5, - "โฃ": -5, - "๐Ÿ“ฎ": -5, - "๐Ÿ••": -5, - "๐Ÿ”ฏ": 5, - "โžธ": 5, - "๊’ต": 5, - "๐Ÿ•ฅ": -5, - "โœฝ": 5, - "๐Ÿ“ผ": 5, - "๐Ÿ•": -5, - "๐Ÿ€„": 5, - "โœฌ": 5, - "โœซ": 5, - "๐Ÿ•”": -5, - "โฃ": 5, - "๐Ÿ“ซ": 5, - "๐Ÿ‰": 5, - "๐Ÿˆ‚": -5, - "๐ŸŽฐ": -5, - "า‚": -5, - "โ•ค": -5, - "๐Ÿ“”": 5, - "abandon": -2, - "abandoned": -2, - "abandons": -2, - "abducted": -2, - "abduction": -2, - "abductions": -2, - "abhor": -3, - "abhorred": -3, - "abhorrent": -3, - "abhors": -3, - "abilities": 2, - "ability": 2, - "aboard": 1, - "aborted": -1, - "aborts": -1, - "absentee": -1, - "absentees": -1, - "absolve": 2, - "absolved": 2, - "absolves": 2, - "absolving": 2, - "absorbed": 1, - "abuse": -3, - "abused": -3, - "abuses": -3, - "abusing": -3, - "abusive": -3, - "accept": 1, - "acceptable": 1, - "acceptance": 1, - "accepted": 1, - "accepting": 1, - "accepts": 1, - "accessible": 1, - "accident": -2, - "accidental": -2, - "accidentally": -2, - "accidents": -2, - "acclaim": 2, - "acclaimed": 2, - "accolade": 2, - "accomplish": 2, - "accomplished": 2, - "accomplishes": 2, - "accomplishment": 2, - "accomplishments": 2, - "accusation": -2, - "accusations": -2, - "accuse": -2, - "accused": -2, - "accuses": -2, - "accusing": -2, - "ache": -2, - "achievable": 1, - "aching": -2, - "acquit": 2, - "acquits": 2, - "acquitted": 2, - "acquitting": 2, - "acrimonious": -3, - "active": 1, - "adequate": 1, - "admire": 3, - "admired": 3, - "admires": 3, - "admiring": 3, - "admit": -1, - "admits": -1, - "admitted": -1, - "admonish": -2, - "admonished": -2, - "adopt": 1, - "adopts": 1, - "adorable": 3, - "adoration": 3, - "adore": 3, - "adored": 3, - "adores": 3, - "adoring": 3, - "adoringly": 3, - "advanced": 1, - "advantage": 2, - "advantageous": 2, - "advantageously": 2, - "advantages": 2, - "adventure": 2, - "adventures": 2, - "adventurous": 2, - "adversary": -1, - "advisable": 1, - "affected": -1, - "affection": 3, - "affectionate": 3, - "affectionateness": 3, - "afflicted": -1, - "affordable": 2, - "affronted": -1, - "aficionados": 2, - "afraid": -2, - "aggravate": -2, - "aggravated": -2, - "aggravates": -2, - "aggravating": -2, - "aggression": -2, - "aggressions": -2, - "aggressive": -2, - "aggressiveness": -2, - "aghast": -2, - "agog": 2, - "agonise": -3, - "agonised": -3, - "agonises": -3, - "agonising": -3, - "agonize": -3, - "agonized": -3, - "agonizes": -3, - "agonizing": -3, - "agree": 1, - "agreeable": 2, - "agreed": 1, - "agreement": 1, - "agrees": 1, - "alarm": -2, - "alarmed": -2, - "alarmist": -2, - "alarmists": -2, - "alas": -1, - "alert": -1, - "alienation": -2, - "alive": 1, - "allegation": -2, - "allegations": -2, - "allergic": -2, - "allow": 1, - "ally": 2, - "alone": -2, - "altruistic": 2, - "amaze": 2, - "amazed": 2, - "amazes": 2, - "amazing": 4, - "ambitious": 2, - "ambivalent": -1, - "amicable": 2, - "amuse": 3, - "amused": 3, - "amusement": 3, - "amusements": 3, - "anger": -3, - "angered": -3, - "angers": -3, - "angry": -3, - "anguish": -3, - "anguished": -3, - "animosity": -2, - "annoy": -2, - "annoyance": -2, - "annoyed": -2, - "annoying": -2, - "annoys": -2, - "antagonistic": -2, - "anti": -1, - "anticipation": 1, - "anxiety": -2, - "anxious": -2, - "apathetic": -3, - "apathy": -3, - "apeshit": -3, - "apocalyptic": -2, - "apologise": -1, - "apologised": -1, - "apologises": -1, - "apologising": -1, - "apologize": -1, - "apologized": -1, - "apologizes": -1, - "apologizing": -1, - "apology": -1, - "appalled": -2, - "appalling": -2, - "appealing": 2, - "appease": 2, - "appeased": 2, - "appeases": 2, - "appeasing": 2, - "applaud": 2, - "applauded": 2, - "applauding": 2, - "applauds": 2, - "applause": 2, - "appreciate": 2, - "appreciated": 2, - "appreciates": 2, - "appreciating": 2, - "appreciation": 2, - "apprehensive": -2, - "appropriate": 2, - "appropriately": 2, - "approval": 2, - "approved": 2, - "approves": 2, - "ardent": 1, - "arrest": -2, - "arrested": -3, - "arrests": -2, - "arrogant": -2, - "arsehole": -4, - "ashame": -2, - "ashamed": -2, - "ass": -4, - "assassination": -3, - "assassinations": -3, - "assault": -2, - "assaults": -2, - "asset": 2, - "assets": 2, - "assfucking": -4, - "asshole": -4, - "astonished": 2, - "astound": 3, - "astounded": 3, - "astounding": 3, - "astoundingly": 3, - "astounds": 3, - "atrocious": -3, - "atrocity": -3, - "attack": -1, - "attacked": -1, - "attacking": -1, - "attacks": -1, - "attract": 1, - "attracted": 1, - "attracting": 2, - "attraction": 2, - "attractions": 2, - "attractive": 2, - "attractively": 2, - "attractiveness": 2, - "attracts": 1, - "audacious": 3, - "aura": 1, - "authority": 1, - "avenge": -2, - "avenged": -2, - "avenger": -2, - "avengers": -2, - "avenges": -2, - "avenging": -2, - "avert": -1, - "averted": -1, - "averts": -1, - "avid": 2, - "avoid": -1, - "avoided": -1, - "avoids": -1, - "await": -1, - "awaited": -1, - "awaits": -1, - "award": 3, - "awarded": 3, - "awards": 3, - "awesome": 4, - "awful": -3, - "awkward": -2, - "axe": -1, - "axed": -1, - "backed": 1, - "backing": 2, - "backs": 1, - "bad": -3, - "bad luck": -2, - "badass": -3, - "badly": -3, - "badness": -3, - "bailout": -2, - "balanced": 1, - "bamboozle": -2, - "bamboozled": -2, - "bamboozles": -2, - "ban": -2, - "banish": -1, - "bankrupt": -3, - "bankruptcy": -3, - "bankster": -3, - "banned": -2, - "barbarian": -2, - "barbaric": -2, - "barbarous": -2, - "bargain": 2, - "barrier": -2, - "bastard": -5, - "bastards": -5, - "battle": -1, - "battled": -1, - "battles": -1, - "battling": -2, - "beaten": -2, - "beatific": 3, - "beating": -1, - "beauties": 3, - "beautiful": 3, - "beautifully": 3, - "beautify": 3, - "beauty": 3, - "befit": 2, - "befitting": 2, - "belittle": -2, - "belittled": -2, - "beloved": 3, - "benefactor": 2, - "benefactors": 2, - "benefit": 2, - "benefits": 2, - "benefitted": 2, - "benefitting": 2, - "benevolent": 3, - "bereave": -2, - "bereaved": -2, - "bereaves": -2, - "bereaving": -2, - "best": 3, - "best damn": 4, - "betray": -3, - "betrayal": -3, - "betrayed": -3, - "betraying": -3, - "betrays": -3, - "better": 2, - "bias": -1, - "biased": -2, - "big": 1, - "bitch": -5, - "bitches": -5, - "bitter": -2, - "bitterest": -2, - "bitterly": -2, - "bizarre": -2, - "blackmail": -3, - "blackmailed": -3, - "blackmailing": -3, - "blackmails": -3, - "blah": -2, - "blame": -2, - "blamed": -2, - "blames": -2, - "blaming": -2, - "bless": 2, - "blesses": 2, - "blessing": 3, - "blessings": 3, - "blind": -1, - "bliss": 3, - "blissful": 3, - "blithe": 2, - "bloated": -1, - "block": -1, - "blockade": -2, - "blockbuster": 3, - "blocked": -1, - "blocking": -1, - "blocks": -1, - "bloody": -3, - "blurry": -2, - "boastful": -2, - "bold": 2, - "boldly": 2, - "bomb": -1, - "boost": 1, - "boosted": 1, - "boosting": 1, - "boosts": 1, - "bore": -2, - "bored": -2, - "boring": -3, - "bother": -2, - "bothered": -2, - "bothers": -2, - "bothersome": -2, - "boycott": -2, - "boycotted": -2, - "boycotting": -2, - "boycotts": -2, - "brainwashing": -3, - "brave": 2, - "braveness": 2, - "bravery": 2, - "bravura": 3, - "breach": -2, - "breached": -2, - "breaches": -2, - "breaching": -2, - "breakthrough": 3, - "breathtaking": 5, - "bribe": -3, - "bribed": -3, - "bribes": -3, - "bribing": -3, - "bright": 1, - "brightest": 2, - "brightness": 1, - "brilliant": 4, - "brilliance": 3, - "brilliances": 3, - "brisk": 2, - "broke": -1, - "broken": -1, - "brooding": -2, - "brutal": -3, - "brutally": -3, - "bullied": -2, - "bullshit": -4, - "bully": -2, - "bullying": -2, - "bummer": -2, - "buoyant": 2, - "burden": -2, - "burdened": -2, - "burdening": -2, - "burdens": -2, - "burglar": -2, - "burglary": -2, - "calm": 2, - "calmed": 2, - "calming": 2, - "calms": 2, - "can't stand": -3, - "cancel": -1, - "cancelled": -1, - "cancelling": -1, - "cancels": -1, - "cancer": -1, - "capabilities": 1, - "capability": 1, - "capable": 1, - "captivated": 3, - "care": 2, - "carefree": 1, - "careful": 2, - "carefully": 2, - "carefulness": 2, - "careless": -2, - "cares": 2, - "caring": 2, - "cashing in": -2, - "casualty": -2, - "catastrophe": -3, - "catastrophic": -4, - "cautious": -1, - "celebrate": 3, - "celebrated": 3, - "celebrates": 3, - "celebrating": 3, - "celebration": 3, - "celebrations": 3, - "censor": -2, - "censored": -2, - "censors": -2, - "certain": 1, - "chagrin": -2, - "chagrined": -2, - "challenge": -1, - "champion": 2, - "championed": 2, - "champions": 2, - "chance": 2, - "chances": 2, - "chaos": -2, - "chaotic": -2, - "charged": -3, - "charges": -2, - "charisma": 2, - "charitable": 2, - "charm": 3, - "charming": 3, - "charmingly": 3, - "charmless": -3, - "chastise": -3, - "chastised": -3, - "chastises": -3, - "chastising": -3, - "cheat": -3, - "cheated": -3, - "cheater": -3, - "cheaters": -3, - "cheating": -3, - "cheats": -3, - "cheer": 2, - "cheered": 2, - "cheerful": 2, - "cheerfully": 2, - "cheering": 2, - "cheerless": -2, - "cheers": 2, - "cheery": 3, - "cherish": 2, - "cherished": 2, - "cherishes": 2, - "cherishing": 2, - "chic": 2, - "chide": -3, - "chided": -3, - "chides": -3, - "chiding": -3, - "childish": -2, - "chilling": -1, - "choke": -2, - "choked": -2, - "chokes": -2, - "choking": -2, - "clarifies": 2, - "clarity": 2, - "clash": -2, - "classy": 3, - "clean": 2, - "cleaner": 2, - "clear": 1, - "cleared": 1, - "clearly": 1, - "clears": 1, - "clever": 2, - "clouded": -1, - "clueless": -2, - "cock": -5, - "cocksucker": -5, - "cocksuckers": -5, - "cocky": -2, - "coerced": -2, - "coercion": -2, - "collapse": -2, - "collapsed": -2, - "collapses": -2, - "collapsing": -2, - "collide": -1, - "collides": -1, - "colliding": -1, - "collision": -2, - "collisions": -2, - "colluding": -3, - "combat": -1, - "combats": -1, - "comedy": 1, - "comfort": 2, - "comfortable": 2, - "comfortably": 2, - "comforting": 2, - "comforts": 2, - "comic": 1, - "commend": 2, - "commended": 2, - "commit": 1, - "commitment": 2, - "commits": 1, - "committed": 1, - "committing": 1, - "compassion": 2, - "compassionate": 2, - "compelled": 1, - "competencies": 1, - "competent": 2, - "competitive": 2, - "complacent": -2, - "complain": -2, - "complained": -2, - "complaining": -2, - "complains": -2, - "complaint": -2, - "complaints": -2, - "complicating": -2, - "compliment": 2, - "complimented": 2, - "compliments": 2, - "comprehensive": 2, - "concerned": -2, - "conciliate": 2, - "conciliated": 2, - "conciliates": 2, - "conciliating": 2, - "condemn": -2, - "condemnation": -2, - "condemned": -2, - "condemns": -2, - "confidence": 2, - "confident": 2, - "confidently": 2, - "conflict": -2, - "conflicting": -2, - "conflictive": -2, - "conflicts": -2, - "confuse": -2, - "confused": -2, - "confusing": -2, - "congrats": 2, - "congratulate": 2, - "congratulation": 2, - "congratulations": 2, - "consent": 2, - "consents": 2, - "consolable": 2, - "conspiracy": -3, - "constipation": -2, - "constrained": -2, - "contagion": -2, - "contagions": -2, - "contagious": -1, - "contaminant": -2, - "contaminants": -2, - "contaminate": -2, - "contaminated": -2, - "contaminates": -2, - "contaminating": -2, - "contamination": -2, - "contaminations": -2, - "contempt": -2, - "contemptible": -2, - "contemptuous": -2, - "contemptuously": -2, - "contend": -1, - "contender": -1, - "contending": -1, - "contentious": -2, - "contestable": -2, - "controversial": -2, - "controversially": -2, - "controversies": -2, - "controversy": -2, - "convicted": -2, - "convince": 1, - "convinced": 1, - "convinces": 1, - "convivial": 2, - "cool": 1, - "cool stuff": 3, - "cornered": -2, - "corpse": -1, - "corrupt": -3, - "corrupted": -3, - "corrupting": -3, - "corruption": -3, - "corrupts": -3, - "costly": -2, - "courage": 2, - "courageous": 2, - "courageously": 2, - "courageousness": 2, - "courteous": 2, - "courtesy": 2, - "cover-up": -3, - "coward": -2, - "cowardly": -2, - "coziness": 2, - "cramp": -1, - "crap": -3, - "crappy": -3, - "crash": -2, - "crazier": -2, - "craziest": -2, - "crazy": -2, - "creative": 2, - "crestfallen": -2, - "cried": -2, - "cries": -2, - "crime": -3, - "crimes": -3, - "criminal": -3, - "criminals": -3, - "criminate": -3, - "criminated": -3, - "criminates": -3, - "crisis": -3, - "critic": -2, - "criticise": -2, - "criticised": -2, - "criticises": -2, - "criticising": -2, - "criticism": -2, - "criticize": -2, - "criticized": -2, - "criticizes": -2, - "criticizing": -2, - "critics": -2, - "critique": -2, - "crowding": -1, - "crude": -1, - "cruel": -3, - "cruelty": -3, - "crush": -1, - "crushed": -2, - "crushes": -1, - "crushing": -1, - "cry": -1, - "crying": -2, - "cunning": 2, - "cunt": -5, - "curious": 1, - "curse": -1, - "cut": -1, - "cutback": -2, - "cutbacks": -2, - "cute": 2, - "cuts": -1, - "cutting": -1, - "cynic": -2, - "cynical": -2, - "cynicism": -2, - "damage": -3, - "damaged": -3, - "damages": -3, - "damaging": -3, - "damn": -2, - "damn cute": 3, - "damn good": 4, - "damned": -4, - "damnit": -4, - "danger": -2, - "dangerous": -2, - "dangerously": -2, - "daredevil": 2, - "daring": 2, - "darkest": -2, - "darkness": -1, - "dauntless": 2, - "dazzling": 3, - "dead": -3, - "deadening": -2, - "deadlock": -2, - "deadly": -3, - "deafening": -1, - "dear": 2, - "dearly": 3, - "death": -2, - "deaths": -2, - "debonair": 2, - "debt": -2, - "deceit": -3, - "deceitful": -3, - "deceive": -3, - "deceived": -3, - "deceives": -3, - "deceiving": -3, - "deception": -3, - "deceptive": -3, - "decisive": 1, - "dedicated": 2, - "dedication": 2, - "defeat": -2, - "defeated": -2, - "defect": -3, - "defective": -3, - "defects": -3, - "defender": 2, - "defenders": 2, - "defenseless": -2, - "defer": -1, - "deferring": -1, - "defiant": -1, - "deficient": -2, - "deficiency": -2, - "deficiencies": -2, - "deficit": -2, - "deformed": -2, - "deformities": -2, - "deformity": -2, - "defraud": -3, - "defrauds": -3, - "deft": 2, - "defunct": -2, - "degrade": -2, - "degraded": -2, - "degrades": -2, - "dehumanize": -2, - "dehumanized": -2, - "dehumanizes": -2, - "dehumanizing": -2, - "deject": -2, - "dejected": -2, - "dejecting": -2, - "dejects": -2, - "delay": -1, - "delayed": -1, - "delectable": 3, - "delicious": 3, - "delight": 3, - "delighted": 3, - "delightful": 3, - "delightfully": 3, - "delighting": 3, - "delights": 3, - "demand": -1, - "demanded": -1, - "demanding": -1, - "demands": -1, - "demonstration": -1, - "demoralize": -2, - "demoralized": -2, - "demoralizes": -2, - "demoralizing": -2, - "denial": -2, - "denials": -2, - "denied": -2, - "denier": -2, - "deniers": -2, - "denies": -2, - "denounce": -2, - "denounces": -2, - "dent": -2, - "deny": -2, - "denying": -2, - "deplore": -3, - "deplored": -3, - "deplores": -3, - "deploring": -3, - "deport": -2, - "deported": -2, - "deporting": -2, - "deports": -2, - "deportation": -2, - "deportations": -2, - "depressed": -2, - "depressing": -2, - "deprivation": -3, - "derail": -2, - "derailed": -2, - "derails": -2, - "derelict": -2, - "deride": -2, - "derided": -2, - "derides": -2, - "deriding": -2, - "derision": -2, - "desirable": 2, - "desire": 1, - "desired": 2, - "desirous": 2, - "despair": -3, - "despairing": -3, - "despairs": -3, - "desperate": -3, - "desperately": -3, - "despondent": -3, - "destroy": -3, - "destroyed": -3, - "destroying": -3, - "destroys": -3, - "destruction": -3, - "destructive": -3, - "detached": -1, - "detain": -2, - "detained": -2, - "detention": -2, - "deteriorate": -2, - "deteriorated": -2, - "deteriorates": -2, - "deteriorating": -2, - "determined": 2, - "deterrent": -2, - "detract": -1, - "detracted": -1, - "detracts": -1, - "devastate": -2, - "devastated": -2, - "devastating": -2, - "devastation": -2, - "devastations": -2, - "devoted": 3, - "devotion": 2, - "devotional": 2, - "diamond": 1, - "dick": -4, - "dickhead": -4, - "die": -3, - "died": -3, - "difficult": -1, - "diffident": -2, - "dignity": 2, - "dilemma": -1, - "dilligence": 2, - "dipshit": -3, - "dire": -3, - "direful": -3, - "dirt": -2, - "dirtier": -2, - "dirtiest": -2, - "dirty": -2, - "disabilities": -2, - "disability": -2, - "disabling": -1, - "disadvantage": -2, - "disadvantaged": -2, - "disagree": -2, - "disagreeable": -2, - "disagreement": -2, - "disappear": -1, - "disappeared": -1, - "disappears": -1, - "disappoint": -2, - "disappointed": -2, - "disappointing": -2, - "disappointment": -2, - "disappointments": -2, - "disappoints": -2, - "disapproval": -2, - "disapprovals": -2, - "disapprove": -2, - "disapproved": -2, - "disapproves": -2, - "disapproving": -2, - "disaster": -2, - "disasters": -2, - "disastrous": -3, - "disbelieve": -2, - "discard": -1, - "discarded": -1, - "discarding": -1, - "discards": -1, - "discernment": 2, - "discomfort": -2, - "disconsolate": -2, - "disconsolation": -2, - "discontented": -2, - "discord": -2, - "discounted": -1, - "discouraged": -2, - "discredited": -2, - "discriminate": -2, - "discriminated": -2, - "discriminates": -2, - "discriminating": -2, - "discriminatory": -2, - "disdain": -2, - "disease": -1, - "diseases": -1, - "disgrace": -2, - "disgraced": -2, - "disguise": -1, - "disguised": -1, - "disguises": -1, - "disguising": -1, - "disgust": -3, - "disgusted": -3, - "disgustful": -3, - "disgusting": -3, - "disheartened": -2, - "dishonest": -2, - "disillusioned": -2, - "disinclined": -2, - "disjointed": -2, - "dislike": -2, - "disliked": -2, - "dislikes": -2, - "dismal": -2, - "dismayed": -2, - "dismissed": -2, - "disorder": -2, - "disorders": -2, - "disorganized": -2, - "disoriented": -2, - "disparage": -2, - "disparaged": -2, - "disparages": -2, - "disparaging": -2, - "displeased": -2, - "displeasure": -2, - "disproportionate": -2, - "dispute": -2, - "disputed": -2, - "disputes": -2, - "disputing": -2, - "disqualified": -2, - "disquiet": -2, - "disregard": -2, - "disregarded": -2, - "disregarding": -2, - "disregards": -2, - "disrespect": -2, - "disrespected": -2, - "disrupt": -2, - "disrupted": -2, - "disrupting": -2, - "disruption": -2, - "disruptions": -2, - "disruptive": -2, - "disrupts": -2, - "dissatisfied": -2, - "distasteful": -2, - "distinguished": 2, - "distort": -2, - "distorted": -2, - "distorting": -2, - "distorts": -2, - "distract": -2, - "distracted": -2, - "distraction": -2, - "distracts": -2, - "distress": -2, - "distressed": -2, - "distresses": -2, - "distressing": -2, - "distrust": -3, - "distrustful": -3, - "disturb": -2, - "disturbed": -2, - "disturbing": -2, - "disturbs": -2, - "dithering": -2, - "diverting": -1, - "dizzy": -1, - "dodging": -2, - "dodgy": -2, - "does not work": -3, - "dolorous": -2, - "donate": 2, - "donated": 2, - "donates": 2, - "donating": 2, - "donation": 2, - "dont like": -2, - "doom": -2, - "doomed": -2, - "doubt": -1, - "doubted": -1, - "doubtful": -1, - "doubting": -1, - "doubts": -1, - "douche": -3, - "douchebag": -3, - "dour": -2, - "downcast": -2, - "downer": -2, - "downhearted": -2, - "downside": -2, - "drag": -1, - "dragged": -1, - "drags": -1, - "drained": -2, - "dread": -2, - "dreaded": -2, - "dreadful": -3, - "dreading": -2, - "dream": 1, - "dreams": 1, - "dreary": -2, - "droopy": -2, - "drop": -1, - "dropped": -1, - "drown": -2, - "drowned": -2, - "drowns": -2, - "drudgery": -2, - "drunk": -2, - "dubious": -2, - "dud": -2, - "dull": -2, - "dumb": -3, - "dumbass": -3, - "dump": -1, - "dumped": -2, - "dumps": -1, - "dupe": -2, - "duped": -2, - "dupery": -2, - "durable": 2, - "dying": -3, - "dysfunction": -2, - "eager": 2, - "earnest": 2, - "ease": 2, - "easy": 1, - "ecstatic": 4, - "eerie": -2, - "eery": -2, - "effective": 2, - "effectively": 2, - "effectiveness": 2, - "effortlessly": 2, - "elated": 3, - "elation": 3, - "elegant": 2, - "elegantly": 2, - "embarrass": -2, - "embarrassed": -2, - "embarrasses": -2, - "embarrassing": -2, - "embarrassment": -2, - "embezzlement": -3, - "embittered": -2, - "embrace": 1, - "emergency": -2, - "empathetic": 2, - "empower": 2, - "empowerment": 2, - "emptiness": -1, - "empty": -1, - "enchanted": 2, - "encourage": 2, - "encouraged": 2, - "encouragement": 2, - "encourages": 2, - "encouraging": 2, - "endorse": 2, - "endorsed": 2, - "endorsement": 2, - "endorses": 2, - "enemies": -2, - "enemy": -2, - "energetic": 2, - "engage": 1, - "engages": 1, - "engrossed": 1, - "engrossing": 3, - "enjoy": 2, - "enjoyable": 2, - "enjoyed": 2, - "enjoying": 2, - "enjoys": 2, - "enlighten": 2, - "enlightened": 2, - "enlightening": 2, - "enlightens": 2, - "ennui": -2, - "enrage": -2, - "enraged": -2, - "enrages": -2, - "enraging": -2, - "enrapture": 3, - "enslave": -2, - "enslaved": -2, - "enslaves": -2, - "ensure": 1, - "ensuring": 1, - "enterprising": 1, - "entertaining": 2, - "enthral": 3, - "enthusiastic": 3, - "entitled": 1, - "entrusted": 2, - "envies": -1, - "envious": -2, - "environment-friendly": 2, - "envy": -1, - "envying": -1, - "erroneous": -2, - "error": -2, - "errors": -2, - "escape": -1, - "escapes": -1, - "escaping": -1, - "esteem": 2, - "esteemed": 2, - "ethical": 2, - "euphoria": 3, - "euphoric": 4, - "evacuate": -1, - "evacuated": -1, - "evacuates": -1, - "evacuating": -1, - "evacuation": -1, - "evergreen": 2, - "evergreens": 2, - "evergreening": -3, - "eviction": -1, - "evil": -3, - "exacerbate": -2, - "exacerbated": -2, - "exacerbates": -2, - "exacerbating": -2, - "exaggerate": -2, - "exaggerated": -2, - "exaggerates": -2, - "exaggerating": -2, - "exasparate": -2, - "exasperated": -2, - "exasperates": -2, - "exasperating": -2, - "excellence": 3, - "excellent": 3, - "excite": 3, - "excited": 3, - "excitement": 3, - "exciting": 3, - "exclude": -1, - "excluded": -2, - "exclusion": -1, - "exclusive": 2, - "excruciatingly": -1, - "excuse": -1, - "exempt": -1, - "exhausted": -2, - "exhilarated": 3, - "exhilarates": 3, - "exhilarating": 3, - "exonerate": 2, - "exonerated": 2, - "exonerates": 2, - "exonerating": 2, - "expand": 1, - "expands": 1, - "expel": -2, - "expelled": -2, - "expelling": -2, - "expels": -2, - "expertly": 2, - "exploit": -2, - "exploited": -2, - "exploiting": -2, - "exploits": -2, - "exploration": 1, - "explorations": 1, - "expose": -1, - "exposed": -1, - "exposes": -1, - "exposing": -1, - "exquisite": 3, - "extend": 1, - "extends": 1, - "extremist": -2, - "extremists": -2, - "exuberant": 4, - "exultant": 3, - "exultantly": 3, - "fabulous": 4, - "fabulously": 4, - "fad": -2, - "fag": -3, - "faggot": -3, - "faggots": -3, - "fail": -2, - "failed": -2, - "failing": -2, - "fails": -2, - "failure": -2, - "failures": -2, - "fainthearted": -2, - "fair": 2, - "fairness": 2, - "faith": 1, - "faithful": 3, - "fake": -3, - "faker": -3, - "fakes": -3, - "faking": -3, - "fallen": -2, - "falling": -1, - "false": -1, - "falsely": -2, - "falsified": -3, - "falsify": -3, - "fame": 1, - "famine": -2, - "famous": 2, - "fan": 3, - "fantastic": 4, - "farce": -1, - "fascinate": 3, - "fascinated": 3, - "fascinates": 3, - "fascinating": 3, - "fascination": 3, - "fascist": -2, - "fascists": -2, - "fatal": -3, - "fatalities": -3, - "fatality": -3, - "fatigue": -2, - "fatigued": -2, - "fatigues": -2, - "fatiguing": -2, - "favor": 2, - "favorable": 2, - "favorably": 2, - "favored": 2, - "favorite": 2, - "favorited": 2, - "favorites": 2, - "favors": 2, - "favour": 2, - "favourable": 2, - "favourably": 2, - "favoured": 2, - "favourite": 2, - "favourited": 2, - "favourites": 2, - "favours": 2, - "fear": -2, - "fearful": -2, - "fearfully": -2, - "fearing": -2, - "fearless": 2, - "fearlessness": 2, - "fearsome": -2, - "fed up": -3, - "feeble": -2, - "feeling": 1, - "felonies": -3, - "felony": -3, - "fertile": 2, - "fervent": 2, - "fervid": 2, - "festive": 2, - "fever": -2, - "fiasco": -3, - "fidgety": -2, - "fight": -1, - "fighting": -2, - "fine": 2, - "fines": -2, - "finest": 3, - "fire": -2, - "fired": -2, - "firing": -2, - "fit": 1, - "fitness": 1, - "filth": -2, - "filthy": -2, - "flagship": 2, - "flaw": -2, - "flawed": -3, - "flawless": 2, - "flawlessly": 2, - "flaws": -2, - "flees": -1, - "flop": -2, - "flops": -2, - "flu": -2, - "flustered": -2, - "focused": 2, - "fond": 2, - "fondness": 2, - "fool": -2, - "foolish": -2, - "fools": -2, - "forbid": -1, - "forbidden": -2, - "forbidding": -2, - "forced": -1, - "foreclosure": -2, - "foreclosures": -2, - "forefront": 1, - "forget": -1, - "forgetful": -2, - "forgettable": -1, - "forgive": 1, - "forgiving": 1, - "forgot": -1, - "forgotten": -1, - "fortune": 2, - "fortunate": 2, - "fortunately": 2, - "foul": -3, - "frantic": -1, - "fraud": -4, - "frauds": -4, - "fraudster": -4, - "fraudsters": -4, - "fraudulence": -4, - "fraudulent": -4, - "freak": -2, - "free": 1, - "freedom": 2, - "freedoms": 2, - "frenzy": -3, - "fresh": 1, - "friend": 1, - "friendliness": 2, - "friendly": 2, - "friendship": 2, - "fright": -2, - "frightened": -2, - "frightening": -3, - "frikin": -2, - "frisky": 2, - "frowning": -1, - "fruitless": -2, - "frustrate": -2, - "frustrated": -2, - "frustrates": -2, - "frustrating": -2, - "frustration": -2, - "ftw": 3, - "fuck": -4, - "fucked": -4, - "fucker": -4, - "fuckers": -4, - "fuckface": -4, - "fuckhead": -4, - "fuckin": -4, - "fucking": -4, - "fucking amazing": 4, - "fucking beautiful": 4, - "fucking cute": 4, - "fucking fantastic": 4, - "fucking good": 4, - "fucking great": 4, - "fucking hot": 2, - "fucking love": 4, - "fucking loves": 4, - "fucking perfect": 4, - "fucktard": -4, - "fud": -3, - "fuked": -4, - "fuking": -4, - "fulfill": 2, - "fulfilled": 2, - "fulfillment": 2, - "fulfills": 2, - "fuming": -2, - "fun": 4, - "funeral": -1, - "funerals": -1, - "funky": 2, - "funnier": 4, - "funny": 4, - "furious": -3, - "futile": -2, - "gag": -2, - "gagged": -2, - "gain": 2, - "gained": 2, - "gaining": 2, - "gains": 2, - "gallant": 3, - "gallantly": 3, - "gallantry": 3, - "game-changing": 3, - "garbage": -1, - "gem": 3, - "generous": 2, - "generously": 2, - "genial": 3, - "ghastly": -2, - "ghost": -1, - "giddy": -2, - "gift": 2, - "glad": 3, - "glamorous": 3, - "glamourous": 3, - "glee": 3, - "gleeful": 3, - "gloom": -1, - "gloomy": -2, - "glorious": 2, - "glory": 2, - "glum": -2, - "god": 1, - "goddamn": -3, - "godsend": 4, - "gold": 2, - "good": 3, - "goodlooking": 3, - "goodmorning": 1, - "goodness": 3, - "goodwill": 3, - "goofiness": -2, - "goofy": -2, - "grace": 1, - "graceful": 2, - "gracious": 3, - "grand": 3, - "grant": 1, - "granted": 1, - "granting": 1, - "grants": 1, - "grateful": 3, - "gratification": 2, - "grave": -2, - "gray": -1, - "grisly": -2, - "gr8": 3, - "great": 3, - "greater": 3, - "greatest": 3, - "greed": -3, - "greedy": -2, - "green wash": -3, - "green washing": -3, - "greenwash": -3, - "greenwasher": -3, - "greenwashers": -3, - "greenwashing": -3, - "greet": 1, - "greeted": 1, - "greeting": 1, - "greetings": 2, - "greets": 1, - "grey": -1, - "grief": -2, - "grieved": -2, - "grim": -2, - "gripping": 2, - "groan": -2, - "groaned": -2, - "groaning": -2, - "groans": -2, - "gross": -2, - "growing": 1, - "growth": 2, - "growths": 2, - "gruesome": -3, - "guarantee": 1, - "guilt": -3, - "guilty": -3, - "gullibility": -2, - "gullible": -2, - "gun": -1, - "ha": 2, - "hacked": -1, - "haha": 3, - "hahaha": 3, - "hahahah": 3, - "hail": 2, - "hailed": 2, - "hallelujah": 3, - "handpicked": 1, - "handsome": 3, - "hapless": -2, - "haplessness": -2, - "happiest": 3, - "happiness": 3, - "happy": 3, - "harass": -3, - "harassed": -3, - "harasses": -3, - "harassing": -3, - "harassment": -3, - "hard": -1, - "hardier": 2, - "hardship": -2, - "hardy": 2, - "harm": -2, - "harmed": -2, - "harmful": -2, - "harming": -2, - "harmony": 2, - "harmonious": 2, - "harmoniously": 2, - "harms": -2, - "harried": -2, - "harsh": -2, - "harsher": -2, - "harshest": -2, - "harshly": -2, - "hate": -3, - "hated": -3, - "hater": -3, - "haters": -3, - "hates": -3, - "hating": -3, - "hatred": -3, - "haunt": -1, - "haunted": -2, - "haunting": 1, - "haunts": -1, - "havoc": -2, - "hazardous": -3, - "headache": -2, - "healthy": 2, - "heartbreaking": -3, - "heartbroken": -3, - "heartfelt": 3, - "heartless": -2, - "heartwarming": 3, - "heaven": 2, - "heavenly": 4, - "heavyhearted": -2, - "hehe": 2, - "hell": -4, - "hellish": -2, - "help": 2, - "helpful": 2, - "helping": 2, - "helpless": -2, - "helps": 2, - "hero": 2, - "heroes": 2, - "heroic": 3, - "hesitant": -2, - "hesitate": -2, - "hid": -1, - "hide": -1, - "hideous": -3, - "hides": -1, - "hiding": -1, - "highlight": 2, - "hilarious": 2, - "hinder": -2, - "hindrance": -2, - "hoax": -2, - "hollow": -1, - "homeless": -2, - "homesick": -2, - "homicide": -2, - "homicides": -2, - "honest": 2, - "honor": 2, - "honored": 2, - "honoring": 2, - "honour": 2, - "honoured": 2, - "honouring": 2, - "hooligan": -2, - "hooliganism": -2, - "hooligans": -2, - "hope": 2, - "hopeful": 2, - "hopefully": 2, - "hopeless": -2, - "hopelessness": -2, - "hopes": 2, - "hoping": 2, - "horrendous": -3, - "horrid": -3, - "horrible": -3, - "horrific": -3, - "horrified": -3, - "hospitalized": -2, - "hostile": -2, - "huckster": -2, - "hug": 2, - "huge": 1, - "hugs": 2, - "humane": 2, - "humble": 1, - "humbug": -2, - "humerous": 3, - "humiliated": -3, - "humiliation": -3, - "humor": 2, - "humorous": 2, - "humour": 2, - "humourous": 2, - "hunger": -2, - "hurrah": 5, - "hurt": -2, - "hurting": -2, - "hurts": -2, - "hypocritical": -2, - "hysteria": -3, - "hysterical": -3, - "hysterics": -3, - "icky": -3, - "idiocy": -3, - "idiot": -3, - "idiotic": -3, - "ignorance": -2, - "ignorant": -2, - "ignore": -1, - "ignored": -2, - "ignores": -1, - "ill": -2, - "ill-fated": -2, - "illegal": -3, - "illegally": -3, - "illegitimate": -3, - "illiteracy": -2, - "illness": -2, - "illnesses": -2, - "illogical": -2, - "imaginative": 2, - "imbecile": -3, - "immobilized": -1, - "immortal": 2, - "immune": 1, - "impair": -2, - "impaired": -2, - "impairing": -2, - "impairment": -2, - "impairs": -2, - "impatient": -2, - "impeachment": -3, - "impeachments": -3, - "impede": -2, - "impeded": -2, - "impedes": -2, - "impeding": -2, - "impedingly": -2, - "imperfect": -2, - "importance": 2, - "important": 2, - "impose": -1, - "imposed": -1, - "imposes": -1, - "imposing": -1, - "imposter": -2, - "impotent": -2, - "impress": 3, - "impressed": 3, - "impresses": 3, - "impressive": 3, - "imprisoned": -2, - "imprisonment": -2, - "improper": -2, - "improperly": -2, - "improve": 2, - "improved": 2, - "improvement": 2, - "improves": 2, - "improving": 2, - "inability": -2, - "inaction": -2, - "inadequate": -2, - "inadvertently": -2, - "inappropriate": -2, - "incapable": -2, - "incapacitated": -2, - "incapacitates": -2, - "incapacitating": -2, - "incense": -2, - "incensed": -2, - "incenses": -2, - "incensing": -2, - "incoherent": -2, - "incompetence": -2, - "incompetent": -2, - "incomplete": -1, - "incomprehensible": -2, - "inconsiderate": -2, - "inconvenience": -2, - "inconvenient": -2, - "increase": 1, - "increased": 1, - "indecisive": -2, - "indestructible": 2, - "indicted": -2, - "indifference": -2, - "indifferent": -2, - "indignant": -2, - "indignation": -2, - "indoctrinate": -2, - "indoctrinated": -2, - "indoctrinates": -2, - "indoctrinating": -2, - "inediable": -2, - "inexorable": -3, - "inexcusable": -3, - "ineffective": -2, - "ineffectively": -2, - "ineffectual": -2, - "inefficiency": -2, - "inefficient": -2, - "inefficiently": -2, - "inept": -2, - "ineptitude": -2, - "infantile": -2, - "infantilized": -2, - "infatuated": 2, - "infatuation": 2, - "infect": -2, - "infected": -2, - "infecting": -2, - "infection": -2, - "infections": -2, - "infectious": -2, - "infects": -2, - "inferior": -2, - "infest": -2, - "infested": -2, - "infesting": -2, - "infests": -2, - "inflamed": -2, - "inflict": -2, - "inflicted": -2, - "inflicting": -2, - "inflicts": -2, - "influential": 2, - "infract": -2, - "infracted": -2, - "infracting": -2, - "infracts": -2, - "infringement": -2, - "infuriate": -2, - "infuriated": -2, - "infuriates": -2, - "infuriating": -2, - "inhibit": -1, - "inhuman": -2, - "injured": -2, - "injuries": -2, - "injury": -2, - "injustice": -2, - "innovate": 1, - "innovates": 1, - "innovation": 1, - "innovative": 2, - "inoperative": -2, - "inquisition": -2, - "inquisitive": 2, - "insane": -2, - "insanity": -2, - "insecure": -2, - "insensitive": -2, - "insensitivity": -2, - "insignificant": -2, - "insipid": -2, - "insolvent": -2, - "insomnia": -2, - "inspiration": 2, - "inspirational": 2, - "inspire": 2, - "inspired": 2, - "inspires": 2, - "inspiring": 3, - "insufficiency": -2, - "insufficient": -2, - "insufficiently": -2, - "insult": -2, - "insulted": -2, - "insulting": -2, - "insults": -2, - "intact": 2, - "integrity": 2, - "intelligent": 2, - "intense": 1, - "interest": 1, - "interested": 2, - "interesting": 2, - "interests": 1, - "interrogated": -2, - "interrupt": -2, - "interrupted": -2, - "interrupting": -2, - "interruption": -2, - "interrupts": -2, - "intimacy": 2, - "intimidate": -2, - "intimidated": -2, - "intimidates": -2, - "intimidating": -2, - "intimidation": -2, - "intransigence": -2, - "intransigency": -2, - "intricate": 2, - "intrigues": 1, - "invasion": -1, - "invincible": 2, - "invite": 1, - "inviting": 1, - "invulnerable": 2, - "irate": -3, - "ironic": -1, - "irony": -1, - "irrational": -1, - "irreparable": -2, - "irreproducible": -2, - "irresistible": 2, - "irresistibly": 2, - "irresolute": -2, - "irresponsible": -2, - "irresponsibly": -2, - "irreversible": -1, - "irreversibly": -1, - "irritate": -3, - "irritated": -3, - "irritates": -3, - "irritating": -3, - "isolated": -1, - "itchy": -2, - "jackass": -4, - "jackasses": -4, - "jailed": -2, - "jaunty": 2, - "jealous": -2, - "jealousy": -2, - "jeopardy": -2, - "jerk": -3, - "jesus": 1, - "jewel": 1, - "jewels": 1, - "jocular": 2, - "join": 1, - "joke": 2, - "jokes": 2, - "jolly": 2, - "jovial": 2, - "joy": 3, - "joyful": 3, - "joyfully": 3, - "joyless": -2, - "joyous": 3, - "jubilant": 3, - "jumpy": -1, - "justice": 2, - "justifiably": 2, - "justified": 2, - "keen": 1, - "kickback": -3, - "kickbacks": -3, - "kidnap": -2, - "kidnapped": -2, - "kidnapping": -2, - "kidnappings": -2, - "kidnaps": -2, - "kill": -3, - "killed": -3, - "killing": -3, - "kills": -3, - "kind": 2, - "kind of": 0, - "kinder": 2, - "kindness": 2, - "kiss": 2, - "kudos": 3, - "lack": -2, - "lackadaisical": -2, - "lag": -1, - "lagged": -2, - "lagging": -2, - "lags": -2, - "lame": -2, - "landmark": 2, - "lapse": -1, - "lapsed": -1, - "laugh": 1, - "laughed": 1, - "laughing": 1, - "laughs": 1, - "laughting": 1, - "launched": 1, - "lawl": 3, - "lawsuit": -2, - "lawsuits": -2, - "lazy": -1, - "leadership": 1, - "leading": 2, - "leak": -1, - "leaked": -1, - "leave": -1, - "legal": 1, - "legally": 1, - "lenient": 1, - "lethal": -2, - "lethality": -2, - "lethargic": -2, - "lethargy": -2, - "liar": -3, - "liars": -3, - "libelous": -2, - "lied": -2, - "lifeless": -1, - "lifesaver": 4, - "lighthearted": 1, - "likable": 2, - "like": 2, - "likeable": 2, - "liked": 2, - "likers": 2, - "likes": 2, - "liking": 2, - "limitation": -1, - "limited": -1, - "limits": -1, - "litigation": -1, - "litigious": -2, - "lively": 2, - "livid": -2, - "lmao": 4, - "lmfao": 4, - "loathe": -3, - "loathed": -3, - "loathes": -3, - "loathing": -3, - "loathsome": -3, - "lobbied": -2, - "lobby": -2, - "lobbying": -2, - "lobbyist": -2, - "lobbyists": -2, - "lol": 3, - "lolol": 4, - "lololol": 4, - "lolololol": 4, - "lonely": -2, - "lonesome": -2, - "longing": -1, - "lool": 3, - "loom": -1, - "loomed": -1, - "looming": -1, - "looms": -1, - "loool": 3, - "looool": 3, - "loose": -3, - "looses": -3, - "loser": -3, - "losing": -3, - "loss": -3, - "losses": -3, - "lost": -3, - "lousy": -2, - "lovable": 3, - "love": 3, - "loved": 3, - "lovelies": 3, - "lovely": 3, - "loves": 3, - "loving": 2, - "loving-kindness": 3, - "lowest": -1, - "loyal": 3, - "loyalty": 3, - "luck": 3, - "luckily": 3, - "lucky": 3, - "lucrative": 3, - "ludicrous": -3, - "lugubrious": -2, - "lunatic": -3, - "lunatics": -3, - "lurk": -1, - "lurking": -1, - "lurks": -1, - "luxury": 2, - "macabre": -2, - "mad": -3, - "maddening": -3, - "made-up": -1, - "madly": -3, - "madness": -3, - "magnificent": 3, - "maladaption": -2, - "maldevelopment": -2, - "maltreatment": -2, - "mandatory": -1, - "manipulated": -1, - "manipulating": -1, - "manipulation": -1, - "manslaughter": -3, - "marvel": 3, - "marvelous": 3, - "marvels": 3, - "masterpiece": 4, - "masterpieces": 4, - "matter": 1, - "matters": 1, - "mature": 2, - "meaningful": 2, - "meaningless": -2, - "medal": 3, - "mediocrity": -3, - "meditative": 1, - "melancholy": -2, - "memorable": 1, - "memoriam": -2, - "menace": -2, - "menaced": -2, - "menaces": -2, - "mercy": 2, - "merry": 3, - "mesmerizing": 3, - "mess": -2, - "messed": -2, - "messing up": -2, - "methodical": 2, - "methodically": 2, - "mindless": -2, - "miracle": 4, - "mirth": 3, - "mirthful": 3, - "mirthfully": 3, - "misbehave": -2, - "misbehaved": -2, - "misbehaves": -2, - "misbehaving": -2, - "misbranding": -3, - "miscast": -2, - "mischief": -1, - "mischiefs": -1, - "misclassified": -2, - "misclassifies": -2, - "misclassify": -2, - "misconduct": -2, - "misconducted": -2, - "misconducting": -2, - "misconducts": -2, - "miserable": -3, - "miserably": -3, - "misery": -2, - "misfire": -2, - "misfortune": -2, - "misgiving": -2, - "misinformation": -2, - "misinformed": -2, - "misinterpreted": -2, - "mislead": -3, - "misleaded": -3, - "misleading": -3, - "misleads": -3, - "misplace": -2, - "misplaced": -2, - "misplaces": -2, - "misplacing": -2, - "mispricing": -3, - "misread": -1, - "misreport": -2, - "misreported": -2, - "misreporting": -2, - "misreports": -2, - "misrepresent": -2, - "misrepresentation": -2, - "misrepresentations": -2, - "misrepresented": -2, - "misrepresenting": -2, - "misrepresents": -2, - "miss": -2, - "missed": -2, - "missing": -2, - "mistake": -2, - "mistaken": -2, - "mistakes": -2, - "mistaking": -2, - "misunderstand": -2, - "misunderstanding": -2, - "misunderstands": -2, - "misunderstood": -2, - "misuse": -2, - "misused": -2, - "misuses": -2, - "misusing": -2, - "moan": -2, - "moaned": -2, - "moaning": -2, - "moans": -2, - "mock": -2, - "mocked": -2, - "mocking": -2, - "mocks": -2, - "modernize": 2, - "modernized": 2, - "modernizes": 2, - "modernizing": 2, - "mongering": -2, - "monopolize": -2, - "monopolized": -2, - "monopolizes": -2, - "monopolizing": -2, - "monotone": -1, - "moody": -1, - "mope": -1, - "moping": -1, - "moron": -3, - "motherfucker": -5, - "motherfucking": -5, - "motivate": 1, - "motivated": 2, - "motivating": 2, - "motivation": 1, - "mourn": -2, - "mourned": -2, - "mournful": -2, - "mourning": -2, - "mourns": -2, - "muddy": -2, - "mumpish": -2, - "murder": -2, - "murderer": -2, - "murdering": -3, - "murderous": -3, - "murders": -2, - "murky": -2, - "myth": -1, - "n00b": -2, - "naive": -2, - "narcissism": -2, - "nasty": -3, - "natural": 1, - "naรฏve": -2, - "needy": -2, - "negative": -2, - "negativity": -2, - "neglect": -2, - "neglected": -2, - "neglecting": -2, - "neglects": -2, - "nerves": -1, - "nervous": -2, - "nervously": -2, - "nice": 3, - "nifty": 2, - "niggas": -5, - "nigger": -5, - "no": -1, - "no fun": -3, - "noble": 2, - "noblest": 2, - "noisy": -1, - "non-approved": -2, - "nonsense": -2, - "noob": -2, - "nosey": -2, - "not good": -2, - "not working": -3, - "notable": 2, - "noticeable": 2, - "notorious": -2, - "novel": 2, - "numb": -1, - "nurturing": 2, - "nuts": -3, - "obliterate": -2, - "obliterated": -2, - "obnoxious": -3, - "obscene": -2, - "obscenity": -2, - "obsessed": 2, - "obsolete": -2, - "obstacle": -2, - "obstacles": -2, - "obstinate": -2, - "obstruct": -2, - "obstructed": -2, - "obstructing": -2, - "obstruction": -2, - "obstructs": -2, - "odd": -2, - "offence": -2, - "offences": -2, - "offend": -2, - "offended": -2, - "offender": -2, - "offending": -2, - "offends": -2, - "offense": -2, - "offenses": -2, - "offensive": -2, - "offensively": -2, - "offline": -1, - "oks": 2, - "ominous": 3, - "once-in-a-lifetime": 3, - "oops": -2, - "opportunities": 2, - "opportunity": 2, - "oppressed": -2, - "oppression": -2, - "oppressions": -2, - "oppressive": -2, - "optimism": 2, - "optimistic": 2, - "optionless": -2, - "ostracize": -2, - "ostracized": -2, - "ostracizes": -2, - "ouch": -2, - "outage": -2, - "outages": -2, - "outbreak": -2, - "outbreaks": -2, - "outcry": -2, - "outmaneuvered": -2, - "outnumbered": -2, - "outrage": -3, - "outraged": -3, - "outrageous": -3, - "outreach": 2, - "outstanding": 5, - "overjoyed": 4, - "overload": -1, - "overlooked": -1, - "overprotective": -2, - "overran": -2, - "overreact": -2, - "overreacted": -2, - "overreacting": -2, - "overreaction": -2, - "overreacts": -2, - "oversell": -2, - "overselling": -2, - "oversells": -2, - "oversight": -1, - "oversimplification": -2, - "oversimplified": -2, - "oversimplifies": -2, - "oversimplify": -2, - "oversold": -2, - "overstatement": -2, - "overstatements": -2, - "overweight": -1, - "overwrought": -3, - "oxymoron": -1, - "pain": -2, - "pained": -2, - "painful": -2, - "panic": -3, - "panicked": -3, - "panics": -3, - "paradise": 3, - "paradox": -1, - "pardon": 2, - "pardoned": 2, - "pardoning": 2, - "pardons": 2, - "parley": -1, - "passion": 1, - "passionate": 2, - "passive": -1, - "passively": -1, - "pathetic": -2, - "pay": -1, - "peace": 2, - "peaceful": 2, - "peacefully": 2, - "penalize": -2, - "penalized": -2, - "penalizes": -2, - "penalizing": -2, - "penalty": -2, - "pensive": -1, - "perfect": 3, - "perfected": 2, - "perfection": 3, - "perfectly": 3, - "perfects": 2, - "peril": -2, - "perjury": -3, - "perpetrated": -2, - "perpetrator": -2, - "perpetrators": -2, - "perplexed": -2, - "persecute": -2, - "persecuted": -2, - "persecutes": -2, - "persecuting": -2, - "perturbed": -2, - "pervert": -3, - "pesky": -2, - "pessimism": -2, - "pessimistic": -2, - "petrified": -2, - "philanthropy": 2, - "phobic": -2, - "picturesque": 2, - "pileup": -1, - "pillage": -2, - "pique": -2, - "piqued": -2, - "piss": -4, - "pissed": -4, - "pissing": -3, - "piteous": -2, - "pitied": -1, - "pity": -2, - "plague": -3, - "plagued": -3, - "plagues": -3, - "plaguing": -3, - "playful": 2, - "pleasant": 3, - "please": 1, - "pleased": 3, - "pleasurable": 3, - "pleasure": 3, - "plodding": -2, - "poignant": 2, - "pointless": -2, - "poised": -2, - "poison": -2, - "poisoned": -2, - "poisons": -2, - "polished": 2, - "polite": 2, - "politeness": 2, - "pollutant": -2, - "pollute": -2, - "polluted": -2, - "polluter": -2, - "polluters": -2, - "pollutes": -2, - "pollution": -2, - "poor": -2, - "poorer": -2, - "poorest": -2, - "poorly": -2, - "popular": 3, - "popularity": 3, - "positive": 2, - "positively": 2, - "possessive": -2, - "post-traumatic": -2, - "postpone": -1, - "postponed": -1, - "postpones": -1, - "postponing": -1, - "poverty": -1, - "powerful": 2, - "powerless": -2, - "praise": 3, - "praised": 3, - "praises": 3, - "praising": 3, - "pray": 1, - "praying": 1, - "prays": 1, - "prblm": -2, - "prblms": -2, - "predatory": -2, - "prepared": 1, - "pressure": -1, - "pressured": -2, - "pretend": -1, - "pretending": -1, - "pretends": -1, - "pretty": 1, - "prevent": -1, - "prevented": -1, - "preventing": -1, - "prevents": -1, - "prick": -5, - "prison": -2, - "prisoner": -2, - "prisoners": -2, - "privileged": 2, - "proactive": 2, - "problem": -2, - "problems": -2, - "profit": 2, - "profitable": 2, - "profiteer": -2, - "profits": 2, - "progress": 2, - "prohibit": -1, - "prohibits": -1, - "prominent": 2, - "promise": 1, - "promised": 1, - "promises": 1, - "promote": 1, - "promoted": 1, - "promotes": 1, - "promoting": 1, - "promptly": 1, - "propaganda": -2, - "prosecute": -1, - "prosecuted": -2, - "prosecutes": -1, - "prosecution": -1, - "prospect": 1, - "prospects": 1, - "prosperity": 3, - "prosperous": 3, - "protect": 1, - "protected": 1, - "protects": 1, - "protest": -2, - "protesters": -2, - "protesting": -2, - "protests": -2, - "proud": 2, - "proudly": 2, - "provoke": -1, - "provoked": -1, - "provokes": -1, - "provoking": -1, - "prudence": 2, - "pseudoscience": -3, - "psychopathic": -2, - "punish": -2, - "punished": -2, - "punishes": -2, - "punishing": -2, - "punitive": -2, - "pure": 1, - "purest": 1, - "purposeful": 2, - "pushy": -1, - "puzzled": -2, - "quaking": -2, - "qualities": 2, - "quality": 2, - "questionable": -2, - "questioned": -1, - "questioning": -1, - "racism": -3, - "racist": -3, - "racists": -3, - "rage": -2, - "rageful": -2, - "rainy": -1, - "rant": -3, - "ranter": -3, - "ranters": -3, - "rants": -3, - "rape": -4, - "raped": -4, - "rapist": -4, - "rapture": 2, - "raptured": 2, - "raptures": 2, - "rapturous": 4, - "rash": -2, - "ratified": 2, - "reach": 1, - "reached": 1, - "reaches": 1, - "reaching": 1, - "reassure": 1, - "reassured": 1, - "reassures": 1, - "reassuring": 2, - "rebel": -2, - "rebellion": -2, - "rebels": -2, - "recession": -2, - "reckless": -2, - "recognition": 2, - "recommend": 2, - "recommended": 2, - "recommends": 2, - "redeemed": 2, - "refine": 1, - "refined": 1, - "refines": 1, - "refreshingly": 2, - "refuse": -2, - "refused": -2, - "refuses": -2, - "refusing": -2, - "regret": -2, - "regretful": -2, - "regrets": -2, - "regretted": -2, - "regretting": -2, - "reigning": 1, - "reject": -1, - "rejected": -1, - "rejecting": -1, - "rejection": -2, - "rejects": -1, - "rejoice": 4, - "rejoiced": 4, - "rejoices": 4, - "rejoicing": 4, - "relaxed": 2, - "relentless": -1, - "reliability": 2, - "reliable": 2, - "reliably": 2, - "reliant": 2, - "relieve": 1, - "relieved": 2, - "relieves": 1, - "relieving": 2, - "relishing": 2, - "remarkable": 2, - "remorse": -2, - "repellent": -2, - "repercussion": -2, - "repercussions": -2, - "reprimand": -2, - "reprimanded": -2, - "reprimanding": -2, - "reprimands": -2, - "repulse": -1, - "repulsed": -2, - "repulsive": -2, - "rescue": 2, - "rescued": 2, - "rescues": 2, - "resentful": -2, - "resign": -1, - "resigned": -1, - "resigning": -1, - "resigns": -1, - "resolute": 2, - "resolution": 2, - "resolve": 2, - "resolved": 2, - "resolves": 2, - "resolving": 2, - "respect": 2, - "respected": 2, - "respects": 2, - "responsibility": 1, - "responsible": 2, - "responsive": 2, - "restful": 2, - "restless": -2, - "restore": 1, - "restored": 1, - "restores": 1, - "restoring": 1, - "restrict": -2, - "restricted": -2, - "restricting": -2, - "restriction": -2, - "restrictive": -1, - "restricts": -2, - "retained": -1, - "retard": -2, - "retarded": -2, - "retreat": -1, - "revenge": -2, - "revengeful": -2, - "revered": 2, - "revive": 2, - "revives": 2, - "revolting": -2, - "reward": 2, - "rewarded": 2, - "rewarding": 2, - "rewards": 2, - "rich": 2, - "richly": 2, - "ridiculous": -3, - "rig": -1, - "rigged": -1, - "right direction": 3, - "righteousness": 2, - "rightful": 2, - "rightfully": 2, - "rigorous": 3, - "rigorously": 3, - "riot": -2, - "riots": -2, - "rise": 1, - "rises": 1, - "risk": -2, - "risks": -2, - "risky": -2, - "riveting": 3, - "rob": -2, - "robber": -2, - "robed": -2, - "robing": -2, - "robs": -2, - "robust": 2, - "rofl": 4, - "roflcopter": 4, - "roflmao": 4, - "romance": 2, - "romantical": 2, - "romantically": 2, - "rose": 1, - "rotfl": 4, - "rotflmfao": 4, - "rotflol": 4, - "rotten": -3, - "rude": -2, - "ruin": -2, - "ruined": -2, - "ruining": -2, - "ruins": -2, - "sabotage": -2, - "sad": -2, - "sadden": -2, - "saddened": -2, - "sadly": -2, - "safe": 1, - "safely": 1, - "safer": 2, - "safety": 1, - "salient": 1, - "salute": 2, - "saluted": 2, - "salutes": 2, - "saluting": 2, - "salvation": 2, - "sappy": -1, - "sarcastic": -2, - "satisfied": 2, - "savange": -2, - "savanges": -2, - "save": 2, - "saved": 2, - "savings": 1, - "scam": -2, - "scams": -2, - "scandal": -3, - "scandalous": -3, - "scandals": -3, - "scapegoat": -2, - "scapegoats": -2, - "scare": -2, - "scared": -2, - "scar": -2, - "scars": -2, - "scary": -2, - "sceptical": -2, - "scold": -2, - "scoop": 3, - "scorn": -2, - "scornful": -2, - "scream": -2, - "screamed": -2, - "screaming": -2, - "screams": -2, - "screwed": -2, - "screwed up": -3, - "scum": -3, - "scumbag": -4, - "seamless": 2, - "seamlessly": 2, - "secure": 2, - "secured": 2, - "secures": 2, - "sedition": -2, - "seditious": -2, - "seduced": -1, - "self-abuse": -2, - "self-confident": 2, - "self-contradictory": -2, - "self-deluded": -2, - "selfish": -3, - "selfishness": -3, - "sentence": -2, - "sentenced": -2, - "sentences": -2, - "sentencing": -2, - "serene": 2, - "settlement": 1, - "settlements": 1, - "severe": -2, - "severely": -2, - "sexist": -2, - "sexistic": -2, - "sexy": 3, - "shaky": -2, - "shame": -2, - "shamed": -2, - "shameful": -2, - "share": 1, - "shared": 1, - "shares": 1, - "shattered": -2, - "shit": -4, - "shithead": -4, - "shitty": -3, - "shock": -2, - "shocked": -2, - "shocking": -2, - "shocks": -2, - "shoody": -2, - "shoot": -1, - "short-sighted": -2, - "short-sightedness": -2, - "shortage": -2, - "shortages": -2, - "shrew": -4, - "shy": -1, - "sick": -2, - "sickness": -2, - "side-effect": -2, - "side-effects": -2, - "sigh": -2, - "significance": 1, - "significant": 1, - "silencing": -1, - "silly": -1, - "simplicity": 1, - "sin": -2, - "sincere": 2, - "sincerely": 2, - "sincerest": 2, - "sincerity": 2, - "sinful": -3, - "singleminded": -2, - "sinister": -2, - "sins": -2, - "skeptic": -2, - "skeptical": -2, - "skepticism": -2, - "skeptics": -2, - "slam": -2, - "slash": -2, - "slashed": -2, - "slashes": -2, - "slashing": -2, - "slave": -3, - "slavery": -3, - "slaves": -3, - "sleeplessness": -2, - "slick": 2, - "slicker": 2, - "slickest": 2, - "slip": -1, - "sloppy": -2, - "sluggish": -2, - "slumping": -1, - "slut": -5, - "smart": 1, - "smarter": 2, - "smartest": 2, - "smear": -2, - "smile": 2, - "smiled": 2, - "smiles": 2, - "smiling": 2, - "smog": -2, - "smuggle": -2, - "smuggled": -2, - "smuggling": -2, - "smuggles": -2, - "sneaky": -1, - "sneeze": -2, - "sneezed": -2, - "sneezes": -2, - "sneezing": -2, - "snub": -2, - "snubbed": -2, - "snubbing": -2, - "snubs": -2, - "sobering": 1, - "solemn": -1, - "solid": 2, - "solidarity": 2, - "solidified": 2, - "solidifies": 2, - "solidify": 2, - "solidifying": 2, - "solution": 1, - "solutions": 1, - "solve": 1, - "solved": 1, - "solves": 1, - "solving": 1, - "somber": -2, - "some kind": 0, - "son-of-a-bitch": -5, - "soothe": 3, - "soothed": 3, - "soothing": 3, - "sophisticated": 2, - "sore": -1, - "sorrow": -2, - "sorrowful": -2, - "sorry": -1, - "spacious": 1, - "spam": -2, - "spammer": -3, - "spammers": -3, - "spamming": -2, - "spark": 1, - "sparkle": 3, - "sparkles": 3, - "sparkling": 3, - "spearhead": 2, - "speculative": -2, - "spirit": 1, - "spirited": 2, - "spiritless": -2, - "spiteful": -2, - "splendid": 3, - "spoiled": -2, - "spoilt": -2, - "spotless": 2, - "sprightly": 2, - "squander": -2, - "squandered": -2, - "squandering": -2, - "squanders": -2, - "squelched": -1, - "stab": -2, - "stabbed": -2, - "stable": 2, - "stabs": -2, - "stall": -2, - "stalled": -2, - "stalling": -2, - "stamina": 2, - "stampede": -2, - "stank": -2, - "startled": -2, - "startling": 3, - "starve": -2, - "starved": -2, - "starves": -2, - "starving": -2, - "steadfast": 2, - "steal": -2, - "stealing": -2, - "steals": -2, - "stereotype": -2, - "stereotyped": -2, - "stifled": -1, - "stimulate": 1, - "stimulated": 1, - "stimulates": 1, - "stimulating": 2, - "stingy": -2, - "stink": -2, - "stinked": -2, - "stinker": -2, - "stinking": -2, - "stinks": -2, - "stinky": -2, - "stole": -2, - "stolen": -2, - "stop": -1, - "stopped": -1, - "stopping": -1, - "stops": -1, - "stout": 2, - "straight": 1, - "strange": -1, - "strangely": -1, - "strangled": -2, - "strength": 2, - "strengthen": 2, - "strengthened": 2, - "strengthening": 2, - "strengthens": 2, - "strengths": 2, - "stress": -1, - "stressed": -2, - "stressor": -2, - "stressors": -2, - "stricken": -2, - "strike": -1, - "strikers": -2, - "strikes": -1, - "strong": 2, - "stronger": 2, - "strongest": 2, - "struck": -1, - "struggle": -2, - "struggled": -2, - "struggles": -2, - "struggling": -2, - "stubborn": -2, - "stuck": -2, - "stunned": -2, - "stunning": 4, - "stupid": -2, - "stupidity": -3, - "stupidly": -2, - "suave": 2, - "subpoena": -2, - "substantial": 1, - "substantially": 1, - "subversive": -2, - "succeed": 3, - "succeeded": 3, - "succeeding": 3, - "succeeds": 3, - "success": 2, - "successful": 3, - "successfully": 3, - "suck": -3, - "sucks": -3, - "sue": -2, - "sued": -2, - "sueing": -2, - "sues": -2, - "suffer": -2, - "suffered": -2, - "sufferer": -2, - "sufferers": -2, - "suffering": -2, - "suffers": -2, - "suicidal": -2, - "suicide": -2, - "suicides": -2, - "suing": -2, - "suitable": 2, - "suited": 2, - "sulking": -2, - "sulky": -2, - "sullen": -2, - "sunshine": 2, - "super": 3, - "superb": 5, - "superior": 2, - "support": 2, - "supported": 2, - "supporter": 1, - "supporters": 1, - "supporting": 1, - "supportive": 2, - "supports": 2, - "supreme": 4, - "survived": 2, - "surviving": 2, - "survivor": 2, - "suspect": -1, - "suspected": -1, - "suspecting": -1, - "suspects": -1, - "suspend": -1, - "suspended": -1, - "suspicious": -2, - "sustainability": 1, - "sustainable": 2, - "sustainably": 2, - "swear": -2, - "swearing": -2, - "swears": -2, - "sweet": 2, - "sweeter": 3, - "sweetest": 3, - "swift": 2, - "swiftly": 2, - "swindle": -3, - "swindles": -3, - "swindling": -3, - "sympathetic": 2, - "sympathy": 2, - "taint": -2, - "tainted": -2, - "talent": 2, - "tard": -2, - "tarnish": -2, - "tarnished": -2, - "tarnishes": -2, - "tears": -2, - "tender": 2, - "tenderness": 2, - "tense": -2, - "tension": -1, - "terrible": -3, - "terribly": -3, - "terrific": 4, - "terrifically": 4, - "terrified": -3, - "terror": -3, - "terrorist": -2, - "terrorists": -2, - "terrorize": -3, - "terrorized": -3, - "terrorizes": -3, - "thank": 2, - "thankful": 2, - "thanks": 2, - "thorny": -2, - "thoughtful": 2, - "thoughtless": -2, - "threat": -2, - "threaten": -2, - "threatened": -2, - "threatening": -2, - "threatens": -2, - "threats": -2, - "thrilled": 5, - "thwart": -2, - "thwarted": -2, - "thwarting": -2, - "thwarts": -2, - "timid": -2, - "timorous": -2, - "tired": -2, - "tits": -2, - "tolerance": 2, - "tolerant": 2, - "toothless": -2, - "top": 2, - "tops": 2, - "torn": -2, - "torture": -4, - "tortured": -4, - "tortures": -4, - "torturing": -4, - "totalitarian": -2, - "totalitarianism": -2, - "tout": -2, - "touted": -2, - "touting": -2, - "touts": -2, - "toxic": -3, - "tragedies": -2, - "tragedy": -2, - "tragic": -2, - "tranquil": 2, - "transgress": -2, - "transgressed": -2, - "transgresses": -2, - "transgressing": -2, - "trap": -1, - "trapped": -2, - "traps": -1, - "trauma": -3, - "traumatic": -3, - "travesty": -2, - "treason": -3, - "treasonous": -3, - "treasure": 2, - "treasures": 2, - "trembling": -2, - "tremor": -2, - "tremors": -2, - "tremulous": -2, - "tribulation": -2, - "tribute": 2, - "tricked": -2, - "trickery": -2, - "triumph": 4, - "triumphant": 4, - "troll": -2, - "trouble": -2, - "troubled": -2, - "troubles": -2, - "troubling": -2, - "true": 2, - "trust": 1, - "trusted": 2, - "trusts": 1, - "tumor": -2, - "twat": -5, - "tyran": -3, - "tyrannic": -3, - "tyrannical": -3, - "tyrannically": -3, - "tyrans": -3, - "ubiquitous": 2, - "ugh": -2, - "ugliness": -3, - "ugly": -3, - "unable": -2, - "unacceptable": -2, - "unappeasable": -2, - "unappreciated": -2, - "unapproved": -2, - "unattractive": -2, - "unavailable": -1, - "unavailing": -2, - "unaware": -2, - "unbearable": -2, - "unbelievable": -1, - "unbelieving": -1, - "unbiased": 2, - "uncertain": -1, - "unclear": -1, - "uncomfortable": -2, - "unconcerned": -2, - "unconfirmed": -1, - "unconvinced": -1, - "uncredited": -1, - "undecided": -1, - "undercooked": -2, - "underestimate": -1, - "underestimated": -1, - "underestimates": -1, - "underestimating": -1, - "undermine": -2, - "undermined": -2, - "undermines": -2, - "undermining": -2, - "underperform": -2, - "underperformed": -2, - "underperforming": -2, - "underperforms": -2, - "undeserving": -2, - "undesirable": -2, - "uneasy": -2, - "unemployed": -1, - "unemployment": -2, - "unequal": -1, - "unequaled": 2, - "unethical": -2, - "uneventful": -2, - "unfair": -2, - "unfavorable": -2, - "unfit": -2, - "unfitted": -2, - "unfocused": -2, - "unforgivable": -3, - "unforgiving": -2, - "unfulfilled": -2, - "unfunny": -2, - "ungenerous": -2, - "ungrateful": -3, - "unhappy": -2, - "unhappiness": -2, - "unhealthy": -2, - "unhygienic": -2, - "unified": 1, - "unimaginative": -2, - "unimpressed": -2, - "uninspired": -2, - "unintelligent": -2, - "unintentional": -2, - "uninvolving": -2, - "united": 1, - "unjust": -2, - "unlikely": -1, - "unlovable": -2, - "unloved": -2, - "unmatched": 1, - "unmotivated": -2, - "unoriginal": -2, - "unparliamentary": -2, - "unpleasant": -2, - "unpleasantness": -2, - "unprofessional": -2, - "unravel": 1, - "unreleting": -2, - "unresearched": -2, - "unsafe": -2, - "unsatisfied": -2, - "unscientific": -2, - "unsecured": -2, - "unselfish": 2, - "unsettled": -1, - "unsold": -1, - "unsophisticated": -2, - "unsound": -2, - "unstable": -2, - "unstoppable": 2, - "unsuccessful": -2, - "unsuccessfully": -2, - "unsupported": -2, - "unsure": -1, - "untarnished": 2, - "untrue": -2, - "unwanted": -2, - "unworthy": -2, - "uplifting": 2, - "uproar": -3, - "upset": -2, - "upsets": -2, - "upsetting": -2, - "uptight": -2, - "urgent": -1, - "useful": 2, - "usefulness": 2, - "useless": -2, - "uselessness": -2, - "vague": -2, - "validate": 1, - "validated": 1, - "validates": 1, - "validating": 1, - "vapid": -2, - "verdict": -1, - "verdicts": -1, - "vested": 1, - "vexation": -2, - "vexing": -2, - "vibrant": 3, - "vicious": -2, - "victim": -3, - "victimization": -3, - "victimize": -3, - "victimized": -3, - "victimizes": -3, - "victimizing": -3, - "victims": -3, - "victor": 3, - "victors": 3, - "victory": 3, - "victories": 3, - "vigilant": 3, - "vigor": 3, - "vile": -3, - "vindicate": 2, - "vindicated": 2, - "vindicates": 2, - "vindicating": 2, - "violate": -2, - "violated": -2, - "violates": -2, - "violating": -2, - "violation": -2, - "violations": -2, - "violence": -3, - "violence-related": -3, - "violent": -3, - "violently": -3, - "virtuous": 2, - "virulent": -2, - "vision": 1, - "visionary": 3, - "visioning": 1, - "visions": 1, - "vitality": 3, - "vitamin": 1, - "vitriolic": -3, - "vivacious": 3, - "vividly": 2, - "vociferous": -1, - "vomit": -3, - "vomited": -3, - "vomiting": -3, - "vomits": -3, - "vulnerability": -2, - "vulnerable": -2, - "walkout": -2, - "walkouts": -2, - "wanker": -3, - "want": 1, - "war": -2, - "warfare": -2, - "warm": 1, - "warmhearted": 2, - "warmness": 2, - "warmth": 2, - "warn": -2, - "warned": -2, - "warning": -3, - "warnings": -3, - "warns": -2, - "waste": -1, - "wasted": -2, - "wasting": -2, - "wavering": -1, - "weak": -2, - "weakened": -2, - "weakness": -2, - "weaknesses": -2, - "wealth": 3, - "wealthier": 2, - "wealthy": 2, - "weary": -2, - "weep": -2, - "weeping": -2, - "weird": -2, - "welcome": 2, - "welcomed": 2, - "welcomes": 2, - "well-being": 2, - "well-championed": 3, - "well-developed": 2, - "well-established": 2, - "well-focused": 2, - "well-groomed": 2, - "well-proportioned": 2, - "whimsical": 1, - "whitewash": -3, - "whore": -4, - "wicked": -2, - "widowed": -1, - "willingness": 2, - "win": 4, - "winner": 4, - "winning": 4, - "wins": 4, - "winwin": 3, - "wisdom": 1, - "wish": 1, - "wishes": 1, - "wishing": 1, - "withdrawal": -3, - "wits": 2, - "woebegone": -2, - "woeful": -3, - "won": 3, - "wonderful": 4, - "wonderfully": 4, - "woo": 3, - "woohoo": 3, - "wooo": 4, - "woow": 4, - "worn": -1, - "worried": -3, - "worries": -3, - "worry": -3, - "worrying": -3, - "worse": -3, - "worsen": -3, - "worsened": -3, - "worsening": -3, - "worsens": -3, - "worshiped": 3, - "worst": -3, - "worth": 2, - "worthless": -2, - "worthy": 2, - "wow": 4, - "wowow": 4, - "wowww": 4, - "wrathful": -3, - "wreck": -2, - "wrenching": -2, - "wrong": -2, - "wrongdoing": -2, - "wrongdoings": -2, - "wronged": -2, - "wrongful": -2, - "wrongfully": -2, - "wrongly": -2, - "wtf": -4, - "wtff": -4, - "wtfff": -4, - "xo": 3, - "xoxo": 3, - "xoxoxo": 4, - "xoxoxoxo": 4, - "yeah": 1, - "yearning": 1, - "yeees": 2, - "yes": 1, - "youthful": 2, - "yucky": -2, - "yummy": 3, - "zealot": -2, - "zealots": -2, - "zealous": 2 -} \ No newline at end of file diff --git a/build/emoji.json b/build/emoji.json new file mode 100644 index 0000000..db68a4e --- /dev/null +++ b/build/emoji.json @@ -0,0 +1,769 @@ +{ + "๐Ÿ˜‚": 1, + "โค": 3, + "โ™ฅ": 3, + "๐Ÿ˜": 3, + "๐Ÿ˜ญ": -1, + "๐Ÿ˜˜": 3, + "๐Ÿ˜Š": 3, + "๐Ÿ‘Œ": 2, + "๐Ÿ’•": 3, + "๐Ÿ‘": 2, + "๐Ÿ˜": 2, + "โ˜บ": 3, + "โ™ก": 3, + "๐Ÿ‘": 2, + "๐Ÿ˜ฉ": -2, + "๐Ÿ™": 2, + "โœŒ": 2, + "๐Ÿ˜": 1, + "๐Ÿ˜‰": 2, + "๐Ÿ™Œ": 2, + "๐Ÿ™ˆ": 2, + "๐Ÿ’ช": 2, + "๐Ÿ˜„": 2, + "๐Ÿ˜’": -2, + "๐Ÿ’ƒ": 3, + "๐Ÿ’–": 3, + "๐Ÿ˜ƒ": 2, + "๐Ÿ˜”": -1, + "๐ŸŽ‰": 3, + "๐Ÿ˜œ": 2, + "๐ŸŒธ": 3, + "๐Ÿ’œ": 3, + "๐Ÿ’™": 3, + "โœจ": 1, + "๐Ÿ’—": 3, + "โ˜…": 1, + "โ–ˆ": -1, + "โ˜€": 2, + "๐Ÿ˜ก": -1, + "๐Ÿ˜Ž": 2, + "๐Ÿ’‹": 3, + "๐Ÿ˜‹": 3, + "๐Ÿ™Š": 2, + "๐Ÿ˜ด": -1, + "๐ŸŽถ": 2, + "๐Ÿ’ž": 3, + "๐Ÿ˜Œ": 2, + "๐Ÿ”ซ": -1, + "๐Ÿ’›": 3, + "๐Ÿ’": 1, + "๐Ÿ’š": 3, + "โ™ซ": 1, + "๐Ÿ˜ž": -1, + "๐Ÿ˜†": 2, + "๐Ÿ˜": 2, + "๐Ÿ˜ช": -1, + "๐Ÿ˜ซ": -1, + "๐Ÿ‘Š": 1, + "๐Ÿ’€": -2, + "๐Ÿ˜€": 2, + "๐Ÿ˜š": 3, + "๐Ÿ˜ป": 3, + "๐Ÿ’˜": 3, + "โ˜•": 1, + "๐Ÿ‘‹": 2, + "๐ŸŽŠ": 3, + "๐Ÿ•": 2, + "โ„": 2, + "๐Ÿ˜•": -2, + "๐Ÿ’”": -1, + "๐Ÿ˜ค": -2, + "๐Ÿ˜ˆ": 1, + "โœˆ": 2, + "๐Ÿ”": 2, + "๐Ÿ˜ฐ": -1, + "โšฝ": 3, + "๐Ÿ˜‘": -2, + "๐Ÿ‘‘": 3, + "๐Ÿ‘‰": 1, + "๐Ÿƒ": 1, + "๐ŸŽ": 3, + "๐Ÿ˜ ": -2, + "๐Ÿง": 2, + "โ˜†": 2, + "๐Ÿ€": 1, + "๐ŸŽˆ": 3, + "๐ŸŽ…": 1, + "๐Ÿ˜“": -1, + "๐Ÿ˜ฃ": -2, + "๐Ÿ˜": -2, + "โœŠ": 2, + "๐Ÿ˜จ": -1, + "๐Ÿ˜–": -1, + "๐Ÿ’ค": 1, + "๐Ÿ’“": 3, + "๐Ÿ‘Ž": -1, + "๐Ÿ’ฆ": 2, + "โœ”": 1, + "๐Ÿ˜ท": -1, + "๐Ÿ™‹": 2, + "๐ŸŽ„": 2, + "๐Ÿ’ฉ": -1, + "๐ŸŽต": 2, + "๐Ÿ˜›": 3, + "๐Ÿ‘ฏ": 2, + "๐Ÿ’Ž": 2, + "๐ŸŒฟ": 1, + "๐ŸŽ‚": 3, + "๐ŸŒŸ": 1, + "๐Ÿ”ฎ": 1, + "๐Ÿ‘ซ": 1, + "๐Ÿ†": 3, + "โœ–": 1, + "โ˜": 1, + "๐Ÿ˜™": 3, + "โ›„": 2, + "๐Ÿ‘…": 2, + "โ™ช": 2, + "๐Ÿ‚": 2, + "๐Ÿ’": 1, + "๐ŸŒด": 2, + "๐Ÿ‘ˆ": 2, + "๐ŸŒน": 3, + "๐Ÿ™†": 2, + "๐Ÿ‘ป": 1, + "๐Ÿ’ฐ": 1, + "๐Ÿป": 2, + "๐Ÿ™…": -2, + "๐ŸŒž": 2, + "๐Ÿ": 2, + "โญ": 2, + "โ–ช": 1, + "๐ŸŽ€": 3, + "๐Ÿท": 1, + "๐Ÿ™‰": 1, + "๐ŸŒบ": 2, + "๐Ÿ’…": 1, + "๐Ÿถ": 2, + "๐ŸŒš": 2, + "๐Ÿ‘ฝ": 1, + "๐ŸŽค": 2, + "๐Ÿ‘ญ": 2, + "๐ŸŽง": 2, + "๐Ÿ‘†": 1, + "๐Ÿธ": 2, + "๐Ÿท": 2, + "ยฎ": 1, + "๐Ÿ‰": 3, + "๐Ÿ˜‡": 3, + "๐Ÿƒ": 2, + "๐Ÿ˜ฟ": -2, + "โ”‚": 1, + "๐Ÿบ": 2, + "โ–ถ": 1, + "๐Ÿ˜ฒ": -1, + "๐ŸŽธ": 2, + "๐Ÿน": 3, + "๐Ÿ’ซ": 2, + "๐Ÿ“š": 1, + "๐Ÿ˜ถ": -1, + "๐ŸŒท": 2, + "๐Ÿ’": 3, + "๐Ÿ’จ": 1, + "๐Ÿˆ": 2, + "๐Ÿ’": 2, + "โ˜”": 1, + "๐Ÿ‘ธ": 3, + "๐Ÿ‡ช": 3, + "โ–‘": -1, + "๐Ÿฉ": 1, + "๐Ÿ‘พ": 1, + "โ˜": 1, + "๐ŸŒป": 2, + "โ†ฟ": 3, + "๐Ÿฏ": 2, + "๐Ÿ‘ผ": 1, + "๐Ÿ”": 1, + "๐Ÿ˜ธ": 2, + "๐Ÿ‘ถ": 2, + "โ†พ": 3, + "๐Ÿ’": 3, + "๐ŸŒŠ": 2, + "๐Ÿฆ": 2, + "๐Ÿ“": 3, + "๐Ÿ‘‡": 1, + "๐Ÿ’†": 1, + "๐Ÿด": 2, + "๐Ÿ˜ง": -1, + "๐Ÿ‡ธ": 2, + "๐Ÿ˜ฎ": 1, + "๐Ÿšซ": -3, + "๐Ÿ˜ฝ": 2, + "๐ŸŒˆ": 2, + "๐Ÿ™€": 1, + "โš ": -1, + "๐ŸŽฎ": 2, + "โ•ฏ": -1, + "๐Ÿ†": 2, + "๐Ÿฐ": 2, + "โœ“": 1, + "๐Ÿ‘": -1, + "๐ŸŸ": 1, + "๐ŸŒ": 2, + "๐Ÿ’‘": 3, + "๐Ÿ‘ฌ": -1, + "๐Ÿฃ": 2, + "๐ŸŽƒ": 3, + "โ–ฌ": 2, + "๏ฟผ": -3, + "๐Ÿพ": 3, + "๐ŸŽ“": 2, + "๐ŸŠ": 2, + "๐Ÿ“ท": 2, + "๐Ÿ‘„": 2, + "๐ŸŒผ": 4, + "๐Ÿšถ": -1, + "๐Ÿฑ": 2, + "๐Ÿธ": -1, + "๐Ÿ‡บ": 2, + "๐Ÿ‘ฟ": -3, + "๐Ÿšฌ": 2, + "โœฟ": 1, + "๐Ÿ’": 2, + "๐ŸŒ": 3, + "โ”Š": 5, + "๐Ÿฅ": 3, + "๐Ÿผ": 1, + "๐ŸŽฅ": 1, + "๐Ÿ’„": 2, + "โ›”": 2, + "๐Ÿ€": 1, + "๐Ÿ’‰": 1, + "๐Ÿ’Ÿ": 3, + "๐Ÿš—": 1, + "๐Ÿ“": 1, + "โ™ฆ": 2, + "๐Ÿ’ญ": 1, + "๐ŸŒ™": 3, + "๐ŸŸ": 3, + "๐Ÿ‘ฃ": 1, + "โœ‚": -3, + "๐Ÿ—ฟ": 2, + "๐Ÿ‘ช": -1, + "๐Ÿญ": 1, + "๐ŸŒƒ": 2, + "โŒ": 1, + "๐Ÿฐ": 3, + "๐Ÿ’Š": 2, + "๐Ÿšจ": 3, + "๐Ÿ˜ฆ": -2, + "๐Ÿช": 1, + "๐Ÿฃ": -2, + "โœง": 1, + "๐ŸŽ†": 3, + "๐ŸŽŽ": 4, + "๐Ÿ‡ฉ": 3, + "โœ…": 2, + "๐Ÿ“ฑ": 1, + "๐Ÿ™": -2, + "๐Ÿ‘": 1, + "๐ŸŽผ": 1, + "๐Ÿ”Š": 2, + "๐ŸŒŒ": 2, + "๐ŸŽ": 1, + "๐Ÿป": 2, + "โ•ฐ": -1, + "๐Ÿ’‡": 1, + "โ™ฌ": 1, + "๐Ÿ”ด": 2, + "๐Ÿฑ": -2, + "๐ŸŠ": 2, + "๐Ÿ’": 1, + "๐Ÿญ": 3, + "๐Ÿ‘Ÿ": 2, + "๐ŸŒŽ": 1, + "๐Ÿ": 2, + "๐Ÿฎ": 3, + "๐Ÿ“ฒ": 1, + "โ˜ผ": 1, + "๐ŸŒ…": 1, + "๐Ÿ‡ท": 3, + "๐Ÿ‘ ": 1, + "๐ŸŒฝ": 2, + "๐Ÿ’ง": -1, + "๐Ÿฌ": 1, + "๐Ÿ˜บ": 2, + "๐Ÿš€": 2, + "ยฆ": 3, + "๐Ÿ’ข": 1, + "๐ŸŽฌ": 1, + "๐Ÿง": 1, + "๐Ÿœ": 2, + "๐Ÿ": 3, + "๐Ÿ„": 2, + "โžค": 1, + "โฌ†": 1, + "๐Ÿ‹": 1, + "๐Ÿ†—": 2, + "โšช": 2, + "๐Ÿ“บ": 2, + "๐Ÿ…": 1, + "โ›…": 2, + "๐Ÿข": 1, + "๐Ÿ‘™": 2, + "๐Ÿก": 2, + "๐ŸŒพ": 2, + "โ—‰": 1, + "โœ": 1, + "๐Ÿฌ": 2, + "๐Ÿ‡น": 3, + "โ™ฃ": 1, + "๐Ÿ": 1, + "๐ŸŒ": 1, + "๐Ÿ‡ฎ": 3, + "๐Ÿ”‹": -3, + "๐Ÿ": 1, + "โ™”": 2, + "๐Ÿ”ต": 1, + "๐Ÿ˜พ": -2, + "๐ŸŒ•": 3, + "๐Ÿจ": 2, + "๐Ÿ”": 1, + "๐Ÿ’ฟ": 3, + "๐ŸŒณ": 2, + "๐Ÿ‘ฐ": 2, + "โ€": 2, + "โš“": 3, + "๐Ÿšด": 3, + "โ–€": -1, + "๐Ÿ‘—": 1, + "โž•": 2, + "๐Ÿ’ฌ": 2, + "โ–’": -1, + "๐Ÿ”œ": 1, + "๐Ÿจ": 1, + "๐Ÿ’ฒ": 1, + "๐Ÿ™": 1, + "๐Ÿฅ": -4, + "โ–ธ": 1, + "โ™›": 1, + "๐Ÿ˜ผ": 1, + "๐Ÿ™": 2, + "๐Ÿ‘จ": 2, + "๐Ÿš": 2, + "โ™จ": 4, + "๐ŸŽน": 1, + "โ™•": 2, + "โ–ƒ": 5, + "๐Ÿ‡ฌ": 1, + "๐Ÿ‡ง": 1, + "โ˜ ": -1, + "๐Ÿ ": 2, + "๐Ÿšน": 3, + "๐Ÿ’ต": 2, + "โœฐ": 4, + "โ• ": 1, + "๐Ÿ‘›": 2, + "๐ŸŒฑ": 3, + "๐Ÿ’ป": 1, + "๐ŸŒ": 1, + "โ–„": -1, + "๐Ÿ‘“": 1, + "โ—„": 1, + "โšพ": -1, + "๐ŸŒฒ": 2, + "๐Ÿ‘ด": 1, + "๐Ÿ ": 2, + "๐Ÿ‡": 1, + "๐Ÿ˜": 2, + "๐Ÿ‡": 1, + "๐Ÿ”ž": -1, + "๐Ÿ‘ต": 2, + "โ—€": 1, + "๐Ÿ”™": 1, + "๐ŸŒต": 1, + "๐Ÿฎ": -1, + "๐ŸŽ‡": 3, + "๐ŸŽ": 2, + "โž”": -1, + "๐Ÿค": 2, + "โ•ฉ": 1, + "๐ŸŒ‘": 2, + "๐Ÿšฒ": 2, + "๐Ÿ‘": -1, + "๐Ÿ": 2, + "๐ŸŽพ": 3, + "โ•š": 1, + "๐Ÿˆน": 1, + "๐Ÿ‘ฎ": -2, + "โ˜น": -3, + "๐Ÿต": 2, + "โœช": 1, + "โ—•": 2, + "๐Ÿ—ผ": 3, + "โ–": -1, + "โ™ ": 1, + "โ”ณ": -2, + "๐Ÿ‘บ": -2, + "๐Ÿš": 1, + "๐Ÿ‘‚": -1, + "๐Ÿ—ฝ": 1, + "๐Ÿต": 2, + "๐Ÿ†’": 2, + "๐Ÿบ": 1, + "โ‡จ": 2, + "๐ŸŒ“": 3, + "๐Ÿ”’": 1, + "โ•ฌ": -1, + "๐Ÿ‘ณ": 3, + "๐ŸŒ‚": 1, + "๐ŸšŒ": 1, + "โ™ฉ": 3, + "๐Ÿก": -1, + "โฅ": 1, + "๐ŸŽก": 1, + "๐Ÿ’Œ": 2, + "๐Ÿฉ": 2, + "๐ŸŒœ": 2, + "โŒš": 1, + "๐Ÿšฟ": 3, + "๐Ÿ”†": 3, + "๐ŸŒ›": 3, + "๐Ÿ’‚": -1, + "๐Ÿ”": 1, + "๐Ÿ™Ž": -1, + "๐Ÿฉ": 2, + "๐Ÿ‡ซ": 2, + "๐Ÿ”จ": -1, + "๐Ÿ“ข": 2, + "๐Ÿฆ": 2, + "๐Ÿฒ": -1, + "โ™ป": 2, + "๐ŸŒ˜": 3, + "๐ŸŒ”": 3, + "๐Ÿ‘–": 2, + "๐Ÿ˜—": 3, + "๐Ÿ„": 1, + "โ—Ÿ": -1, + "๐Ÿข": -1, + "๐ŸŽจ": 1, + "โฌ‡": 2, + "๐Ÿšผ": 3, + "๐Ÿ‡ด": 2, + "๐ŸŒ—": 3, + "๐ŸŒ–": 3, + "๐Ÿ”…": 5, + "๐Ÿ‘œ": 1, + "๐ŸŒ": 3, + "๐Ÿ’ผ": 3, + "๐Ÿน": 1, + "๐ŸŒ ": 3, + "๐Ÿˆ": 1, + "๐ŸŒ": 1, + "โšซ": 1, + "โ™ง": 2, + "๐Ÿฐ": 1, + "๐Ÿšต": 2, + "๐ŸŽข": 2, + "๐ŸŽท": 3, + "๐ŸŽ": 1, + "โ”ˆ": -4, + "โ•—": 2, + "๐ŸŒ‡": 3, + "โฐ": 2, + "๐Ÿš‚": 1, + "โ— ": 2, + "๐ŸŽฟ": 2, + "๐Ÿ†”": 4, + "๐ŸŒ’": 3, + "๐Ÿช": 3, + "โ•”": 1, + "โ•": 2, + "๐Ÿ‘”": 2, + "๐Ÿ†“": 1, + "๐Ÿ‹": 1, + "โ–ฝ": 2, + "๐Ÿ›": 1, + "๐Ÿ‘•": 2, + "๐Ÿ’ณ": 2, + "๐Ÿง": 5, + "๐Ÿ’ก": 3, + "โฌ…": 2, + "๐Ÿซ": 2, + "๐Ÿ‡ฑ": 2, + "๐Ÿ“น": 2, + "๐Ÿ‘ž": 2, + "๐Ÿ‘š": 3, + "โ–ก": -2, + "๐Ÿšฃ": 3, + "๐Ÿ‰": 3, + "๐Ÿ—ป": 3, + "โ•ฆ": 2, + "โ›บ": 3, + "๐Ÿ•": 1, + "๐Ÿ‚": 2, + "๐Ÿ‘ก": 2, + "๐Ÿ“ป": 2, + "โœ’": 1, + "๐ŸŒฐ": 3, + "๐Ÿข": 1, + "๐ŸŽ’": 3, + "โŒ’": 3, + "๐Ÿซ": -2, + "๐Ÿ“ด": 4, + "๐Ÿšข": 1, + "๐Ÿšš": -1, + "๐Ÿ‰": 1, + "โ’": 1, + "๐Ÿ””": 5, + "โ—ข": 4, + "๐Ÿฅ": 1, + "๐Ÿš–": -1, + "โ–Œ": -2, + "โ˜›": 2, + "๐Ÿ’’": 3, + "๐Ÿšค": 2, + "๐Ÿ": 2, + "โ– ": -2, + "๐Ÿ”š": 2, + "๐ŸŽป": 2, + "๐Ÿ”ท": 1, + "๐ŸŽฝ": 2, + "๐Ÿ“…": 1, + "๐ŸŽบ": 3, + "๐Ÿˆ": -3, + "โœ‰": 1, + "โ—ค": 5, + "โ—‹": 3, + "๐Ÿผ": 3, + "๐Ÿš›": -2, + "๐Ÿ““": 1, + "โ˜‰": 1, + "๐Ÿ’ด": -2, + "โžฐ": -1, + "๐Ÿ”Œ": -1, + "๐Ÿ“•": 1, + "๐Ÿ“ฃ": 2, + "๐Ÿš“": 1, + "๐Ÿ—": 3, + "โ›ณ": 4, + "โ”ป": -3, + "โ”›": 3, + "โ”ƒ": 2, + "๐Ÿ’บ": 1, + "๐Ÿ‡": -1, + "โ˜ป": 1, + "๐Ÿ“ž": 2, + "โ’ถ": -1, + "๐ŸŒ‰": 3, + "๐Ÿšฉ": -2, + "โœŽ": 3, + "๐Ÿ“ƒ": 2, + "๐Ÿจ": 1, + "๐Ÿ“Œ": -3, + "โ™Ž": -1, + "๐Ÿ’ท": 2, + "๐Ÿš„": 3, + "โ–ฒ": 3, + "โ›ต": 3, + "๐Ÿ”ธ": 1, + "๐Ÿšœ": 5, + "๐Ÿ†": 2, + "๐Ÿ‘’": 1, + "โ•": 1, + "๐Ÿ”›": 2, + "โ™ข": 2, + "๐Ÿ‡ฒ": 2, + "โ…": 4, + "๐Ÿ‘": 2, + "โœž": 2, + "โ—ก": 1, + "๐ŸŽ‹": 3, + "๐Ÿ‘ฅ": 1, + "๐Ÿก": 1, + "โ—†": 4, + "๐Ÿ”ญ": 2, + "๐ŸŽช": 1, + "๐Ÿœ": 3, + "โ™Œ": 4, + "โ˜": -5, + "๐Ÿ‘ท": 1, + "๐Ÿ”ˆ": 1, + "๐Ÿ“„": 5, + "๐Ÿš": 4, + "๐ŸŒ‹": 3, + "๐Ÿ“ก": 1, + "๐Ÿšณ": 5, + "โœ˜": 4, + "๐Ÿ…ฐ": 1, + "๐Ÿ‡ผ": 2, + "โ”“": 3, + "โ”ฃ": 3, + "โ“": 2, + "โ’บ": 2, + "๐Ÿ‘ค": 4, + "๐Ÿš": 1, + "๐ŸŽ ": 3, + "๐Ÿ": -2, + "๐Ÿ“—": 1, + "โ”": -1, + "โ™‚": 1, + "๐Ÿ“ฏ": -1, + "๐Ÿ”ฉ": 1, + "๐Ÿ‘ข": 4, + "โ—‚": 2, + "๐Ÿ“ฐ": 1, + "๐Ÿ“ถ": 2, + "๐ŸŒ„": 1, + "๐Ÿ—พ": 2, + "๐Ÿ”ถ": 2, + "๐Ÿค": 2, + "๐ŸŽฉ": 2, + "โ“‚": 1, + "๐Ÿ”ง": -4, + "๐Ÿ…": 1, + "โ™ฎ": 1, + "๐Ÿ…พ": -1, + "๐Ÿ“ฆ": 1, + "๐ŸšŠ": 1, + "๐Ÿ”ฒ": 3, + "โ–ณ": 1, + "๐Ÿ“†": 5, + "โ›": 2, + "๐Ÿ“‰": 2, + "โ–ต": 2, + "๐Ÿ”Ž": 3, + "โ˜œ": 1, + "๐Ÿ‡ฏ": 2, + "๐Ÿ‡ต": 2, + "๐Ÿ“˜": 1, + "โ“”": 3, + "๐Ÿ”‘": 1, + "โญ•": 2, + "๐Ÿ”˜": 1, + "๐Ÿšญ": 5, + "๐Ÿš‰": 3, + "๐Ÿšช": 3, + "โžณ": 2, + "๐Ÿšƒ": 3, + "โ”ฏ": -3, + "๐Ÿ†™": 2, + "๐Ÿ†–": 1, + "โ”—": 5, + "โ“„": 2, + "โ‡": 3, + "โœด": 3, + "โ˜Š": 5, + "๐Ÿ”•": -2, + "โฌ›": -2, + "๐Ÿšž": 3, + "๐Ÿถ": 3, + "๐ŸŒ": 3, + "โ™€": 1, + "๐Ÿš…": 3, + "๐Ÿš’": -2, + "โ™‹": 1, + "โ™": 3, + "๐Ÿ•": -2, + "โ“": 5, + "๐Ÿ“™": 1, + "โ“ˆ": 1, + "๐Ÿ“‹": 3, + "๐ŸŽฑ": 1, + "๐Ÿž": 1, + "๐Ÿ”บ": 1, + "โ“ก": 5, + "โ™ค": 3, + "๐ŸŽฏ": 3, + "๐Ÿ”‰": 3, + "โ†ฉ": 5, + "๐Ÿšพ": 1, + "๐ŸŽฃ": -4, + "๐Ÿ”ฃ": 1, + "โŽ": -5, + "โžฅ": 1, + "๐ŸŽŒ": 5, + "โ—ฃ": 1, + "โฌ": 5, + "โ™ญ": 1, + "โ“ž": 5, + "๐Ÿ”ณ": 2, + "๐Ÿญ": 2, + "๐ŸŽณ": -3, + "โ˜š": 5, + "โžฝ": 2, + "โžซ": 2, + "โž–": -5, + "๊’ฐ": 2, + "๊’ฑ": 2, + "โ—": -3, + "๐Ÿ“‘": 5, + "โ“ง": 5, + "๐Ÿ”Ÿ": 5, + "ใ€“": 5, + "โ“œ": 2, + "โž ": 5, + "๐Ÿš†": 2, + "โ„…": -5, + "โ˜ƒ": 2, + "๐Ÿšฝ": 5, + "โ“": 5, + "โ‡ฆ": 5, + "๐Ÿ‘ฒ": 2, + "๐Ÿšก": -3, + "๐Ÿ”ฌ": 5, + "โž—": -3, + "๐Ÿ“ˆ": 2, + "โช": 2, + "โ—Ž": 5, + "๊’ฆ": -5, + "๐Ÿ“Ž": 5, + "โ‘…": 5, + "โœญ": 5, + "โ™“": 2, + "โ”": 5, + "โ˜‡": 5, + "เฟŽ": -5, + "๐Ÿ‘˜": 5, + "โ†™": 5, + "โ’ป": 2, + "โ“Œ": 2, + "โ“…": 2, + "๐Ÿ•‘": 2, + "๐Ÿ•›": 5, + "โ™ˆ": -5, + "โ†ฌ": 5, + "โœ": 5, + "๐Ÿฆ": 5, + "๐Ÿ”ป": 5, + "โ“Ÿ": 5, + "โ“•": 5, + "โ“˜": 5, + "โ™ฟ": 5, + "โ‡—": 5, + "โ‡˜": 5, + "โ“จ": 5, + "โ“™": 5, + "โ–ซ": 5, + "๐Ÿ”‡": 5, + "โŒƒ": -5, + "๐Ÿ”–": 5, + "๐Ÿ“œ": 5, + "๐Ÿš": 5, + "โ”˜": -5, + "โœ": -5, + "โฃ": -5, + "๐Ÿ“ฎ": -5, + "๐Ÿ••": -5, + "๐Ÿ”ฏ": 5, + "โžธ": 5, + "๊’ต": 5, + "๐Ÿ•ฅ": -5, + "โœฝ": 5, + "๐Ÿ“ผ": 5, + "๐Ÿ•": -5, + "๐Ÿ€„": 5, + "โœฌ": 5, + "โœซ": 5, + "๐Ÿ•”": -5, + "โฃ": 5, + "๐Ÿ“ซ": 5, + "๐Ÿ‰": 5, + "๐Ÿˆ‚": -5, + "๐ŸŽฐ": -5, + "า‚": -5, + "โ•ค": -5, + "๐Ÿ“”": 5 +} \ No newline at end of file diff --git a/lib/helper.js b/lib/helper.js new file mode 100644 index 0000000..e53d8a2 --- /dev/null +++ b/lib/helper.js @@ -0,0 +1,23 @@ +var afinn_translations = require('afinn-165-multilingual').afinn_translations; +var emojis = require('../build/emoji.json'); + +// Remove empty string entry +delete afinn_translations.afinn_en['']; + +var translations = { + en: Object.assign(emojis, afinn_translations.afinn_en) +}; + +module.exports = { + getAfinnTranslations: function(lang) { + if (!lang) { + return translations.en; + } + if (!translations[lang]) { + var translation = afinn_translations['afinn_' + lang]; + delete translation['']; + translations[lang] = Object.assign(emojis, translation); + } + return translations[lang]; + } +}; diff --git a/lib/index.js b/lib/index.js index 457b350..433524b 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,4 +1,4 @@ -var afinn = require('../build/build.json'); +var helper = require('./helper'); var tokenize = require('./tokenize'); /** @@ -23,17 +23,39 @@ var negators = { * Performs sentiment analysis on the provided input 'phrase'. * * @param {String} Input phrase + * @param {String} Input language code (2 digit code) * @param {Object} Optional sentiment additions to AFINN (hash k/v pairs) * * @return {Object} */ -module.exports = function (phrase, inject, callback) { +// sentiment('Hello world') +// sentiment('Hello world', 'en') +// sentiment('Hello world', { foo: 'bar' }) +// sentiment('Hello world', function () => {}) +// sentiment('Hello world', 'en', { foo: 'bar' }) +// sentiment('Hello world', 'en', function () => {}) +// sentiment('Hello world', { foo: 'bar' }, function () => {}) +// sentiment('Hello world', 'en', { foo: 'bar' }, function () {}) +module.exports = function (phrase, lang, inject, callback) { // Parse arguments if (typeof phrase === 'undefined') phrase = ''; + if (typeof lang !== 'string') { + if (typeof lang === 'object' && typeof inject === 'function') { + callback = inject; + inject = lang; + lang = 'en'; + } else { + if (typeof lang === 'object') inject = lang; + if (typeof lang === 'function') callback = lang; + lang = 'en'; + } + } if (typeof inject === 'undefined') inject = null; if (typeof inject === 'function') callback = inject; if (typeof callback === 'undefined') callback = null; + var afinn = helper.getAfinnTranslations(lang); + // Merge if (inject !== null) { afinn = Object.assign(afinn, inject); diff --git a/package-lock.json b/package-lock.json index a1f684c..1eee6d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sentiment", - "version": "4.0.0", + "version": "4.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -33,6 +33,9 @@ } } }, + "afinn-165-multilingual": { + "version": "git+https://github.com/dkocich/afinn-165-multilingual.git#f77255855074dbb5c28452ec4f32931ef888841a" + }, "ajv": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", diff --git a/package.json b/package.json index 8417656..f4f0458 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,9 @@ "scripts": { "test": "make test" }, + "dependencies": { + "afinn-165-multilingual": "git+https://github.com/dkocich/afinn-165-multilingual.git" + }, "devDependencies": { "async": "^2.1.5", "Sentimental": "1.0.1", diff --git a/test/integration/async_inject.js b/test/integration/async_inject.js new file mode 100644 index 0000000..f3478f4 --- /dev/null +++ b/test/integration/async_inject.js @@ -0,0 +1,14 @@ +var test = require('tap').test; +var sentiment = require('../../lib/index'); + +var dataset = 'This is so cool'; +sentiment(dataset, { 'cool': 100 }, function (err, result) { + test('asynchronous inject', function (t) { + t.type(result, 'object'); + t.equal(result.score, 100); + t.equal(result.comparative, 25); + t.equal(result.tokens.length, 4); + t.equal(result.words.length, 1); + t.end(); + }); +}); diff --git a/test/integration/async_lang.js b/test/integration/async_lang.js new file mode 100644 index 0000000..18ee2b3 --- /dev/null +++ b/test/integration/async_lang.js @@ -0,0 +1,14 @@ +var test = require('tap').test; +var sentiment = require('../../lib/index'); + +var dataset = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; +sentiment(dataset, 'fr', function (err, result) { + test('asynchronous positive FR text', function (t) { + t.type(result, 'object'); + t.equal(result.score, 5); + t.equal(result.comparative, 1.25); + t.equal(result.tokens.length, 4); + t.equal(result.words.length, 2); + t.end(); + }); +}); diff --git a/test/integration/async_lang_inject.js b/test/integration/async_lang_inject.js new file mode 100644 index 0000000..f3004f8 --- /dev/null +++ b/test/integration/async_lang_inject.js @@ -0,0 +1,14 @@ +var test = require('tap').test; +var sentiment = require('../../lib/index'); + +var dataset = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; +sentiment(dataset, 'fr', { 'bien': 100 }, function (err, result) { + test('asynchronous FR inject', function (t) { + t.type(result, 'object'); + t.equal(result.score, 102); + t.equal(result.comparative, 25.5); + t.equal(result.tokens.length, 4); + t.equal(result.words.length, 2); + t.end(); + }); +}); diff --git a/test/integration/sync_lang.js b/test/integration/sync_lang.js new file mode 100644 index 0000000..cdbda58 --- /dev/null +++ b/test/integration/sync_lang.js @@ -0,0 +1,14 @@ +var test = require('tap').test; +var sentiment = require('../../lib/index'); + +var dataset = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; +var result = sentiment(dataset, 'fr'); + +test('synchronous positive FR text', function (t) { + t.type(result, 'object'); + t.equal(result.score, 5); + t.equal(result.comparative, 1.25); + t.equal(result.tokens.length, 4); + t.equal(result.words.length, 2); + t.end(); +}); diff --git a/test/integration/sync_lang_inject.js b/test/integration/sync_lang_inject.js new file mode 100644 index 0000000..046e96a --- /dev/null +++ b/test/integration/sync_lang_inject.js @@ -0,0 +1,14 @@ +var test = require('tap').test; +var sentiment = require('../../lib/index'); + +var dataset = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; +var result = sentiment(dataset, 'fr', { 'bien': 100 }); + +test('synchronous inject FR', function (t) { + t.type(result, 'object'); + t.equal(result.score, 102); + t.equal(result.comparative, 25.5); + t.equal(result.tokens.length, 4); + t.equal(result.words.length, 2); + t.end(); +}); From f3115548b8bb47eaf03b16c5f66a26142bd45e7f Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Mon, 11 Dec 2017 12:27:30 +0100 Subject: [PATCH 2/9] Move negators to separate file --- build/negators-en.json | 14 ++++++++++++++ lib/index.js | 23 +---------------------- 2 files changed, 15 insertions(+), 22 deletions(-) create mode 100644 build/negators-en.json diff --git a/build/negators-en.json b/build/negators-en.json new file mode 100644 index 0000000..24f7725 --- /dev/null +++ b/build/negators-en.json @@ -0,0 +1,14 @@ +{ + "cant": 1, + "can't": 1, + "dont": 1, + "don't": 1, + "doesnt": 1, + "doesn't": 1, + "not": 1, + "non": 1, + "wont": 1, + "won't": 1, + "isnt": 1, + "isn't": 1 +} diff --git a/lib/index.js b/lib/index.js index 433524b..9bfad65 100644 --- a/lib/index.js +++ b/lib/index.js @@ -4,20 +4,7 @@ var tokenize = require('./tokenize'); /** * These words "flip" the sentiment of the following word. */ -var negators = { - 'cant': 1, - 'can\'t': 1, - 'dont': 1, - 'don\'t': 1, - 'doesnt': 1, - 'doesn\'t': 1, - 'not': 1, - 'non': 1, - 'wont': 1, - 'won\'t': 1, - 'isnt': 1, - 'isn\'t': 1 -}; +var negators = require('../build/negators-en.json'); /** * Performs sentiment analysis on the provided input 'phrase'. @@ -28,14 +15,6 @@ var negators = { * * @return {Object} */ -// sentiment('Hello world') -// sentiment('Hello world', 'en') -// sentiment('Hello world', { foo: 'bar' }) -// sentiment('Hello world', function () => {}) -// sentiment('Hello world', 'en', { foo: 'bar' }) -// sentiment('Hello world', 'en', function () => {}) -// sentiment('Hello world', { foo: 'bar' }, function () => {}) -// sentiment('Hello world', 'en', { foo: 'bar' }, function () {}) module.exports = function (phrase, lang, inject, callback) { // Parse arguments if (typeof phrase === 'undefined') phrase = ''; From 4a954666ffcba64b78b0417de96559849dd4edc0 Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Mon, 11 Dec 2017 15:15:28 +0100 Subject: [PATCH 3/9] Add support for language-specific negation strategies --- lib/helper.js | 61 ++++++++++++++++++++---- lib/index.js | 23 +++------ lib/negation/negation-en.js | 11 +++++ lib/negation/negations.js | 22 +++++++++ {build => lib/negation}/negators-en.json | 0 5 files changed, 92 insertions(+), 25 deletions(-) create mode 100644 lib/negation/negation-en.js create mode 100644 lib/negation/negations.js rename {build => lib/negation}/negators-en.json (100%) diff --git a/lib/helper.js b/lib/helper.js index e53d8a2..1bd9a1b 100644 --- a/lib/helper.js +++ b/lib/helper.js @@ -1,23 +1,66 @@ var afinn_translations = require('afinn-165-multilingual').afinn_translations; var emojis = require('../build/emoji.json'); +var negations = require('./negation/negations'); // Remove empty string entry delete afinn_translations.afinn_en['']; -var translations = { - en: Object.assign(emojis, afinn_translations.afinn_en) +// Cache for language-specific resources +// English is loaded by default +var languages = { + en: { + translations: Object.assign(emojis, afinn_translations.afinn_en), + negation: require('./negation/negation-en') + } }; module.exports = { - getAfinnTranslations: function(lang) { + + /** + * Returns AFIN-165 translations for the specified language. + * + * @param {String} lang - Two-digit language code of the translations + * + * @return {Object} + */ + getTranslations: function(lang) { if (!lang) { - return translations.en; + // Default to english if no language was specified + return languages.en.translations; + } + if (!languages[lang]) { + // Load translations for specified language + var translations = afinn_translations['afinn_' + lang]; + if (!translations) { + throw new Error('No translations found for language: ' + lang); + } + delete translations['']; + translations = Object.assign(emojis, translations); + + // Lookup negation strategy + var negationStrategy = negations.getStrategyForLanguage(lang); + + // Add language resources to in-memory cache + languages[lang] = { + negation: negationStrategy, + translations: translations + }; } - if (!translations[lang]) { - var translation = afinn_translations['afinn_' + lang]; - delete translation['']; - translations[lang] = Object.assign(emojis, translation); + return languages[lang].translations; + }, + + /** + * Applies a predefined strategy for considering negation constructs + * + * @param {String} lang - Two-digit language code + * @param {int} cursor - Iteration cursor + * @param {Array} tokens - Tokens of the phrase to analyze + * @param {item} item - The current token being analyzed + */ + applyNegationStrategy: function(lang, cursor, tokens, item) { + if (!languages[lang]) { + throw new Error('No entry found for language: ', lang); } - return translations[lang]; + return languages[lang].negation.apply(cursor, tokens, item); } }; diff --git a/lib/index.js b/lib/index.js index 9bfad65..3c7a0d5 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,11 +1,6 @@ var helper = require('./helper'); var tokenize = require('./tokenize'); -/** - * These words "flip" the sentiment of the following word. - */ -var negators = require('../build/negators-en.json'); - /** * Performs sentiment analysis on the provided input 'phrase'. * @@ -22,18 +17,17 @@ module.exports = function (phrase, lang, inject, callback) { if (typeof lang === 'object' && typeof inject === 'function') { callback = inject; inject = lang; - lang = 'en'; } else { if (typeof lang === 'object') inject = lang; if (typeof lang === 'function') callback = lang; - lang = 'en'; } + lang = 'en'; } if (typeof inject === 'undefined') inject = null; if (typeof inject === 'function') callback = inject; if (typeof callback === 'undefined') callback = null; - var afinn = helper.getAfinnTranslations(lang); + var afinn = helper.getTranslations(lang); // Merge if (inject !== null) { @@ -48,17 +42,14 @@ module.exports = function (phrase, lang, inject, callback) { negative = []; // Iterate over tokens - var len = tokens.length; - while (len--) { - var obj = tokens[len]; + var i = tokens.length; + while (i--) { + var obj = tokens[i]; var item = afinn[obj]; if (!afinn.hasOwnProperty(obj)) continue; - // Check for negation - if (len > 0) { - var prevtoken = tokens[len-1]; - if (negators[prevtoken]) item = -item; - } + // Apply negation strategy if available + item = helper.applyNegationStrategy(lang, i, tokens, item); words.push(obj); if (item > 0) positive.push(obj); diff --git a/lib/negation/negation-en.js b/lib/negation/negation-en.js new file mode 100644 index 0000000..dd6b7b9 --- /dev/null +++ b/lib/negation/negation-en.js @@ -0,0 +1,11 @@ +var negators = require('./negators-en.json'); + +module.exports = { + apply: function(cursor, tokens, item) { + if (cursor > 0) { + var prevtoken = tokens[cursor-1]; + if (negators[prevtoken]) item = -item; + } + return item; + } +} diff --git a/lib/negation/negations.js b/lib/negation/negations.js new file mode 100644 index 0000000..d59b250 --- /dev/null +++ b/lib/negation/negations.js @@ -0,0 +1,22 @@ +var defaultNegationStrategy = { + apply: function(cursor, tokens, item) { + return item; + } +} + +module.exports = { + + /** + * + */ + getStrategyForLanguage: function(lang) { + var negationStrategy; + try { + negationStrategy = require('./negation-' + lang); + } catch (err) { + // Fallback to default strategy + negationStrategy = defaultNegationStrategy; + } + return negationStrategy; + } +} diff --git a/build/negators-en.json b/lib/negation/negators-en.json similarity index 100% rename from build/negators-en.json rename to lib/negation/negators-en.json From 5084d4d6e0cc0f199276576b73bc6be74b36a2a8 Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Mon, 11 Dec 2017 15:17:54 +0100 Subject: [PATCH 4/9] Add missing method documentation --- lib/negation/negations.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/negation/negations.js b/lib/negation/negations.js index d59b250..577065b 100644 --- a/lib/negation/negations.js +++ b/lib/negation/negations.js @@ -7,7 +7,9 @@ var defaultNegationStrategy = { module.exports = { /** + * Returns a language-specific negation strategy * + * @param {String} lang - Two-digit language code */ getStrategyForLanguage: function(lang) { var negationStrategy; From 1b340496c711b2e48fa198547ef9ed3da165f29d Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Tue, 12 Dec 2017 17:02:59 +0100 Subject: [PATCH 5/9] Add link to supported languages --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2293f65..1ad00bf 100644 --- a/README.md +++ b/README.md @@ -29,15 +29,16 @@ console.dir(r2); // Score: 4, Comparative: 1 ### Usage with multiple languages English language ('en') is set as a default option when no other parameter is set. +The list of supported languages can be found here: https://github.com/dkocich/afinn-165-multilingual ```javascript var r3 = sentiment('Katzen sind dumm.', 'de'); -console.dir(r3); // Score: -2, Comparative: -0.6666666666666666, +console.dir(r3); // Score: -2, Comparative: -0.6666666666666666 var r4 = sentiment('El gato es estรบpido.', 'es'); -console.dir(r4); // Score: -2, Comparative: -0.5, +console.dir(r4); // Score: -2, Comparative: -0.5 var r5 = sentiment('Le chat est stupide.', 'fr'); -console.dir(r5); // Score: -2, Comparative: -0.5, +console.dir(r5); // Score: -2, Comparative: -0.5 ``` ### Adding / overwriting words From 037e22fceed8d4c73d51654657096bbbf592b48e Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Tue, 27 Feb 2018 10:17:52 +0100 Subject: [PATCH 6/9] Update method signature to accept configuration object --- lib/index.js | 42 +- package-lock.json | 3567 ----------------- package.json | 2 +- test/integration/async_inject.js | 8 +- test/integration/async_lang.js | 8 +- test/integration/async_lang_inject.js | 9 +- test/integration/async_negative.js | 5 +- .../async_negative_text_and_emoji.js | 5 +- test/integration/async_positive.js | 5 +- .../async_positive_text_and_emoji.js | 5 +- test/integration/gh_12.js | 4 +- test/integration/gh_13.js | 4 +- test/integration/gh_85.js | 4 +- test/integration/sync_fuzz.js | 4 +- test/integration/sync_inject.js | 8 +- test/integration/sync_lang.js | 8 +- test/integration/sync_lang_inject.js | 11 +- test/integration/sync_negation.js | 4 +- test/integration/sync_negative.js | 4 +- .../sync_negative_text_and_emoji.js | 4 +- test/integration/sync_positive.js | 4 +- .../sync_positive_text_and_emoji.js | 4 +- test/integration/sync_undefined.js | 3 +- 23 files changed, 93 insertions(+), 3629 deletions(-) delete mode 100644 package-lock.json diff --git a/lib/index.js b/lib/index.js index 3c7a0d5..cc2e3c6 100644 --- a/lib/index.js +++ b/lib/index.js @@ -4,34 +4,29 @@ var tokenize = require('./tokenize'); /** * Performs sentiment analysis on the provided input 'phrase'. * - * @param {String} Input phrase - * @param {String} Input language code (2 digit code) - * @param {Object} Optional sentiment additions to AFINN (hash k/v pairs) + * @param {String} phrase - Input phrase + * @param {Object} opts - Options + * @param {Object} opts.language - Input language code (2 digit code), defaults to 'en' + * @param {Object} opts.extras - Optional sentiment additions to AFINN (hash k/v pairs) + * @param {function} callback - Optional callback * * @return {Object} */ -module.exports = function (phrase, lang, inject, callback) { +module.exports = function (phrase, opts, callback) { // Parse arguments if (typeof phrase === 'undefined') phrase = ''; - if (typeof lang !== 'string') { - if (typeof lang === 'object' && typeof inject === 'function') { - callback = inject; - inject = lang; - } else { - if (typeof lang === 'object') inject = lang; - if (typeof lang === 'function') callback = lang; - } - lang = 'en'; + if (typeof opts === 'function') { + callback = opts; + opts = {}; } - if (typeof inject === 'undefined') inject = null; - if (typeof inject === 'function') callback = inject; - if (typeof callback === 'undefined') callback = null; + opts = opts || {}; + var lang = opts.language || 'en'; var afinn = helper.getTranslations(lang); // Merge - if (inject !== null) { - afinn = Object.assign(afinn, inject); + if (typeof opts.extras === 'object') { + afinn = Object.assign(afinn, opts.extras); } // Storage objects @@ -68,8 +63,11 @@ module.exports = function (phrase, lang, inject, callback) { negative: negative }; - if (callback === null) return result; - process.nextTick(function () { - callback(null, result); - }); + if (typeof callback === 'function') { + process.nextTick(function () { + callback(null, result); + }); + } else { + return result; + } }; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 1eee6d7..0000000 --- a/package-lock.json +++ /dev/null @@ -1,3567 +0,0 @@ -{ - "name": "sentiment", - "version": "4.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "Sentimental": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/Sentimental/-/Sentimental-1.0.1.tgz", - "integrity": "sha1-EV45gS4tKEtEqstVInkGtFE3uS8=", - "dev": true - }, - "acorn": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", - "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "afinn-165-multilingual": { - "version": "git+https://github.com/dkocich/afinn-165-multilingual.git#f77255855074dbb5c28452ec4f32931ef888841a" - }, - "ajv": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", - "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "ansi-escapes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "benchmark": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", - "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", - "dev": true, - "requires": { - "lodash": "4.17.4", - "platform": "1.3.4" - } - }, - "bind-obj-methods": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-1.0.0.tgz", - "integrity": "sha1-T1l5ysFXk633DkiBYeRj4gnKUJw=", - "dev": true - }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "clean-yaml-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", - "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "coveralls": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.1.tgz", - "integrity": "sha1-1wu5rMGDXsTwY/+drFQjwXsR8Xg=", - "dev": true, - "requires": { - "js-yaml": "3.6.1", - "lcov-parse": "0.0.10", - "log-driver": "1.2.5", - "minimist": "1.2.0", - "request": "2.79.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "js-yaml": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", - "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", - "dev": true - }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.6.1.tgz", - "integrity": "sha1-3cf8f9cL+TIFsLNEm7FqHp59SVA=", - "dev": true, - "requires": { - "ajv": "5.2.2", - "babel-code-frame": "6.26.0", - "chalk": "2.1.0", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "2.6.8", - "doctrine": "2.0.0", - "eslint-scope": "3.7.1", - "espree": "3.5.0", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.5", - "imurmurhash": "0.1.4", - "inquirer": "3.2.3", - "is-resolvable": "1.0.0", - "js-yaml": "3.9.1", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "4.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.1", - "text-table": "0.2.0" - } - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "espree": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", - "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", - "dev": true, - "requires": { - "acorn": "5.1.1", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", - "dev": true - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "external-editor": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", - "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", - "dev": true, - "requires": { - "iconv-lite": "0.4.18", - "jschardet": "1.5.1", - "tmp": "0.0.31" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.2.2", - "object-assign": "4.1.1" - } - }, - "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "4.0.2", - "signal-exit": "3.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-loop": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.1.tgz", - "integrity": "sha1-gHa7MF6OajzO7ikgdl8zDRkPNAw=", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.16.1", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "iconv-lite": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", - "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", - "dev": true - }, - "ignore": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", - "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "inquirer": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.3.tgz", - "integrity": "sha512-Bc3KbimpDTOeQdDj18Ir/rlsGuhBSSNqdOnxaAuKhpkdnMMuKsEGbZD2v5KFF9oso2OU+BPh7+/u5obmFDRmWw==", - "dev": true, - "requires": { - "ansi-escapes": "2.0.0", - "chalk": "2.1.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.0.4", - "figures": "2.0.0", - "lodash": "4.17.4", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", - "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jschardet": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz", - "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "log-driver": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", - "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", - "dev": true - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nyc": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.1.0.tgz", - "integrity": "sha1-1rPF4WiSolr2MTi6SEZ2qooi7ac=", - "dev": true, - "requires": { - "archy": "1.0.0", - "arrify": "1.0.1", - "caching-transform": "1.0.1", - "convert-source-map": "1.5.0", - "debug-log": "1.0.1", - "default-require-extensions": "1.0.0", - "find-cache-dir": "0.1.1", - "find-up": "2.1.0", - "foreground-child": "1.5.6", - "glob": "7.1.2", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.7.4", - "istanbul-lib-report": "1.1.1", - "istanbul-lib-source-maps": "1.2.1", - "istanbul-reports": "1.1.1", - "md5-hex": "1.3.0", - "merge-source-map": "1.0.4", - "micromatch": "2.3.11", - "mkdirp": "0.5.1", - "resolve-from": "2.0.0", - "rimraf": "2.6.1", - "signal-exit": "3.0.2", - "spawn-wrap": "1.3.8", - "test-exclude": "4.1.1", - "yargs": "8.0.2", - "yargs-parser": "5.0.0" - }, - "dependencies": { - "align-text": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "requires": { - "default-require-extensions": "1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "arr-diff": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "async": { - "version": "1.5.2", - "bundled": true, - "dev": true - }, - "babel-code-frame": { - "version": "6.22.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-generator": { - "version": "6.25.0", - "bundled": true, - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.6", - "trim-right": "1.0.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-runtime": { - "version": "6.23.0", - "bundled": true, - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" - } - }, - "babel-template": { - "version": "6.25.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.25.0", - "bundled": true, - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "debug": "2.6.8", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.25.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.17.4", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "bundled": true, - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "caching-transform": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "md5-hex": "1.3.0", - "mkdirp": "0.5.1", - "write-file-atomic": "1.3.4" - } - }, - "camelcase": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true - }, - "center-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cliui": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "commondir": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.5.0", - "bundled": true, - "dev": true - }, - "core-js": { - "version": "2.4.1", - "bundled": true, - "dev": true - }, - "cross-spawn": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "which": "1.2.14" - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "default-require-extensions": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "strip-bom": "2.0.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "error-ex": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "esutils": { - "version": "2.0.2", - "bundled": true, - "dev": true - }, - "execa": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "4.0.2", - "get-stream": "2.3.1", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "bundled": true, - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "extglob": { - "version": "0.3.2", - "bundled": true, - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "bundled": true, - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "find-cache-dir": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "for-own": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "foreground-child": { - "version": "1.5.6", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "4.0.2", - "signal-exit": "3.0.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "get-caller-file": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "bundled": true, - "dev": true, - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "globals": { - "version": "9.18.0", - "bundled": true, - "dev": true - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "handlebars": { - "version": "4.0.10", - "bundled": true, - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "bundled": true, - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "has-ansi": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "hosted-git-info": { - "version": "2.5.0", - "bundled": true, - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "invariant": { - "version": "2.2.2", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-buffer": { - "version": "1.1.5", - "bundled": true, - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-dotfile": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-glob": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-number": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "isobject": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "istanbul-lib-coverage": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "requires": { - "append-transform": "0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.7.4", - "bundled": true, - "dev": true, - "requires": { - "babel-generator": "6.25.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.3.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "debug": "2.6.8", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.1", - "source-map": "0.5.6" - } - }, - "istanbul-reports": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "handlebars": "4.0.10" - } - }, - "js-tokens": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "jsesc": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - } - } - }, - "lodash": { - "version": "4.17.4", - "bundled": true, - "dev": true - }, - "longest": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "lru-cache": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "md5-hex": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "md5-o-matic": "0.1.1" - } - }, - "md5-o-matic": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "mem": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } - }, - "merge-source-map": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "source-map": "0.5.6" - } - }, - "micromatch": { - "version": "2.3.11", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.3" - } - }, - "mimic-fn": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "normalize-package-data": { - "version": "2.4.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "remove-trailing-separator": "1.0.2" - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "2.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "object.omit": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "optimist": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-locale": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "0.5.1", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "1.1.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "path-exists": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "path-type": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "1.1.2" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - } - } - }, - "preserve": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "read-pkg": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - } - } - }, - "regenerator-runtime": { - "version": "0.10.5", - "bundled": true, - "dev": true - }, - "regex-cache": { - "version": "0.4.3", - "bundled": true, - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" - } - }, - "remove-trailing-separator": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "bundled": true, - "dev": true - }, - "repeating": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve-from": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "right-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slide": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "source-map": { - "version": "0.5.6", - "bundled": true, - "dev": true - }, - "spawn-wrap": { - "version": "1.3.8", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "1.5.6", - "mkdirp": "0.5.1", - "os-homedir": "1.0.2", - "rimraf": "2.6.1", - "signal-exit": "3.0.2", - "which": "1.2.14" - } - }, - "spdx-correct": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" - } - }, - "to-fast-properties": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.6", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "validate-npm-package-license": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "which": { - "version": "1.2.14", - "bundled": true, - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "window-size": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.3", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" - } - }, - "y18n": { - "version": "3.2.1", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "yargs": { - "version": "8.0.2", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.0.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.0", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "cliui": { - "version": "3.2.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "load-json-file": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "yargs-parser": { - "version": "7.0.0", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "bundled": true, - "dev": true - } - } - } - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } - }, - "opener": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", - "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", - "dev": true - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", - "dev": true - }, - "own-or-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.0.tgz", - "integrity": "sha1-nvkg/IHi5jz1nUEQElg2jPT8pPs=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "platform": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.4.tgz", - "integrity": "sha1-bw+xftqqSPIUQrOpdcBjEw8cPr0=", - "dev": true - }, - "pluralize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-4.0.0.tgz", - "integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3", - "uuid": "3.1.0" - } - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "4.0.8" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.17.tgz", - "integrity": "sha512-30c1Ch8FSjV0FwC253iftbbj0dU/OXoSg1LAEGZJUlGgjTNj6cu+DVqJWWIZJY5RXLWV4eFtR+4ouo0VIOYOTg==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "table": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz", - "integrity": "sha1-qBFsEz+sLGH0pCCrbN9cTWHw5DU=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "tap": { - "version": "10.7.2", - "resolved": "https://registry.npmjs.org/tap/-/tap-10.7.2.tgz", - "integrity": "sha512-N7z+tqiEvMT+wd79c17FqtL5h/AOObtffVTSfWUogrmFkJ37OfHLl8WuQYpd/YiOzS3k74acPF1F9bX0LzHOKw==", - "dev": true, - "requires": { - "bind-obj-methods": "1.0.0", - "bluebird": "3.5.0", - "clean-yaml-object": "0.1.0", - "color-support": "1.1.3", - "coveralls": "2.13.1", - "foreground-child": "1.5.6", - "fs-exists-cached": "1.0.0", - "function-loop": "1.0.1", - "glob": "7.1.2", - "isexe": "2.0.0", - "js-yaml": "3.9.1", - "nyc": "11.1.0", - "opener": "1.4.3", - "os-homedir": "1.0.2", - "own-or": "1.0.0", - "own-or-env": "1.0.0", - "readable-stream": "2.3.3", - "signal-exit": "3.0.2", - "source-map-support": "0.4.17", - "stack-utils": "1.0.1", - "tap-mocha-reporter": "3.0.6", - "tap-parser": "5.4.0", - "tmatch": "3.1.0", - "trivial-deferred": "1.0.1", - "tsame": "1.1.2", - "yapool": "1.0.0" - } - }, - "tap-mocha-reporter": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-3.0.6.tgz", - "integrity": "sha512-UImgw3etckDQCoqZIAIKcQDt0w1JLVs3v0yxLlmwvGLZl6MGFxF7JME5PElXjAoDklVDU42P3vVu5jgr37P4Yg==", - "dev": true, - "requires": { - "color-support": "1.1.3", - "debug": "2.6.8", - "diff": "1.4.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "js-yaml": "3.9.1", - "readable-stream": "2.3.3", - "tap-parser": "5.4.0", - "unicode-length": "1.0.3" - } - }, - "tap-parser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz", - "integrity": "sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA==", - "dev": true, - "requires": { - "events-to-array": "1.1.2", - "js-yaml": "3.9.1", - "readable-stream": "2.3.3" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmatch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-3.1.0.tgz", - "integrity": "sha512-W3MSATOCN4pVu2qFxmJLIArSifeSOFqnfx9hiUaVgOmeRoI2NbU7RNga+6G+L8ojlFeQge+ZPCclWyUpQ8UeNQ==", - "dev": true - }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", - "dev": true - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "tsame": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/tsame/-/tsame-1.1.2.tgz", - "integrity": "sha512-ovCs24PGjmByVPr9tSIOs/yjUX9sJl0grEmOsj9dZA/UknQkgPOKcUqM84aSCvt9awHuhc/boMzTg3BHFalxWw==", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "unicode-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", - "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", - "dev": true, - "requires": { - "punycode": "1.4.1", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yapool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", - "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", - "dev": true - } - } -} diff --git a/package.json b/package.json index f4f0458..2f64ce9 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "test": "make test" }, "dependencies": { - "afinn-165-multilingual": "git+https://github.com/dkocich/afinn-165-multilingual.git" + "afinn-165-multilingual": "0.0.1" }, "devDependencies": { "async": "^2.1.5", diff --git a/test/integration/async_inject.js b/test/integration/async_inject.js index f3478f4..82e5aa4 100644 --- a/test/integration/async_inject.js +++ b/test/integration/async_inject.js @@ -1,8 +1,12 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'This is so cool'; -sentiment(dataset, { 'cool': 100 }, function (err, result) { +var input = 'This is so cool'; +var options = { + extras: { 'cool': 100 } +}; + +sentiment(input, options, function (err, result) { test('asynchronous inject', function (t) { t.type(result, 'object'); t.equal(result.score, 100); diff --git a/test/integration/async_lang.js b/test/integration/async_lang.js index 18ee2b3..0cab5bc 100644 --- a/test/integration/async_lang.js +++ b/test/integration/async_lang.js @@ -1,8 +1,12 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; -sentiment(dataset, 'fr', function (err, result) { +var input = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; +var options = { + language: 'fr' +}; + +sentiment(input, options, function (err, result) { test('asynchronous positive FR text', function (t) { t.type(result, 'object'); t.equal(result.score, 5); diff --git a/test/integration/async_lang_inject.js b/test/integration/async_lang_inject.js index f3004f8..7d59dd7 100644 --- a/test/integration/async_lang_inject.js +++ b/test/integration/async_lang_inject.js @@ -1,8 +1,13 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; -sentiment(dataset, 'fr', { 'bien': 100 }, function (err, result) { +var input = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; +var options = { + language: 'fr', + extras: { 'bien': 100 } +}; + +sentiment(input, options, function (err, result) { test('asynchronous FR inject', function (t) { t.type(result, 'object'); t.equal(result.score, 102); diff --git a/test/integration/async_negative.js b/test/integration/async_negative.js index c0630ab..572e1f7 100644 --- a/test/integration/async_negative.js +++ b/test/integration/async_negative.js @@ -1,8 +1,9 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'Hey you worthless scumbag'; -sentiment(dataset, function (err, result) { +var input = 'Hey you worthless scumbag'; + +sentiment(input, function (err, result) { test('asynchronous negative', function (t) { t.type(result, 'object'); t.equal(result.score, -6); diff --git a/test/integration/async_negative_text_and_emoji.js b/test/integration/async_negative_text_and_emoji.js index bbc9eda..c211f30 100644 --- a/test/integration/async_negative_text_and_emoji.js +++ b/test/integration/async_negative_text_and_emoji.js @@ -1,8 +1,9 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'Hey you worthless scumbag ๐Ÿ˜ฆ'; -sentiment(dataset, function (err, result) { +var input = 'Hey you worthless scumbag ๐Ÿ˜ฆ'; + +sentiment(input, function (err, result) { test('asynchronous negative text and emoji', function (t) { t.type(result, 'object'); t.equal(result.score, -8); diff --git a/test/integration/async_positive.js b/test/integration/async_positive.js index 82fd705..70f8ce0 100644 --- a/test/integration/async_positive.js +++ b/test/integration/async_positive.js @@ -1,8 +1,9 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'This is so cool'; -sentiment(dataset, function (err, result) { +var input = 'This is so cool'; + +sentiment(input, function (err, result) { test('asynchronous positive', function (t) { t.type(result, 'object'); t.equal(result.score, 1); diff --git a/test/integration/async_positive_text_and_emoji.js b/test/integration/async_positive_text_and_emoji.js index bb2589c..746d31a 100644 --- a/test/integration/async_positive_text_and_emoji.js +++ b/test/integration/async_positive_text_and_emoji.js @@ -1,8 +1,9 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'This is so cool ๐Ÿ˜ƒ'; -sentiment(dataset, function (err, result) { +var input = 'This is so cool ๐Ÿ˜ƒ'; + +sentiment(input, function (err, result) { test('asynchronous positive text and emoji', function (t) { t.type(result, 'object'); t.equal(result.score, 3); diff --git a/test/integration/gh_12.js b/test/integration/gh_12.js index bb94b8e..37d102c 100644 --- a/test/integration/gh_12.js +++ b/test/integration/gh_12.js @@ -1,8 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'self-deluded'; -var result = sentiment(dataset); +var input = 'self-deluded'; +var result = sentiment(input); test('synchronous positive', function (t) { t.type(result, 'object'); diff --git a/test/integration/gh_13.js b/test/integration/gh_13.js index cdb2358..88270dd 100644 --- a/test/integration/gh_13.js +++ b/test/integration/gh_13.js @@ -1,8 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'constructor'; -var result = sentiment(dataset); +var input = 'constructor'; +var result = sentiment(input); test('synchronous positive', function (t) { t.type(result, 'object'); diff --git a/test/integration/gh_85.js b/test/integration/gh_85.js index 1bb048d..ace135a 100644 --- a/test/integration/gh_85.js +++ b/test/integration/gh_85.js @@ -1,8 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'i\'ll be there soon'; -var result = sentiment(dataset); +var input = 'i\'ll be there soon'; +var result = sentiment(input); test('synchronous positive', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_fuzz.js b/test/integration/sync_fuzz.js index 7988124..01f4e21 100644 --- a/test/integration/sync_fuzz.js +++ b/test/integration/sync_fuzz.js @@ -2,9 +2,9 @@ var test = require('tap').test; var fuzz = require('../fixtures/fuzz'); var sentiment = require('../../lib/index'); -var dataset = fuzz(1000); +var input = fuzz(1000); test('synchronous fuzz', function (t) { - t.type(sentiment(dataset), 'object'); + t.type(sentiment(input), 'object'); t.end(); }); diff --git a/test/integration/sync_inject.js b/test/integration/sync_inject.js index d21ac91..684f003 100644 --- a/test/integration/sync_inject.js +++ b/test/integration/sync_inject.js @@ -1,8 +1,12 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'This is so cool'; -var result = sentiment(dataset, {'cool': 100}); +var input = 'This is so cool'; +var options = { + extras: { 'cool': 100 } +}; + +var result = sentiment(input, options); test('synchronous inject', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_lang.js b/test/integration/sync_lang.js index cdbda58..f9c2972 100644 --- a/test/integration/sync_lang.js +++ b/test/integration/sync_lang.js @@ -1,8 +1,12 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; -var result = sentiment(dataset, 'fr'); +var input = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; +var options = { + language: 'fr' +}; + +var result = sentiment(input, options); test('synchronous positive FR text', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_lang_inject.js b/test/integration/sync_lang_inject.js index 046e96a..c0187f0 100644 --- a/test/integration/sync_lang_inject.js +++ b/test/integration/sync_lang_inject.js @@ -1,8 +1,15 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; -var result = sentiment(dataset, 'fr', { 'bien': 100 }); +var input = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; +var options = { + language: 'fr', + extras: { + 'bien': 100 + } +}; + +var result = sentiment(input, options); test('synchronous inject FR', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_negation.js b/test/integration/sync_negation.js index 80cb26e..88fc66a 100644 --- a/test/integration/sync_negation.js +++ b/test/integration/sync_negation.js @@ -1,8 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'I don\'t hate you'; -var result = sentiment(dataset); +var input = 'I don\'t hate you'; +var result = sentiment(input); test('synchronous negation', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_negative.js b/test/integration/sync_negative.js index 09e9510..7f509d6 100644 --- a/test/integration/sync_negative.js +++ b/test/integration/sync_negative.js @@ -1,8 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'Hey you worthless scumbag'; -var result = sentiment(dataset); +var input = 'Hey you worthless scumbag'; +var result = sentiment(input); test('synchronous negative', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_negative_text_and_emoji.js b/test/integration/sync_negative_text_and_emoji.js index 0e6e1a5..6243397 100644 --- a/test/integration/sync_negative_text_and_emoji.js +++ b/test/integration/sync_negative_text_and_emoji.js @@ -1,8 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'Hey you worthless scumbag ๐Ÿ˜ฆ'; -var result = sentiment(dataset); +var input = 'Hey you worthless scumbag ๐Ÿ˜ฆ'; +var result = sentiment(input); test('synchronous negative with emoji', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_positive.js b/test/integration/sync_positive.js index 5ac75ba..f92256a 100644 --- a/test/integration/sync_positive.js +++ b/test/integration/sync_positive.js @@ -1,8 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'This is so cool'; -var result = sentiment(dataset); +var input = 'This is so cool'; +var result = sentiment(input); test('synchronous positive', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_positive_text_and_emoji.js b/test/integration/sync_positive_text_and_emoji.js index dc780bd..d761cee 100644 --- a/test/integration/sync_positive_text_and_emoji.js +++ b/test/integration/sync_positive_text_and_emoji.js @@ -1,8 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var dataset = 'This is so cool ๐Ÿ˜ƒ'; -var result = sentiment(dataset); +var input = 'This is so cool ๐Ÿ˜ƒ'; +var result = sentiment(input); test('synchronous positive with emoji', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_undefined.js b/test/integration/sync_undefined.js index 53b0c67..66f5023 100644 --- a/test/integration/sync_undefined.js +++ b/test/integration/sync_undefined.js @@ -1,7 +1,8 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var result = sentiment(undefined); +var input = undefined; +var result = sentiment(input); test('synchronous undefined', function (t) { t.type(result, 'object'); From 2dcb120798edb2c4f81923a448589ff6100ebf94 Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Wed, 28 Feb 2018 13:38:29 +0100 Subject: [PATCH 7/9] Add support for dynamically registring new languages --- languages/en/index.js | 4 + languages/en/labels.json | 3384 +++++++++++++++++ .../en/negators.json | 0 languages/en/scoring-strategy.js | 13 + lib/helper.js | 66 - lib/index.js | 150 +- lib/language-processor.js | 78 + lib/negation/negation-en.js | 11 - lib/negation/negations.js | 24 - package.json | 6 +- test/benchmark/performance.js | 4 +- test/benchmark/validate.js | 2 +- test/integration/async_inject.js | 2 +- test/integration/async_lang_inject.js | 19 - test/integration/async_negative.js | 2 +- .../async_negative_text_and_emoji.js | 2 +- test/integration/async_positive.js | 2 +- .../async_positive_text_and_emoji.js | 2 +- .../{async_lang.js => custom_lang.js} | 15 +- test/integration/disable_emojis.js | 15 + test/integration/gh_12.js | 2 +- test/integration/gh_13.js | 2 +- test/integration/gh_85.js | 2 +- test/integration/supported_lang.js | 20 + test/integration/sync_corpus.js | 2 +- test/integration/sync_fuzz.js | 2 +- test/integration/sync_inject.js | 2 +- test/integration/sync_lang.js | 18 - test/integration/sync_lang_inject.js | 21 - test/integration/sync_negation.js | 2 +- test/integration/sync_negative.js | 2 +- .../sync_negative_text_and_emoji.js | 2 +- test/integration/sync_positive.js | 2 +- .../sync_positive_text_and_emoji.js | 2 +- test/integration/sync_undefined.js | 2 +- test/unit/language-processor.js | 37 + test/unit/spec.js | 9 +- 37 files changed, 3677 insertions(+), 253 deletions(-) create mode 100644 languages/en/index.js create mode 100644 languages/en/labels.json rename lib/negation/negators-en.json => languages/en/negators.json (100%) create mode 100644 languages/en/scoring-strategy.js delete mode 100644 lib/helper.js create mode 100644 lib/language-processor.js delete mode 100644 lib/negation/negation-en.js delete mode 100644 lib/negation/negations.js delete mode 100644 test/integration/async_lang_inject.js rename test/integration/{async_lang.js => custom_lang.js} (50%) create mode 100644 test/integration/disable_emojis.js create mode 100644 test/integration/supported_lang.js delete mode 100644 test/integration/sync_lang.js delete mode 100644 test/integration/sync_lang_inject.js create mode 100644 test/unit/language-processor.js diff --git a/languages/en/index.js b/languages/en/index.js new file mode 100644 index 0000000..46e0f91 --- /dev/null +++ b/languages/en/index.js @@ -0,0 +1,4 @@ +module.exports = { + labels: require('./labels.json'), + scoringStrategy: require('./scoring-strategy') +}; diff --git a/languages/en/labels.json b/languages/en/labels.json new file mode 100644 index 0000000..67774e5 --- /dev/null +++ b/languages/en/labels.json @@ -0,0 +1,3384 @@ +{ + "abandon": -2, + "abandoned": -2, + "abandons": -2, + "abducted": -2, + "abduction": -2, + "abductions": -2, + "abhor": -3, + "abhorred": -3, + "abhorrent": -3, + "abhors": -3, + "abilities": 2, + "ability": 2, + "aboard": 1, + "aborted": -1, + "aborts": -1, + "absentee": -1, + "absentees": -1, + "absolve": 2, + "absolved": 2, + "absolves": 2, + "absolving": 2, + "absorbed": 1, + "abuse": -3, + "abused": -3, + "abuses": -3, + "abusing": -3, + "abusive": -3, + "accept": 1, + "acceptable": 1, + "acceptance": 1, + "accepted": 1, + "accepting": 1, + "accepts": 1, + "accessible": 1, + "accident": -2, + "accidental": -2, + "accidentally": -2, + "accidents": -2, + "acclaim": 2, + "acclaimed": 2, + "accolade": 2, + "accomplish": 2, + "accomplished": 2, + "accomplishes": 2, + "accomplishment": 2, + "accomplishments": 2, + "accusation": -2, + "accusations": -2, + "accuse": -2, + "accused": -2, + "accuses": -2, + "accusing": -2, + "ache": -2, + "achievable": 1, + "aching": -2, + "acquit": 2, + "acquits": 2, + "acquitted": 2, + "acquitting": 2, + "acrimonious": -3, + "active": 1, + "adequate": 1, + "admire": 3, + "admired": 3, + "admires": 3, + "admiring": 3, + "admit": -1, + "admits": -1, + "admitted": -1, + "admonish": -2, + "admonished": -2, + "adopt": 1, + "adopts": 1, + "adorable": 3, + "adoration": 3, + "adore": 3, + "adored": 3, + "adores": 3, + "adoring": 3, + "adoringly": 3, + "advanced": 1, + "advantage": 2, + "advantageous": 2, + "advantageously": 2, + "advantages": 2, + "adventure": 2, + "adventures": 2, + "adventurous": 2, + "adversary": -1, + "advisable": 1, + "affected": -1, + "affection": 3, + "affectionate": 3, + "affectionateness": 3, + "afflicted": -1, + "affordable": 2, + "affronted": -1, + "aficionados": 2, + "afraid": -2, + "aggravate": -2, + "aggravated": -2, + "aggravates": -2, + "aggravating": -2, + "aggression": -2, + "aggressions": -2, + "aggressive": -2, + "aggressiveness": -2, + "aghast": -2, + "agog": 2, + "agonise": -3, + "agonised": -3, + "agonises": -3, + "agonising": -3, + "agonize": -3, + "agonized": -3, + "agonizes": -3, + "agonizing": -3, + "agree": 1, + "agreeable": 2, + "agreed": 1, + "agreement": 1, + "agrees": 1, + "alarm": -2, + "alarmed": -2, + "alarmist": -2, + "alarmists": -2, + "alas": -1, + "alert": -1, + "alienation": -2, + "alive": 1, + "allegation": -2, + "allegations": -2, + "allergic": -2, + "allow": 1, + "ally": 2, + "alone": -2, + "altruistic": 2, + "amaze": 2, + "amazed": 2, + "amazes": 2, + "amazing": 4, + "ambitious": 2, + "ambivalent": -1, + "amicable": 2, + "amuse": 3, + "amused": 3, + "amusement": 3, + "amusements": 3, + "anger": -3, + "angered": -3, + "angers": -3, + "angry": -3, + "anguish": -3, + "anguished": -3, + "animosity": -2, + "annoy": -2, + "annoyance": -2, + "annoyed": -2, + "annoying": -2, + "annoys": -2, + "antagonistic": -2, + "anti": -1, + "anticipation": 1, + "anxiety": -2, + "anxious": -2, + "apathetic": -3, + "apathy": -3, + "apeshit": -3, + "apocalyptic": -2, + "apologise": -1, + "apologised": -1, + "apologises": -1, + "apologising": -1, + "apologize": -1, + "apologized": -1, + "apologizes": -1, + "apologizing": -1, + "apology": -1, + "appalled": -2, + "appalling": -2, + "appealing": 2, + "appease": 2, + "appeased": 2, + "appeases": 2, + "appeasing": 2, + "applaud": 2, + "applauded": 2, + "applauding": 2, + "applauds": 2, + "applause": 2, + "appreciate": 2, + "appreciated": 2, + "appreciates": 2, + "appreciating": 2, + "appreciation": 2, + "apprehensive": -2, + "appropriate": 2, + "appropriately": 2, + "approval": 2, + "approved": 2, + "approves": 2, + "ardent": 1, + "arrest": -2, + "arrested": -3, + "arrests": -2, + "arrogant": -2, + "arsehole": -4, + "ashame": -2, + "ashamed": -2, + "ass": -4, + "assassination": -3, + "assassinations": -3, + "assault": -2, + "assaults": -2, + "asset": 2, + "assets": 2, + "assfucking": -4, + "asshole": -4, + "astonished": 2, + "astound": 3, + "astounded": 3, + "astounding": 3, + "astoundingly": 3, + "astounds": 3, + "atrocious": -3, + "atrocity": -3, + "attack": -1, + "attacked": -1, + "attacking": -1, + "attacks": -1, + "attract": 1, + "attracted": 1, + "attracting": 2, + "attraction": 2, + "attractions": 2, + "attractive": 2, + "attractively": 2, + "attractiveness": 2, + "attracts": 1, + "audacious": 3, + "aura": 1, + "authority": 1, + "avenge": -2, + "avenged": -2, + "avenger": -2, + "avengers": -2, + "avenges": -2, + "avenging": -2, + "avert": -1, + "averted": -1, + "averts": -1, + "avid": 2, + "avoid": -1, + "avoided": -1, + "avoids": -1, + "await": -1, + "awaited": -1, + "awaits": -1, + "award": 3, + "awarded": 3, + "awards": 3, + "awesome": 4, + "awful": -3, + "awkward": -2, + "axe": -1, + "axed": -1, + "backed": 1, + "backing": 2, + "backs": 1, + "bad": -3, + "bad luck": -2, + "badass": -3, + "badly": -3, + "badness": -3, + "bailout": -2, + "balanced": 1, + "bamboozle": -2, + "bamboozled": -2, + "bamboozles": -2, + "ban": -2, + "banish": -1, + "bankrupt": -3, + "bankruptcy": -3, + "bankster": -3, + "banned": -2, + "barbarian": -2, + "barbaric": -2, + "barbarous": -2, + "bargain": 2, + "barrier": -2, + "bastard": -5, + "bastards": -5, + "battle": -1, + "battled": -1, + "battles": -1, + "battling": -2, + "beaten": -2, + "beatific": 3, + "beating": -1, + "beauties": 3, + "beautiful": 3, + "beautifully": 3, + "beautify": 3, + "beauty": 3, + "befit": 2, + "befitting": 2, + "belittle": -2, + "belittled": -2, + "beloved": 3, + "benefactor": 2, + "benefactors": 2, + "benefit": 2, + "benefits": 2, + "benefitted": 2, + "benefitting": 2, + "benevolent": 3, + "bereave": -2, + "bereaved": -2, + "bereaves": -2, + "bereaving": -2, + "best": 3, + "best damn": 4, + "betray": -3, + "betrayal": -3, + "betrayed": -3, + "betraying": -3, + "betrays": -3, + "better": 2, + "bias": -1, + "biased": -2, + "big": 1, + "bitch": -5, + "bitches": -5, + "bitter": -2, + "bitterest": -2, + "bitterly": -2, + "bizarre": -2, + "blackmail": -3, + "blackmailed": -3, + "blackmailing": -3, + "blackmails": -3, + "blah": -2, + "blame": -2, + "blamed": -2, + "blames": -2, + "blaming": -2, + "bless": 2, + "blesses": 2, + "blessing": 3, + "blessings": 3, + "blind": -1, + "bliss": 3, + "blissful": 3, + "blithe": 2, + "bloated": -1, + "block": -1, + "blockade": -2, + "blockbuster": 3, + "blocked": -1, + "blocking": -1, + "blocks": -1, + "bloody": -3, + "blurry": -2, + "boastful": -2, + "bold": 2, + "boldly": 2, + "bomb": -1, + "boost": 1, + "boosted": 1, + "boosting": 1, + "boosts": 1, + "bore": -2, + "bored": -2, + "boring": -3, + "bother": -2, + "bothered": -2, + "bothers": -2, + "bothersome": -2, + "boycott": -2, + "boycotted": -2, + "boycotting": -2, + "boycotts": -2, + "brainwashing": -3, + "brave": 2, + "braveness": 2, + "bravery": 2, + "bravura": 3, + "breach": -2, + "breached": -2, + "breaches": -2, + "breaching": -2, + "breakthrough": 3, + "breathtaking": 5, + "bribe": -3, + "bribed": -3, + "bribes": -3, + "bribing": -3, + "bright": 1, + "brightest": 2, + "brightness": 1, + "brilliant": 4, + "brilliance": 3, + "brilliances": 3, + "brisk": 2, + "broke": -1, + "broken": -1, + "brooding": -2, + "brutal": -3, + "brutally": -3, + "bullied": -2, + "bullshit": -4, + "bully": -2, + "bullying": -2, + "bummer": -2, + "buoyant": 2, + "burden": -2, + "burdened": -2, + "burdening": -2, + "burdens": -2, + "burglar": -2, + "burglary": -2, + "calm": 2, + "calmed": 2, + "calming": 2, + "calms": 2, + "can't stand": -3, + "cancel": -1, + "cancelled": -1, + "cancelling": -1, + "cancels": -1, + "cancer": -1, + "capabilities": 1, + "capability": 1, + "capable": 1, + "captivated": 3, + "care": 2, + "carefree": 1, + "careful": 2, + "carefully": 2, + "carefulness": 2, + "careless": -2, + "cares": 2, + "caring": 2, + "cashing in": -2, + "casualty": -2, + "catastrophe": -3, + "catastrophic": -4, + "cautious": -1, + "celebrate": 3, + "celebrated": 3, + "celebrates": 3, + "celebrating": 3, + "celebration": 3, + "celebrations": 3, + "censor": -2, + "censored": -2, + "censors": -2, + "certain": 1, + "chagrin": -2, + "chagrined": -2, + "challenge": -1, + "champion": 2, + "championed": 2, + "champions": 2, + "chance": 2, + "chances": 2, + "chaos": -2, + "chaotic": -2, + "charged": -3, + "charges": -2, + "charisma": 2, + "charitable": 2, + "charm": 3, + "charming": 3, + "charmingly": 3, + "charmless": -3, + "chastise": -3, + "chastised": -3, + "chastises": -3, + "chastising": -3, + "cheat": -3, + "cheated": -3, + "cheater": -3, + "cheaters": -3, + "cheating": -3, + "cheats": -3, + "cheer": 2, + "cheered": 2, + "cheerful": 2, + "cheerfully": 2, + "cheering": 2, + "cheerless": -2, + "cheers": 2, + "cheery": 3, + "cherish": 2, + "cherished": 2, + "cherishes": 2, + "cherishing": 2, + "chic": 2, + "chide": -3, + "chided": -3, + "chides": -3, + "chiding": -3, + "childish": -2, + "chilling": -1, + "choke": -2, + "choked": -2, + "chokes": -2, + "choking": -2, + "clarifies": 2, + "clarity": 2, + "clash": -2, + "classy": 3, + "clean": 2, + "cleaner": 2, + "clear": 1, + "cleared": 1, + "clearly": 1, + "clears": 1, + "clever": 2, + "clouded": -1, + "clueless": -2, + "cock": -5, + "cocksucker": -5, + "cocksuckers": -5, + "cocky": -2, + "coerced": -2, + "coercion": -2, + "collapse": -2, + "collapsed": -2, + "collapses": -2, + "collapsing": -2, + "collide": -1, + "collides": -1, + "colliding": -1, + "collision": -2, + "collisions": -2, + "colluding": -3, + "combat": -1, + "combats": -1, + "comedy": 1, + "comfort": 2, + "comfortable": 2, + "comfortably": 2, + "comforting": 2, + "comforts": 2, + "comic": 1, + "commend": 2, + "commended": 2, + "commit": 1, + "commitment": 2, + "commits": 1, + "committed": 1, + "committing": 1, + "compassion": 2, + "compassionate": 2, + "compelled": 1, + "competencies": 1, + "competent": 2, + "competitive": 2, + "complacent": -2, + "complain": -2, + "complained": -2, + "complaining": -2, + "complains": -2, + "complaint": -2, + "complaints": -2, + "complicating": -2, + "compliment": 2, + "complimented": 2, + "compliments": 2, + "comprehensive": 2, + "concerned": -2, + "conciliate": 2, + "conciliated": 2, + "conciliates": 2, + "conciliating": 2, + "condemn": -2, + "condemnation": -2, + "condemned": -2, + "condemns": -2, + "confidence": 2, + "confident": 2, + "confidently": 2, + "conflict": -2, + "conflicting": -2, + "conflictive": -2, + "conflicts": -2, + "confuse": -2, + "confused": -2, + "confusing": -2, + "congrats": 2, + "congratulate": 2, + "congratulation": 2, + "congratulations": 2, + "consent": 2, + "consents": 2, + "consolable": 2, + "conspiracy": -3, + "constipation": -2, + "constrained": -2, + "contagion": -2, + "contagions": -2, + "contagious": -1, + "contaminant": -2, + "contaminants": -2, + "contaminate": -2, + "contaminated": -2, + "contaminates": -2, + "contaminating": -2, + "contamination": -2, + "contaminations": -2, + "contempt": -2, + "contemptible": -2, + "contemptuous": -2, + "contemptuously": -2, + "contend": -1, + "contender": -1, + "contending": -1, + "contentious": -2, + "contestable": -2, + "controversial": -2, + "controversially": -2, + "controversies": -2, + "controversy": -2, + "convicted": -2, + "convince": 1, + "convinced": 1, + "convinces": 1, + "convivial": 2, + "cool": 1, + "cool stuff": 3, + "cornered": -2, + "corpse": -1, + "corrupt": -3, + "corrupted": -3, + "corrupting": -3, + "corruption": -3, + "corrupts": -3, + "costly": -2, + "courage": 2, + "courageous": 2, + "courageously": 2, + "courageousness": 2, + "courteous": 2, + "courtesy": 2, + "cover-up": -3, + "coward": -2, + "cowardly": -2, + "coziness": 2, + "cramp": -1, + "crap": -3, + "crappy": -3, + "crash": -2, + "crazier": -2, + "craziest": -2, + "crazy": -2, + "creative": 2, + "crestfallen": -2, + "cried": -2, + "cries": -2, + "crime": -3, + "crimes": -3, + "criminal": -3, + "criminals": -3, + "criminate": -3, + "criminated": -3, + "criminates": -3, + "crisis": -3, + "critic": -2, + "criticise": -2, + "criticised": -2, + "criticises": -2, + "criticising": -2, + "criticism": -2, + "criticize": -2, + "criticized": -2, + "criticizes": -2, + "criticizing": -2, + "critics": -2, + "critique": -2, + "crowding": -1, + "crude": -1, + "cruel": -3, + "cruelty": -3, + "crush": -1, + "crushed": -2, + "crushes": -1, + "crushing": -1, + "cry": -1, + "crying": -2, + "cunning": 2, + "cunt": -5, + "curious": 1, + "curse": -1, + "cut": -1, + "cutback": -2, + "cutbacks": -2, + "cute": 2, + "cuts": -1, + "cutting": -1, + "cynic": -2, + "cynical": -2, + "cynicism": -2, + "damage": -3, + "damaged": -3, + "damages": -3, + "damaging": -3, + "damn": -2, + "damn cute": 3, + "damn good": 4, + "damned": -4, + "damnit": -4, + "danger": -2, + "dangerous": -2, + "dangerously": -2, + "daredevil": 2, + "daring": 2, + "darkest": -2, + "darkness": -1, + "dauntless": 2, + "dazzling": 3, + "dead": -3, + "deadening": -2, + "deadlock": -2, + "deadly": -3, + "deafening": -1, + "dear": 2, + "dearly": 3, + "death": -2, + "deaths": -2, + "debonair": 2, + "debt": -2, + "deceit": -3, + "deceitful": -3, + "deceive": -3, + "deceived": -3, + "deceives": -3, + "deceiving": -3, + "deception": -3, + "deceptive": -3, + "decisive": 1, + "dedicated": 2, + "dedication": 2, + "defeat": -2, + "defeated": -2, + "defect": -3, + "defective": -3, + "defects": -3, + "defender": 2, + "defenders": 2, + "defenseless": -2, + "defer": -1, + "deferring": -1, + "defiant": -1, + "deficient": -2, + "deficiency": -2, + "deficiencies": -2, + "deficit": -2, + "deformed": -2, + "deformities": -2, + "deformity": -2, + "defraud": -3, + "defrauds": -3, + "deft": 2, + "defunct": -2, + "degrade": -2, + "degraded": -2, + "degrades": -2, + "dehumanize": -2, + "dehumanized": -2, + "dehumanizes": -2, + "dehumanizing": -2, + "deject": -2, + "dejected": -2, + "dejecting": -2, + "dejects": -2, + "delay": -1, + "delayed": -1, + "delectable": 3, + "delicious": 3, + "delight": 3, + "delighted": 3, + "delightful": 3, + "delightfully": 3, + "delighting": 3, + "delights": 3, + "demand": -1, + "demanded": -1, + "demanding": -1, + "demands": -1, + "demonstration": -1, + "demoralize": -2, + "demoralized": -2, + "demoralizes": -2, + "demoralizing": -2, + "denial": -2, + "denials": -2, + "denied": -2, + "denier": -2, + "deniers": -2, + "denies": -2, + "denounce": -2, + "denounces": -2, + "dent": -2, + "deny": -2, + "denying": -2, + "deplore": -3, + "deplored": -3, + "deplores": -3, + "deploring": -3, + "deport": -2, + "deported": -2, + "deporting": -2, + "deports": -2, + "deportation": -2, + "deportations": -2, + "depressed": -2, + "depressing": -2, + "deprivation": -3, + "derail": -2, + "derailed": -2, + "derails": -2, + "derelict": -2, + "deride": -2, + "derided": -2, + "derides": -2, + "deriding": -2, + "derision": -2, + "desirable": 2, + "desire": 1, + "desired": 2, + "desirous": 2, + "despair": -3, + "despairing": -3, + "despairs": -3, + "desperate": -3, + "desperately": -3, + "despondent": -3, + "destroy": -3, + "destroyed": -3, + "destroying": -3, + "destroys": -3, + "destruction": -3, + "destructive": -3, + "detached": -1, + "detain": -2, + "detained": -2, + "detention": -2, + "deteriorate": -2, + "deteriorated": -2, + "deteriorates": -2, + "deteriorating": -2, + "determined": 2, + "deterrent": -2, + "detract": -1, + "detracted": -1, + "detracts": -1, + "devastate": -2, + "devastated": -2, + "devastating": -2, + "devastation": -2, + "devastations": -2, + "devoted": 3, + "devotion": 2, + "devotional": 2, + "diamond": 1, + "dick": -4, + "dickhead": -4, + "die": -3, + "died": -3, + "difficult": -1, + "diffident": -2, + "dignity": 2, + "dilemma": -1, + "dilligence": 2, + "dipshit": -3, + "dire": -3, + "direful": -3, + "dirt": -2, + "dirtier": -2, + "dirtiest": -2, + "dirty": -2, + "disabilities": -2, + "disability": -2, + "disabling": -1, + "disadvantage": -2, + "disadvantaged": -2, + "disagree": -2, + "disagreeable": -2, + "disagreement": -2, + "disappear": -1, + "disappeared": -1, + "disappears": -1, + "disappoint": -2, + "disappointed": -2, + "disappointing": -2, + "disappointment": -2, + "disappointments": -2, + "disappoints": -2, + "disapproval": -2, + "disapprovals": -2, + "disapprove": -2, + "disapproved": -2, + "disapproves": -2, + "disapproving": -2, + "disaster": -2, + "disasters": -2, + "disastrous": -3, + "disbelieve": -2, + "discard": -1, + "discarded": -1, + "discarding": -1, + "discards": -1, + "discernment": 2, + "discomfort": -2, + "disconsolate": -2, + "disconsolation": -2, + "discontented": -2, + "discord": -2, + "discounted": -1, + "discouraged": -2, + "discredited": -2, + "discriminate": -2, + "discriminated": -2, + "discriminates": -2, + "discriminating": -2, + "discriminatory": -2, + "disdain": -2, + "disease": -1, + "diseases": -1, + "disgrace": -2, + "disgraced": -2, + "disguise": -1, + "disguised": -1, + "disguises": -1, + "disguising": -1, + "disgust": -3, + "disgusted": -3, + "disgustful": -3, + "disgusting": -3, + "disheartened": -2, + "dishonest": -2, + "disillusioned": -2, + "disinclined": -2, + "disjointed": -2, + "dislike": -2, + "disliked": -2, + "dislikes": -2, + "dismal": -2, + "dismayed": -2, + "dismissed": -2, + "disorder": -2, + "disorders": -2, + "disorganized": -2, + "disoriented": -2, + "disparage": -2, + "disparaged": -2, + "disparages": -2, + "disparaging": -2, + "displeased": -2, + "displeasure": -2, + "disproportionate": -2, + "dispute": -2, + "disputed": -2, + "disputes": -2, + "disputing": -2, + "disqualified": -2, + "disquiet": -2, + "disregard": -2, + "disregarded": -2, + "disregarding": -2, + "disregards": -2, + "disrespect": -2, + "disrespected": -2, + "disrupt": -2, + "disrupted": -2, + "disrupting": -2, + "disruption": -2, + "disruptions": -2, + "disruptive": -2, + "disrupts": -2, + "dissatisfied": -2, + "distasteful": -2, + "distinguished": 2, + "distort": -2, + "distorted": -2, + "distorting": -2, + "distorts": -2, + "distract": -2, + "distracted": -2, + "distraction": -2, + "distracts": -2, + "distress": -2, + "distressed": -2, + "distresses": -2, + "distressing": -2, + "distrust": -3, + "distrustful": -3, + "disturb": -2, + "disturbed": -2, + "disturbing": -2, + "disturbs": -2, + "dithering": -2, + "diverting": -1, + "dizzy": -1, + "dodging": -2, + "dodgy": -2, + "does not work": -3, + "dolorous": -2, + "donate": 2, + "donated": 2, + "donates": 2, + "donating": 2, + "donation": 2, + "dont like": -2, + "doom": -2, + "doomed": -2, + "doubt": -1, + "doubted": -1, + "doubtful": -1, + "doubting": -1, + "doubts": -1, + "douche": -3, + "douchebag": -3, + "dour": -2, + "downcast": -2, + "downer": -2, + "downhearted": -2, + "downside": -2, + "drag": -1, + "dragged": -1, + "drags": -1, + "drained": -2, + "dread": -2, + "dreaded": -2, + "dreadful": -3, + "dreading": -2, + "dream": 1, + "dreams": 1, + "dreary": -2, + "droopy": -2, + "drop": -1, + "dropped": -1, + "drown": -2, + "drowned": -2, + "drowns": -2, + "drudgery": -2, + "drunk": -2, + "dubious": -2, + "dud": -2, + "dull": -2, + "dumb": -3, + "dumbass": -3, + "dump": -1, + "dumped": -2, + "dumps": -1, + "dupe": -2, + "duped": -2, + "dupery": -2, + "durable": 2, + "dying": -3, + "dysfunction": -2, + "eager": 2, + "earnest": 2, + "ease": 2, + "easy": 1, + "ecstatic": 4, + "eerie": -2, + "eery": -2, + "effective": 2, + "effectively": 2, + "effectiveness": 2, + "effortlessly": 2, + "elated": 3, + "elation": 3, + "elegant": 2, + "elegantly": 2, + "embarrass": -2, + "embarrassed": -2, + "embarrasses": -2, + "embarrassing": -2, + "embarrassment": -2, + "embezzlement": -3, + "embittered": -2, + "embrace": 1, + "emergency": -2, + "empathetic": 2, + "empower": 2, + "empowerment": 2, + "emptiness": -1, + "empty": -1, + "enchanted": 2, + "encourage": 2, + "encouraged": 2, + "encouragement": 2, + "encourages": 2, + "encouraging": 2, + "endorse": 2, + "endorsed": 2, + "endorsement": 2, + "endorses": 2, + "enemies": -2, + "enemy": -2, + "energetic": 2, + "engage": 1, + "engages": 1, + "engrossed": 1, + "engrossing": 3, + "enjoy": 2, + "enjoyable": 2, + "enjoyed": 2, + "enjoying": 2, + "enjoys": 2, + "enlighten": 2, + "enlightened": 2, + "enlightening": 2, + "enlightens": 2, + "ennui": -2, + "enrage": -2, + "enraged": -2, + "enrages": -2, + "enraging": -2, + "enrapture": 3, + "enslave": -2, + "enslaved": -2, + "enslaves": -2, + "ensure": 1, + "ensuring": 1, + "enterprising": 1, + "entertaining": 2, + "enthral": 3, + "enthusiastic": 3, + "entitled": 1, + "entrusted": 2, + "envies": -1, + "envious": -2, + "environment-friendly": 2, + "envy": -1, + "envying": -1, + "erroneous": -2, + "error": -2, + "errors": -2, + "escape": -1, + "escapes": -1, + "escaping": -1, + "esteem": 2, + "esteemed": 2, + "ethical": 2, + "euphoria": 3, + "euphoric": 4, + "evacuate": -1, + "evacuated": -1, + "evacuates": -1, + "evacuating": -1, + "evacuation": -1, + "evergreen": 2, + "evergreens": 2, + "evergreening": -3, + "eviction": -1, + "evil": -3, + "exacerbate": -2, + "exacerbated": -2, + "exacerbates": -2, + "exacerbating": -2, + "exaggerate": -2, + "exaggerated": -2, + "exaggerates": -2, + "exaggerating": -2, + "exasparate": -2, + "exasperated": -2, + "exasperates": -2, + "exasperating": -2, + "excellence": 3, + "excellent": 3, + "excite": 3, + "excited": 3, + "excitement": 3, + "exciting": 3, + "exclude": -1, + "excluded": -2, + "exclusion": -1, + "exclusive": 2, + "excruciatingly": -1, + "excuse": -1, + "exempt": -1, + "exhausted": -2, + "exhilarated": 3, + "exhilarates": 3, + "exhilarating": 3, + "exonerate": 2, + "exonerated": 2, + "exonerates": 2, + "exonerating": 2, + "expand": 1, + "expands": 1, + "expel": -2, + "expelled": -2, + "expelling": -2, + "expels": -2, + "expertly": 2, + "exploit": -2, + "exploited": -2, + "exploiting": -2, + "exploits": -2, + "exploration": 1, + "explorations": 1, + "expose": -1, + "exposed": -1, + "exposes": -1, + "exposing": -1, + "exquisite": 3, + "extend": 1, + "extends": 1, + "extremist": -2, + "extremists": -2, + "exuberant": 4, + "exultant": 3, + "exultantly": 3, + "fabulous": 4, + "fabulously": 4, + "fad": -2, + "fag": -3, + "faggot": -3, + "faggots": -3, + "fail": -2, + "failed": -2, + "failing": -2, + "fails": -2, + "failure": -2, + "failures": -2, + "fainthearted": -2, + "fair": 2, + "fairness": 2, + "faith": 1, + "faithful": 3, + "fake": -3, + "faker": -3, + "fakes": -3, + "faking": -3, + "fallen": -2, + "falling": -1, + "false": -1, + "falsely": -2, + "falsified": -3, + "falsify": -3, + "fame": 1, + "famine": -2, + "famous": 2, + "fan": 3, + "fantastic": 4, + "farce": -1, + "fascinate": 3, + "fascinated": 3, + "fascinates": 3, + "fascinating": 3, + "fascination": 3, + "fascist": -2, + "fascists": -2, + "fatal": -3, + "fatalities": -3, + "fatality": -3, + "fatigue": -2, + "fatigued": -2, + "fatigues": -2, + "fatiguing": -2, + "favor": 2, + "favorable": 2, + "favorably": 2, + "favored": 2, + "favorite": 2, + "favorited": 2, + "favorites": 2, + "favors": 2, + "favour": 2, + "favourable": 2, + "favourably": 2, + "favoured": 2, + "favourite": 2, + "favourited": 2, + "favourites": 2, + "favours": 2, + "fear": -2, + "fearful": -2, + "fearfully": -2, + "fearing": -2, + "fearless": 2, + "fearlessness": 2, + "fearsome": -2, + "fed up": -3, + "feeble": -2, + "feeling": 1, + "felonies": -3, + "felony": -3, + "fertile": 2, + "fervent": 2, + "fervid": 2, + "festive": 2, + "fever": -2, + "fiasco": -3, + "fidgety": -2, + "fight": -1, + "fighting": -2, + "fine": 2, + "fines": -2, + "finest": 3, + "fire": -2, + "fired": -2, + "firing": -2, + "fit": 1, + "fitness": 1, + "filth": -2, + "filthy": -2, + "flagship": 2, + "flaw": -2, + "flawed": -3, + "flawless": 2, + "flawlessly": 2, + "flaws": -2, + "flees": -1, + "flop": -2, + "flops": -2, + "flu": -2, + "flustered": -2, + "focused": 2, + "fond": 2, + "fondness": 2, + "fool": -2, + "foolish": -2, + "fools": -2, + "forbid": -1, + "forbidden": -2, + "forbidding": -2, + "forced": -1, + "foreclosure": -2, + "foreclosures": -2, + "forefront": 1, + "forget": -1, + "forgetful": -2, + "forgettable": -1, + "forgive": 1, + "forgiving": 1, + "forgot": -1, + "forgotten": -1, + "fortune": 2, + "fortunate": 2, + "fortunately": 2, + "foul": -3, + "frantic": -1, + "fraud": -4, + "frauds": -4, + "fraudster": -4, + "fraudsters": -4, + "fraudulence": -4, + "fraudulent": -4, + "freak": -2, + "free": 1, + "freedom": 2, + "freedoms": 2, + "frenzy": -3, + "fresh": 1, + "friend": 1, + "friendliness": 2, + "friendly": 2, + "friendship": 2, + "fright": -2, + "frightened": -2, + "frightening": -3, + "frikin": -2, + "frisky": 2, + "frowning": -1, + "fruitless": -2, + "frustrate": -2, + "frustrated": -2, + "frustrates": -2, + "frustrating": -2, + "frustration": -2, + "ftw": 3, + "fuck": -4, + "fucked": -4, + "fucker": -4, + "fuckers": -4, + "fuckface": -4, + "fuckhead": -4, + "fuckin": -4, + "fucking": -4, + "fucking amazing": 4, + "fucking beautiful": 4, + "fucking cute": 4, + "fucking fantastic": 4, + "fucking good": 4, + "fucking great": 4, + "fucking hot": 2, + "fucking love": 4, + "fucking loves": 4, + "fucking perfect": 4, + "fucktard": -4, + "fud": -3, + "fuked": -4, + "fuking": -4, + "fulfill": 2, + "fulfilled": 2, + "fulfillment": 2, + "fulfills": 2, + "fuming": -2, + "fun": 4, + "funeral": -1, + "funerals": -1, + "funky": 2, + "funnier": 4, + "funny": 4, + "furious": -3, + "futile": -2, + "gag": -2, + "gagged": -2, + "gain": 2, + "gained": 2, + "gaining": 2, + "gains": 2, + "gallant": 3, + "gallantly": 3, + "gallantry": 3, + "game-changing": 3, + "garbage": -1, + "gem": 3, + "generous": 2, + "generously": 2, + "genial": 3, + "ghastly": -2, + "ghost": -1, + "giddy": -2, + "gift": 2, + "glad": 3, + "glamorous": 3, + "glamourous": 3, + "glee": 3, + "gleeful": 3, + "gloom": -1, + "gloomy": -2, + "glorious": 2, + "glory": 2, + "glum": -2, + "god": 1, + "goddamn": -3, + "godsend": 4, + "gold": 2, + "good": 3, + "goodlooking": 3, + "goodmorning": 1, + "goodness": 3, + "goodwill": 3, + "goofiness": -2, + "goofy": -2, + "grace": 1, + "graceful": 2, + "gracious": 3, + "grand": 3, + "grant": 1, + "granted": 1, + "granting": 1, + "grants": 1, + "grateful": 3, + "gratification": 2, + "grave": -2, + "gray": -1, + "grisly": -2, + "gr8": 3, + "great": 3, + "greater": 3, + "greatest": 3, + "greed": -3, + "greedy": -2, + "green wash": -3, + "green washing": -3, + "greenwash": -3, + "greenwasher": -3, + "greenwashers": -3, + "greenwashing": -3, + "greet": 1, + "greeted": 1, + "greeting": 1, + "greetings": 2, + "greets": 1, + "grey": -1, + "grief": -2, + "grieved": -2, + "grim": -2, + "gripping": 2, + "groan": -2, + "groaned": -2, + "groaning": -2, + "groans": -2, + "gross": -2, + "growing": 1, + "growth": 2, + "growths": 2, + "gruesome": -3, + "guarantee": 1, + "guilt": -3, + "guilty": -3, + "gullibility": -2, + "gullible": -2, + "gun": -1, + "ha": 2, + "hacked": -1, + "haha": 3, + "hahaha": 3, + "hahahah": 3, + "hail": 2, + "hailed": 2, + "hallelujah": 3, + "handpicked": 1, + "handsome": 3, + "hapless": -2, + "haplessness": -2, + "happiest": 3, + "happiness": 3, + "happy": 3, + "harass": -3, + "harassed": -3, + "harasses": -3, + "harassing": -3, + "harassment": -3, + "hard": -1, + "hardier": 2, + "hardship": -2, + "hardy": 2, + "harm": -2, + "harmed": -2, + "harmful": -2, + "harming": -2, + "harmony": 2, + "harmonious": 2, + "harmoniously": 2, + "harms": -2, + "harried": -2, + "harsh": -2, + "harsher": -2, + "harshest": -2, + "harshly": -2, + "hate": -3, + "hated": -3, + "hater": -3, + "haters": -3, + "hates": -3, + "hating": -3, + "hatred": -3, + "haunt": -1, + "haunted": -2, + "haunting": 1, + "haunts": -1, + "havoc": -2, + "hazardous": -3, + "headache": -2, + "healthy": 2, + "heartbreaking": -3, + "heartbroken": -3, + "heartfelt": 3, + "heartless": -2, + "heartwarming": 3, + "heaven": 2, + "heavenly": 4, + "heavyhearted": -2, + "hehe": 2, + "hell": -4, + "hellish": -2, + "help": 2, + "helpful": 2, + "helping": 2, + "helpless": -2, + "helps": 2, + "hero": 2, + "heroes": 2, + "heroic": 3, + "hesitant": -2, + "hesitate": -2, + "hid": -1, + "hide": -1, + "hideous": -3, + "hides": -1, + "hiding": -1, + "highlight": 2, + "hilarious": 2, + "hinder": -2, + "hindrance": -2, + "hoax": -2, + "hollow": -1, + "homeless": -2, + "homesick": -2, + "homicide": -2, + "homicides": -2, + "honest": 2, + "honor": 2, + "honored": 2, + "honoring": 2, + "honour": 2, + "honoured": 2, + "honouring": 2, + "hooligan": -2, + "hooliganism": -2, + "hooligans": -2, + "hope": 2, + "hopeful": 2, + "hopefully": 2, + "hopeless": -2, + "hopelessness": -2, + "hopes": 2, + "hoping": 2, + "horrendous": -3, + "horrid": -3, + "horrible": -3, + "horrific": -3, + "horrified": -3, + "hospitalized": -2, + "hostile": -2, + "huckster": -2, + "hug": 2, + "huge": 1, + "hugs": 2, + "humane": 2, + "humble": 1, + "humbug": -2, + "humerous": 3, + "humiliated": -3, + "humiliation": -3, + "humor": 2, + "humorous": 2, + "humour": 2, + "humourous": 2, + "hunger": -2, + "hurrah": 5, + "hurt": -2, + "hurting": -2, + "hurts": -2, + "hypocritical": -2, + "hysteria": -3, + "hysterical": -3, + "hysterics": -3, + "icky": -3, + "idiocy": -3, + "idiot": -3, + "idiotic": -3, + "ignorance": -2, + "ignorant": -2, + "ignore": -1, + "ignored": -2, + "ignores": -1, + "ill": -2, + "ill-fated": -2, + "illegal": -3, + "illegally": -3, + "illegitimate": -3, + "illiteracy": -2, + "illness": -2, + "illnesses": -2, + "illogical": -2, + "imaginative": 2, + "imbecile": -3, + "immobilized": -1, + "immortal": 2, + "immune": 1, + "impair": -2, + "impaired": -2, + "impairing": -2, + "impairment": -2, + "impairs": -2, + "impatient": -2, + "impeachment": -3, + "impeachments": -3, + "impede": -2, + "impeded": -2, + "impedes": -2, + "impeding": -2, + "impedingly": -2, + "imperfect": -2, + "importance": 2, + "important": 2, + "impose": -1, + "imposed": -1, + "imposes": -1, + "imposing": -1, + "imposter": -2, + "impotent": -2, + "impress": 3, + "impressed": 3, + "impresses": 3, + "impressive": 3, + "imprisoned": -2, + "imprisonment": -2, + "improper": -2, + "improperly": -2, + "improve": 2, + "improved": 2, + "improvement": 2, + "improves": 2, + "improving": 2, + "inability": -2, + "inaction": -2, + "inadequate": -2, + "inadvertently": -2, + "inappropriate": -2, + "incapable": -2, + "incapacitated": -2, + "incapacitates": -2, + "incapacitating": -2, + "incense": -2, + "incensed": -2, + "incenses": -2, + "incensing": -2, + "incoherent": -2, + "incompetence": -2, + "incompetent": -2, + "incomplete": -1, + "incomprehensible": -2, + "inconsiderate": -2, + "inconvenience": -2, + "inconvenient": -2, + "increase": 1, + "increased": 1, + "indecisive": -2, + "indestructible": 2, + "indicted": -2, + "indifference": -2, + "indifferent": -2, + "indignant": -2, + "indignation": -2, + "indoctrinate": -2, + "indoctrinated": -2, + "indoctrinates": -2, + "indoctrinating": -2, + "inediable": -2, + "inexorable": -3, + "inexcusable": -3, + "ineffective": -2, + "ineffectively": -2, + "ineffectual": -2, + "inefficiency": -2, + "inefficient": -2, + "inefficiently": -2, + "inept": -2, + "ineptitude": -2, + "infantile": -2, + "infantilized": -2, + "infatuated": 2, + "infatuation": 2, + "infect": -2, + "infected": -2, + "infecting": -2, + "infection": -2, + "infections": -2, + "infectious": -2, + "infects": -2, + "inferior": -2, + "infest": -2, + "infested": -2, + "infesting": -2, + "infests": -2, + "inflamed": -2, + "inflict": -2, + "inflicted": -2, + "inflicting": -2, + "inflicts": -2, + "influential": 2, + "infract": -2, + "infracted": -2, + "infracting": -2, + "infracts": -2, + "infringement": -2, + "infuriate": -2, + "infuriated": -2, + "infuriates": -2, + "infuriating": -2, + "inhibit": -1, + "inhuman": -2, + "injured": -2, + "injuries": -2, + "injury": -2, + "injustice": -2, + "innovate": 1, + "innovates": 1, + "innovation": 1, + "innovative": 2, + "inoperative": -2, + "inquisition": -2, + "inquisitive": 2, + "insane": -2, + "insanity": -2, + "insecure": -2, + "insensitive": -2, + "insensitivity": -2, + "insignificant": -2, + "insipid": -2, + "insolvent": -2, + "insomnia": -2, + "inspiration": 2, + "inspirational": 2, + "inspire": 2, + "inspired": 2, + "inspires": 2, + "inspiring": 3, + "insufficiency": -2, + "insufficient": -2, + "insufficiently": -2, + "insult": -2, + "insulted": -2, + "insulting": -2, + "insults": -2, + "intact": 2, + "integrity": 2, + "intelligent": 2, + "intense": 1, + "interest": 1, + "interested": 2, + "interesting": 2, + "interests": 1, + "interrogated": -2, + "interrupt": -2, + "interrupted": -2, + "interrupting": -2, + "interruption": -2, + "interrupts": -2, + "intimacy": 2, + "intimidate": -2, + "intimidated": -2, + "intimidates": -2, + "intimidating": -2, + "intimidation": -2, + "intransigence": -2, + "intransigency": -2, + "intricate": 2, + "intrigues": 1, + "invasion": -1, + "invincible": 2, + "invite": 1, + "inviting": 1, + "invulnerable": 2, + "irate": -3, + "ironic": -1, + "irony": -1, + "irrational": -1, + "irreparable": -2, + "irreproducible": -2, + "irresistible": 2, + "irresistibly": 2, + "irresolute": -2, + "irresponsible": -2, + "irresponsibly": -2, + "irreversible": -1, + "irreversibly": -1, + "irritate": -3, + "irritated": -3, + "irritates": -3, + "irritating": -3, + "isolated": -1, + "itchy": -2, + "jackass": -4, + "jackasses": -4, + "jailed": -2, + "jaunty": 2, + "jealous": -2, + "jealousy": -2, + "jeopardy": -2, + "jerk": -3, + "jesus": 1, + "jewel": 1, + "jewels": 1, + "jocular": 2, + "join": 1, + "joke": 2, + "jokes": 2, + "jolly": 2, + "jovial": 2, + "joy": 3, + "joyful": 3, + "joyfully": 3, + "joyless": -2, + "joyous": 3, + "jubilant": 3, + "jumpy": -1, + "justice": 2, + "justifiably": 2, + "justified": 2, + "keen": 1, + "kickback": -3, + "kickbacks": -3, + "kidnap": -2, + "kidnapped": -2, + "kidnapping": -2, + "kidnappings": -2, + "kidnaps": -2, + "kill": -3, + "killed": -3, + "killing": -3, + "kills": -3, + "kind": 2, + "kind of": 0, + "kinder": 2, + "kindness": 2, + "kiss": 2, + "kudos": 3, + "lack": -2, + "lackadaisical": -2, + "lag": -1, + "lagged": -2, + "lagging": -2, + "lags": -2, + "lame": -2, + "landmark": 2, + "lapse": -1, + "lapsed": -1, + "laugh": 1, + "laughed": 1, + "laughing": 1, + "laughs": 1, + "laughting": 1, + "launched": 1, + "lawl": 3, + "lawsuit": -2, + "lawsuits": -2, + "lazy": -1, + "leadership": 1, + "leading": 2, + "leak": -1, + "leaked": -1, + "leave": -1, + "legal": 1, + "legally": 1, + "lenient": 1, + "lethal": -2, + "lethality": -2, + "lethargic": -2, + "lethargy": -2, + "liar": -3, + "liars": -3, + "libelous": -2, + "lied": -2, + "lifeless": -1, + "lifesaver": 4, + "lighthearted": 1, + "likable": 2, + "like": 2, + "likeable": 2, + "liked": 2, + "likers": 2, + "likes": 2, + "liking": 2, + "limitation": -1, + "limited": -1, + "limits": -1, + "litigation": -1, + "litigious": -2, + "lively": 2, + "livid": -2, + "lmao": 4, + "lmfao": 4, + "loathe": -3, + "loathed": -3, + "loathes": -3, + "loathing": -3, + "loathsome": -3, + "lobbied": -2, + "lobby": -2, + "lobbying": -2, + "lobbyist": -2, + "lobbyists": -2, + "lol": 3, + "lolol": 4, + "lololol": 4, + "lolololol": 4, + "lonely": -2, + "lonesome": -2, + "longing": -1, + "lool": 3, + "loom": -1, + "loomed": -1, + "looming": -1, + "looms": -1, + "loool": 3, + "looool": 3, + "loose": -3, + "looses": -3, + "loser": -3, + "losing": -3, + "loss": -3, + "losses": -3, + "lost": -3, + "lousy": -2, + "lovable": 3, + "love": 3, + "loved": 3, + "lovelies": 3, + "lovely": 3, + "loves": 3, + "loving": 2, + "loving-kindness": 3, + "lowest": -1, + "loyal": 3, + "loyalty": 3, + "luck": 3, + "luckily": 3, + "lucky": 3, + "lucrative": 3, + "ludicrous": -3, + "lugubrious": -2, + "lunatic": -3, + "lunatics": -3, + "lurk": -1, + "lurking": -1, + "lurks": -1, + "luxury": 2, + "macabre": -2, + "mad": -3, + "maddening": -3, + "made-up": -1, + "madly": -3, + "madness": -3, + "magnificent": 3, + "maladaption": -2, + "maldevelopment": -2, + "maltreatment": -2, + "mandatory": -1, + "manipulated": -1, + "manipulating": -1, + "manipulation": -1, + "manslaughter": -3, + "marvel": 3, + "marvelous": 3, + "marvels": 3, + "masterpiece": 4, + "masterpieces": 4, + "matter": 1, + "matters": 1, + "mature": 2, + "meaningful": 2, + "meaningless": -2, + "medal": 3, + "mediocrity": -3, + "meditative": 1, + "melancholy": -2, + "memorable": 1, + "memoriam": -2, + "menace": -2, + "menaced": -2, + "menaces": -2, + "mercy": 2, + "merry": 3, + "mesmerizing": 3, + "mess": -2, + "messed": -2, + "messing up": -2, + "methodical": 2, + "methodically": 2, + "mindless": -2, + "miracle": 4, + "mirth": 3, + "mirthful": 3, + "mirthfully": 3, + "misbehave": -2, + "misbehaved": -2, + "misbehaves": -2, + "misbehaving": -2, + "misbranding": -3, + "miscast": -2, + "mischief": -1, + "mischiefs": -1, + "misclassified": -2, + "misclassifies": -2, + "misclassify": -2, + "misconduct": -2, + "misconducted": -2, + "misconducting": -2, + "misconducts": -2, + "miserable": -3, + "miserably": -3, + "misery": -2, + "misfire": -2, + "misfortune": -2, + "misgiving": -2, + "misinformation": -2, + "misinformed": -2, + "misinterpreted": -2, + "mislead": -3, + "misleaded": -3, + "misleading": -3, + "misleads": -3, + "misplace": -2, + "misplaced": -2, + "misplaces": -2, + "misplacing": -2, + "mispricing": -3, + "misread": -1, + "misreport": -2, + "misreported": -2, + "misreporting": -2, + "misreports": -2, + "misrepresent": -2, + "misrepresentation": -2, + "misrepresentations": -2, + "misrepresented": -2, + "misrepresenting": -2, + "misrepresents": -2, + "miss": -2, + "missed": -2, + "missing": -2, + "mistake": -2, + "mistaken": -2, + "mistakes": -2, + "mistaking": -2, + "misunderstand": -2, + "misunderstanding": -2, + "misunderstands": -2, + "misunderstood": -2, + "misuse": -2, + "misused": -2, + "misuses": -2, + "misusing": -2, + "moan": -2, + "moaned": -2, + "moaning": -2, + "moans": -2, + "mock": -2, + "mocked": -2, + "mocking": -2, + "mocks": -2, + "modernize": 2, + "modernized": 2, + "modernizes": 2, + "modernizing": 2, + "mongering": -2, + "monopolize": -2, + "monopolized": -2, + "monopolizes": -2, + "monopolizing": -2, + "monotone": -1, + "moody": -1, + "mope": -1, + "moping": -1, + "moron": -3, + "motherfucker": -5, + "motherfucking": -5, + "motivate": 1, + "motivated": 2, + "motivating": 2, + "motivation": 1, + "mourn": -2, + "mourned": -2, + "mournful": -2, + "mourning": -2, + "mourns": -2, + "muddy": -2, + "mumpish": -2, + "murder": -2, + "murderer": -2, + "murdering": -3, + "murderous": -3, + "murders": -2, + "murky": -2, + "myth": -1, + "n00b": -2, + "naive": -2, + "narcissism": -2, + "nasty": -3, + "natural": 1, + "naรฏve": -2, + "needy": -2, + "negative": -2, + "negativity": -2, + "neglect": -2, + "neglected": -2, + "neglecting": -2, + "neglects": -2, + "nerves": -1, + "nervous": -2, + "nervously": -2, + "nice": 3, + "nifty": 2, + "niggas": -5, + "nigger": -5, + "no": -1, + "no fun": -3, + "noble": 2, + "noblest": 2, + "noisy": -1, + "non-approved": -2, + "nonsense": -2, + "noob": -2, + "nosey": -2, + "not good": -2, + "not working": -3, + "notable": 2, + "noticeable": 2, + "notorious": -2, + "novel": 2, + "numb": -1, + "nurturing": 2, + "nuts": -3, + "obliterate": -2, + "obliterated": -2, + "obnoxious": -3, + "obscene": -2, + "obscenity": -2, + "obsessed": 2, + "obsolete": -2, + "obstacle": -2, + "obstacles": -2, + "obstinate": -2, + "obstruct": -2, + "obstructed": -2, + "obstructing": -2, + "obstruction": -2, + "obstructs": -2, + "odd": -2, + "offence": -2, + "offences": -2, + "offend": -2, + "offended": -2, + "offender": -2, + "offending": -2, + "offends": -2, + "offense": -2, + "offenses": -2, + "offensive": -2, + "offensively": -2, + "offline": -1, + "oks": 2, + "ominous": 3, + "once-in-a-lifetime": 3, + "oops": -2, + "opportunities": 2, + "opportunity": 2, + "oppressed": -2, + "oppression": -2, + "oppressions": -2, + "oppressive": -2, + "optimism": 2, + "optimistic": 2, + "optionless": -2, + "ostracize": -2, + "ostracized": -2, + "ostracizes": -2, + "ouch": -2, + "outage": -2, + "outages": -2, + "outbreak": -2, + "outbreaks": -2, + "outcry": -2, + "outmaneuvered": -2, + "outnumbered": -2, + "outrage": -3, + "outraged": -3, + "outrageous": -3, + "outreach": 2, + "outstanding": 5, + "overjoyed": 4, + "overload": -1, + "overlooked": -1, + "overprotective": -2, + "overran": -2, + "overreact": -2, + "overreacted": -2, + "overreacting": -2, + "overreaction": -2, + "overreacts": -2, + "oversell": -2, + "overselling": -2, + "oversells": -2, + "oversight": -1, + "oversimplification": -2, + "oversimplified": -2, + "oversimplifies": -2, + "oversimplify": -2, + "oversold": -2, + "overstatement": -2, + "overstatements": -2, + "overweight": -1, + "overwrought": -3, + "oxymoron": -1, + "pain": -2, + "pained": -2, + "painful": -2, + "panic": -3, + "panicked": -3, + "panics": -3, + "paradise": 3, + "paradox": -1, + "pardon": 2, + "pardoned": 2, + "pardoning": 2, + "pardons": 2, + "parley": -1, + "passion": 1, + "passionate": 2, + "passive": -1, + "passively": -1, + "pathetic": -2, + "pay": -1, + "peace": 2, + "peaceful": 2, + "peacefully": 2, + "penalize": -2, + "penalized": -2, + "penalizes": -2, + "penalizing": -2, + "penalty": -2, + "pensive": -1, + "perfect": 3, + "perfected": 2, + "perfection": 3, + "perfectly": 3, + "perfects": 2, + "peril": -2, + "perjury": -3, + "perpetrated": -2, + "perpetrator": -2, + "perpetrators": -2, + "perplexed": -2, + "persecute": -2, + "persecuted": -2, + "persecutes": -2, + "persecuting": -2, + "perturbed": -2, + "pervert": -3, + "pesky": -2, + "pessimism": -2, + "pessimistic": -2, + "petrified": -2, + "philanthropy": 2, + "phobic": -2, + "picturesque": 2, + "pileup": -1, + "pillage": -2, + "pique": -2, + "piqued": -2, + "piss": -4, + "pissed": -4, + "pissing": -3, + "piteous": -2, + "pitied": -1, + "pity": -2, + "plague": -3, + "plagued": -3, + "plagues": -3, + "plaguing": -3, + "playful": 2, + "pleasant": 3, + "please": 1, + "pleased": 3, + "pleasurable": 3, + "pleasure": 3, + "plodding": -2, + "poignant": 2, + "pointless": -2, + "poised": -2, + "poison": -2, + "poisoned": -2, + "poisons": -2, + "polished": 2, + "polite": 2, + "politeness": 2, + "pollutant": -2, + "pollute": -2, + "polluted": -2, + "polluter": -2, + "polluters": -2, + "pollutes": -2, + "pollution": -2, + "poor": -2, + "poorer": -2, + "poorest": -2, + "poorly": -2, + "popular": 3, + "popularity": 3, + "positive": 2, + "positively": 2, + "possessive": -2, + "post-traumatic": -2, + "postpone": -1, + "postponed": -1, + "postpones": -1, + "postponing": -1, + "poverty": -1, + "powerful": 2, + "powerless": -2, + "praise": 3, + "praised": 3, + "praises": 3, + "praising": 3, + "pray": 1, + "praying": 1, + "prays": 1, + "prblm": -2, + "prblms": -2, + "predatory": -2, + "prepared": 1, + "pressure": -1, + "pressured": -2, + "pretend": -1, + "pretending": -1, + "pretends": -1, + "pretty": 1, + "prevent": -1, + "prevented": -1, + "preventing": -1, + "prevents": -1, + "prick": -5, + "prison": -2, + "prisoner": -2, + "prisoners": -2, + "privileged": 2, + "proactive": 2, + "problem": -2, + "problems": -2, + "profit": 2, + "profitable": 2, + "profiteer": -2, + "profits": 2, + "progress": 2, + "prohibit": -1, + "prohibits": -1, + "prominent": 2, + "promise": 1, + "promised": 1, + "promises": 1, + "promote": 1, + "promoted": 1, + "promotes": 1, + "promoting": 1, + "promptly": 1, + "propaganda": -2, + "prosecute": -1, + "prosecuted": -2, + "prosecutes": -1, + "prosecution": -1, + "prospect": 1, + "prospects": 1, + "prosperity": 3, + "prosperous": 3, + "protect": 1, + "protected": 1, + "protects": 1, + "protest": -2, + "protesters": -2, + "protesting": -2, + "protests": -2, + "proud": 2, + "proudly": 2, + "provoke": -1, + "provoked": -1, + "provokes": -1, + "provoking": -1, + "prudence": 2, + "pseudoscience": -3, + "psychopathic": -2, + "punish": -2, + "punished": -2, + "punishes": -2, + "punishing": -2, + "punitive": -2, + "pure": 1, + "purest": 1, + "purposeful": 2, + "pushy": -1, + "puzzled": -2, + "quaking": -2, + "qualities": 2, + "quality": 2, + "questionable": -2, + "questioned": -1, + "questioning": -1, + "racism": -3, + "racist": -3, + "racists": -3, + "rage": -2, + "rageful": -2, + "rainy": -1, + "rant": -3, + "ranter": -3, + "ranters": -3, + "rants": -3, + "rape": -4, + "raped": -4, + "rapist": -4, + "rapture": 2, + "raptured": 2, + "raptures": 2, + "rapturous": 4, + "rash": -2, + "ratified": 2, + "reach": 1, + "reached": 1, + "reaches": 1, + "reaching": 1, + "reassure": 1, + "reassured": 1, + "reassures": 1, + "reassuring": 2, + "rebel": -2, + "rebellion": -2, + "rebels": -2, + "recession": -2, + "reckless": -2, + "recognition": 2, + "recommend": 2, + "recommended": 2, + "recommends": 2, + "redeemed": 2, + "refine": 1, + "refined": 1, + "refines": 1, + "refreshingly": 2, + "refuse": -2, + "refused": -2, + "refuses": -2, + "refusing": -2, + "regret": -2, + "regretful": -2, + "regrets": -2, + "regretted": -2, + "regretting": -2, + "reigning": 1, + "reject": -1, + "rejected": -1, + "rejecting": -1, + "rejection": -2, + "rejects": -1, + "rejoice": 4, + "rejoiced": 4, + "rejoices": 4, + "rejoicing": 4, + "relaxed": 2, + "relentless": -1, + "reliability": 2, + "reliable": 2, + "reliably": 2, + "reliant": 2, + "relieve": 1, + "relieved": 2, + "relieves": 1, + "relieving": 2, + "relishing": 2, + "remarkable": 2, + "remorse": -2, + "repellent": -2, + "repercussion": -2, + "repercussions": -2, + "reprimand": -2, + "reprimanded": -2, + "reprimanding": -2, + "reprimands": -2, + "repulse": -1, + "repulsed": -2, + "repulsive": -2, + "rescue": 2, + "rescued": 2, + "rescues": 2, + "resentful": -2, + "resign": -1, + "resigned": -1, + "resigning": -1, + "resigns": -1, + "resolute": 2, + "resolution": 2, + "resolve": 2, + "resolved": 2, + "resolves": 2, + "resolving": 2, + "respect": 2, + "respected": 2, + "respects": 2, + "responsibility": 1, + "responsible": 2, + "responsive": 2, + "restful": 2, + "restless": -2, + "restore": 1, + "restored": 1, + "restores": 1, + "restoring": 1, + "restrict": -2, + "restricted": -2, + "restricting": -2, + "restriction": -2, + "restrictive": -1, + "restricts": -2, + "retained": -1, + "retard": -2, + "retarded": -2, + "retreat": -1, + "revenge": -2, + "revengeful": -2, + "revered": 2, + "revive": 2, + "revives": 2, + "revolting": -2, + "reward": 2, + "rewarded": 2, + "rewarding": 2, + "rewards": 2, + "rich": 2, + "richly": 2, + "ridiculous": -3, + "rig": -1, + "rigged": -1, + "right direction": 3, + "righteousness": 2, + "rightful": 2, + "rightfully": 2, + "rigorous": 3, + "rigorously": 3, + "riot": -2, + "riots": -2, + "rise": 1, + "rises": 1, + "risk": -2, + "risks": -2, + "risky": -2, + "riveting": 3, + "rob": -2, + "robber": -2, + "robed": -2, + "robing": -2, + "robs": -2, + "robust": 2, + "rofl": 4, + "roflcopter": 4, + "roflmao": 4, + "romance": 2, + "romantical": 2, + "romantically": 2, + "rose": 1, + "rotfl": 4, + "rotflmfao": 4, + "rotflol": 4, + "rotten": -3, + "rude": -2, + "ruin": -2, + "ruined": -2, + "ruining": -2, + "ruins": -2, + "sabotage": -2, + "sad": -2, + "sadden": -2, + "saddened": -2, + "sadly": -2, + "safe": 1, + "safely": 1, + "safer": 2, + "safety": 1, + "salient": 1, + "salute": 2, + "saluted": 2, + "salutes": 2, + "saluting": 2, + "salvation": 2, + "sappy": -1, + "sarcastic": -2, + "satisfied": 2, + "savange": -2, + "savanges": -2, + "save": 2, + "saved": 2, + "savings": 1, + "scam": -2, + "scams": -2, + "scandal": -3, + "scandalous": -3, + "scandals": -3, + "scapegoat": -2, + "scapegoats": -2, + "scare": -2, + "scared": -2, + "scar": -2, + "scars": -2, + "scary": -2, + "sceptical": -2, + "scold": -2, + "scoop": 3, + "scorn": -2, + "scornful": -2, + "scream": -2, + "screamed": -2, + "screaming": -2, + "screams": -2, + "screwed": -2, + "screwed up": -3, + "scum": -3, + "scumbag": -4, + "seamless": 2, + "seamlessly": 2, + "secure": 2, + "secured": 2, + "secures": 2, + "sedition": -2, + "seditious": -2, + "seduced": -1, + "self-abuse": -2, + "self-confident": 2, + "self-contradictory": -2, + "self-deluded": -2, + "selfish": -3, + "selfishness": -3, + "sentence": -2, + "sentenced": -2, + "sentences": -2, + "sentencing": -2, + "serene": 2, + "settlement": 1, + "settlements": 1, + "severe": -2, + "severely": -2, + "sexist": -2, + "sexistic": -2, + "sexy": 3, + "shaky": -2, + "shame": -2, + "shamed": -2, + "shameful": -2, + "share": 1, + "shared": 1, + "shares": 1, + "shattered": -2, + "shit": -4, + "shithead": -4, + "shitty": -3, + "shock": -2, + "shocked": -2, + "shocking": -2, + "shocks": -2, + "shoody": -2, + "shoot": -1, + "short-sighted": -2, + "short-sightedness": -2, + "shortage": -2, + "shortages": -2, + "shrew": -4, + "shy": -1, + "sick": -2, + "sickness": -2, + "side-effect": -2, + "side-effects": -2, + "sigh": -2, + "significance": 1, + "significant": 1, + "silencing": -1, + "silly": -1, + "simplicity": 1, + "sin": -2, + "sincere": 2, + "sincerely": 2, + "sincerest": 2, + "sincerity": 2, + "sinful": -3, + "singleminded": -2, + "sinister": -2, + "sins": -2, + "skeptic": -2, + "skeptical": -2, + "skepticism": -2, + "skeptics": -2, + "slam": -2, + "slash": -2, + "slashed": -2, + "slashes": -2, + "slashing": -2, + "slave": -3, + "slavery": -3, + "slaves": -3, + "sleeplessness": -2, + "slick": 2, + "slicker": 2, + "slickest": 2, + "slip": -1, + "sloppy": -2, + "sluggish": -2, + "slumping": -1, + "slut": -5, + "smart": 1, + "smarter": 2, + "smartest": 2, + "smear": -2, + "smile": 2, + "smiled": 2, + "smiles": 2, + "smiling": 2, + "smog": -2, + "smuggle": -2, + "smuggled": -2, + "smuggling": -2, + "smuggles": -2, + "sneaky": -1, + "sneeze": -2, + "sneezed": -2, + "sneezes": -2, + "sneezing": -2, + "snub": -2, + "snubbed": -2, + "snubbing": -2, + "snubs": -2, + "sobering": 1, + "solemn": -1, + "solid": 2, + "solidarity": 2, + "solidified": 2, + "solidifies": 2, + "solidify": 2, + "solidifying": 2, + "solution": 1, + "solutions": 1, + "solve": 1, + "solved": 1, + "solves": 1, + "solving": 1, + "somber": -2, + "some kind": 0, + "son-of-a-bitch": -5, + "soothe": 3, + "soothed": 3, + "soothing": 3, + "sophisticated": 2, + "sore": -1, + "sorrow": -2, + "sorrowful": -2, + "sorry": -1, + "spacious": 1, + "spam": -2, + "spammer": -3, + "spammers": -3, + "spamming": -2, + "spark": 1, + "sparkle": 3, + "sparkles": 3, + "sparkling": 3, + "spearhead": 2, + "speculative": -2, + "spirit": 1, + "spirited": 2, + "spiritless": -2, + "spiteful": -2, + "splendid": 3, + "spoiled": -2, + "spoilt": -2, + "spotless": 2, + "sprightly": 2, + "squander": -2, + "squandered": -2, + "squandering": -2, + "squanders": -2, + "squelched": -1, + "stab": -2, + "stabbed": -2, + "stable": 2, + "stabs": -2, + "stall": -2, + "stalled": -2, + "stalling": -2, + "stamina": 2, + "stampede": -2, + "stank": -2, + "startled": -2, + "startling": 3, + "starve": -2, + "starved": -2, + "starves": -2, + "starving": -2, + "steadfast": 2, + "steal": -2, + "stealing": -2, + "steals": -2, + "stereotype": -2, + "stereotyped": -2, + "stifled": -1, + "stimulate": 1, + "stimulated": 1, + "stimulates": 1, + "stimulating": 2, + "stingy": -2, + "stink": -2, + "stinked": -2, + "stinker": -2, + "stinking": -2, + "stinks": -2, + "stinky": -2, + "stole": -2, + "stolen": -2, + "stop": -1, + "stopped": -1, + "stopping": -1, + "stops": -1, + "stout": 2, + "straight": 1, + "strange": -1, + "strangely": -1, + "strangled": -2, + "strength": 2, + "strengthen": 2, + "strengthened": 2, + "strengthening": 2, + "strengthens": 2, + "strengths": 2, + "stress": -1, + "stressed": -2, + "stressor": -2, + "stressors": -2, + "stricken": -2, + "strike": -1, + "strikers": -2, + "strikes": -1, + "strong": 2, + "stronger": 2, + "strongest": 2, + "struck": -1, + "struggle": -2, + "struggled": -2, + "struggles": -2, + "struggling": -2, + "stubborn": -2, + "stuck": -2, + "stunned": -2, + "stunning": 4, + "stupid": -2, + "stupidity": -3, + "stupidly": -2, + "suave": 2, + "subpoena": -2, + "substantial": 1, + "substantially": 1, + "subversive": -2, + "succeed": 3, + "succeeded": 3, + "succeeding": 3, + "succeeds": 3, + "success": 2, + "successful": 3, + "successfully": 3, + "suck": -3, + "sucks": -3, + "sue": -2, + "sued": -2, + "sueing": -2, + "sues": -2, + "suffer": -2, + "suffered": -2, + "sufferer": -2, + "sufferers": -2, + "suffering": -2, + "suffers": -2, + "suicidal": -2, + "suicide": -2, + "suicides": -2, + "suing": -2, + "suitable": 2, + "suited": 2, + "sulking": -2, + "sulky": -2, + "sullen": -2, + "sunshine": 2, + "super": 3, + "superb": 5, + "superior": 2, + "support": 2, + "supported": 2, + "supporter": 1, + "supporters": 1, + "supporting": 1, + "supportive": 2, + "supports": 2, + "supreme": 4, + "survived": 2, + "surviving": 2, + "survivor": 2, + "suspect": -1, + "suspected": -1, + "suspecting": -1, + "suspects": -1, + "suspend": -1, + "suspended": -1, + "suspicious": -2, + "sustainability": 1, + "sustainable": 2, + "sustainably": 2, + "swear": -2, + "swearing": -2, + "swears": -2, + "sweet": 2, + "sweeter": 3, + "sweetest": 3, + "swift": 2, + "swiftly": 2, + "swindle": -3, + "swindles": -3, + "swindling": -3, + "sympathetic": 2, + "sympathy": 2, + "taint": -2, + "tainted": -2, + "talent": 2, + "tard": -2, + "tarnish": -2, + "tarnished": -2, + "tarnishes": -2, + "tears": -2, + "tender": 2, + "tenderness": 2, + "tense": -2, + "tension": -1, + "terrible": -3, + "terribly": -3, + "terrific": 4, + "terrifically": 4, + "terrified": -3, + "terror": -3, + "terrorist": -2, + "terrorists": -2, + "terrorize": -3, + "terrorized": -3, + "terrorizes": -3, + "thank": 2, + "thankful": 2, + "thanks": 2, + "thorny": -2, + "thoughtful": 2, + "thoughtless": -2, + "threat": -2, + "threaten": -2, + "threatened": -2, + "threatening": -2, + "threatens": -2, + "threats": -2, + "thrilled": 5, + "thwart": -2, + "thwarted": -2, + "thwarting": -2, + "thwarts": -2, + "timid": -2, + "timorous": -2, + "tired": -2, + "tits": -2, + "tolerance": 2, + "tolerant": 2, + "toothless": -2, + "top": 2, + "tops": 2, + "torn": -2, + "torture": -4, + "tortured": -4, + "tortures": -4, + "torturing": -4, + "totalitarian": -2, + "totalitarianism": -2, + "tout": -2, + "touted": -2, + "touting": -2, + "touts": -2, + "toxic": -3, + "tragedies": -2, + "tragedy": -2, + "tragic": -2, + "tranquil": 2, + "transgress": -2, + "transgressed": -2, + "transgresses": -2, + "transgressing": -2, + "trap": -1, + "trapped": -2, + "traps": -1, + "trauma": -3, + "traumatic": -3, + "travesty": -2, + "treason": -3, + "treasonous": -3, + "treasure": 2, + "treasures": 2, + "trembling": -2, + "tremor": -2, + "tremors": -2, + "tremulous": -2, + "tribulation": -2, + "tribute": 2, + "tricked": -2, + "trickery": -2, + "triumph": 4, + "triumphant": 4, + "troll": -2, + "trouble": -2, + "troubled": -2, + "troubles": -2, + "troubling": -2, + "true": 2, + "trust": 1, + "trusted": 2, + "trusts": 1, + "tumor": -2, + "twat": -5, + "tyran": -3, + "tyrannic": -3, + "tyrannical": -3, + "tyrannically": -3, + "tyrans": -3, + "ubiquitous": 2, + "ugh": -2, + "ugliness": -3, + "ugly": -3, + "unable": -2, + "unacceptable": -2, + "unappeasable": -2, + "unappreciated": -2, + "unapproved": -2, + "unattractive": -2, + "unavailable": -1, + "unavailing": -2, + "unaware": -2, + "unbearable": -2, + "unbelievable": -1, + "unbelieving": -1, + "unbiased": 2, + "uncertain": -1, + "unclear": -1, + "uncomfortable": -2, + "unconcerned": -2, + "unconfirmed": -1, + "unconvinced": -1, + "uncredited": -1, + "undecided": -1, + "undercooked": -2, + "underestimate": -1, + "underestimated": -1, + "underestimates": -1, + "underestimating": -1, + "undermine": -2, + "undermined": -2, + "undermines": -2, + "undermining": -2, + "underperform": -2, + "underperformed": -2, + "underperforming": -2, + "underperforms": -2, + "undeserving": -2, + "undesirable": -2, + "uneasy": -2, + "unemployed": -1, + "unemployment": -2, + "unequal": -1, + "unequaled": 2, + "unethical": -2, + "uneventful": -2, + "unfair": -2, + "unfavorable": -2, + "unfit": -2, + "unfitted": -2, + "unfocused": -2, + "unforgivable": -3, + "unforgiving": -2, + "unfulfilled": -2, + "unfunny": -2, + "ungenerous": -2, + "ungrateful": -3, + "unhappy": -2, + "unhappiness": -2, + "unhealthy": -2, + "unhygienic": -2, + "unified": 1, + "unimaginative": -2, + "unimpressed": -2, + "uninspired": -2, + "unintelligent": -2, + "unintentional": -2, + "uninvolving": -2, + "united": 1, + "unjust": -2, + "unlikely": -1, + "unlovable": -2, + "unloved": -2, + "unmatched": 1, + "unmotivated": -2, + "unoriginal": -2, + "unparliamentary": -2, + "unpleasant": -2, + "unpleasantness": -2, + "unprofessional": -2, + "unravel": 1, + "unreleting": -2, + "unresearched": -2, + "unsafe": -2, + "unsatisfied": -2, + "unscientific": -2, + "unsecured": -2, + "unselfish": 2, + "unsettled": -1, + "unsold": -1, + "unsophisticated": -2, + "unsound": -2, + "unstable": -2, + "unstoppable": 2, + "unsuccessful": -2, + "unsuccessfully": -2, + "unsupported": -2, + "unsure": -1, + "untarnished": 2, + "untrue": -2, + "unwanted": -2, + "unworthy": -2, + "uplifting": 2, + "uproar": -3, + "upset": -2, + "upsets": -2, + "upsetting": -2, + "uptight": -2, + "urgent": -1, + "useful": 2, + "usefulness": 2, + "useless": -2, + "uselessness": -2, + "vague": -2, + "validate": 1, + "validated": 1, + "validates": 1, + "validating": 1, + "vapid": -2, + "verdict": -1, + "verdicts": -1, + "vested": 1, + "vexation": -2, + "vexing": -2, + "vibrant": 3, + "vicious": -2, + "victim": -3, + "victimization": -3, + "victimize": -3, + "victimized": -3, + "victimizes": -3, + "victimizing": -3, + "victims": -3, + "victor": 3, + "victors": 3, + "victory": 3, + "victories": 3, + "vigilant": 3, + "vigor": 3, + "vile": -3, + "vindicate": 2, + "vindicated": 2, + "vindicates": 2, + "vindicating": 2, + "violate": -2, + "violated": -2, + "violates": -2, + "violating": -2, + "violation": -2, + "violations": -2, + "violence": -3, + "violence-related": -3, + "violent": -3, + "violently": -3, + "virtuous": 2, + "virulent": -2, + "vision": 1, + "visionary": 3, + "visioning": 1, + "visions": 1, + "vitality": 3, + "vitamin": 1, + "vitriolic": -3, + "vivacious": 3, + "vividly": 2, + "vociferous": -1, + "vomit": -3, + "vomited": -3, + "vomiting": -3, + "vomits": -3, + "vulnerability": -2, + "vulnerable": -2, + "walkout": -2, + "walkouts": -2, + "wanker": -3, + "want": 1, + "war": -2, + "warfare": -2, + "warm": 1, + "warmhearted": 2, + "warmness": 2, + "warmth": 2, + "warn": -2, + "warned": -2, + "warning": -3, + "warnings": -3, + "warns": -2, + "waste": -1, + "wasted": -2, + "wasting": -2, + "wavering": -1, + "weak": -2, + "weakened": -2, + "weakness": -2, + "weaknesses": -2, + "wealth": 3, + "wealthier": 2, + "wealthy": 2, + "weary": -2, + "weep": -2, + "weeping": -2, + "weird": -2, + "welcome": 2, + "welcomed": 2, + "welcomes": 2, + "well-being": 2, + "well-championed": 3, + "well-developed": 2, + "well-established": 2, + "well-focused": 2, + "well-groomed": 2, + "well-proportioned": 2, + "whimsical": 1, + "whitewash": -3, + "whore": -4, + "wicked": -2, + "widowed": -1, + "willingness": 2, + "win": 4, + "winner": 4, + "winning": 4, + "wins": 4, + "winwin": 3, + "wisdom": 1, + "wish": 1, + "wishes": 1, + "wishing": 1, + "withdrawal": -3, + "wits": 2, + "woebegone": -2, + "woeful": -3, + "won": 3, + "wonderful": 4, + "wonderfully": 4, + "woo": 3, + "woohoo": 3, + "wooo": 4, + "woow": 4, + "worn": -1, + "worried": -3, + "worries": -3, + "worry": -3, + "worrying": -3, + "worse": -3, + "worsen": -3, + "worsened": -3, + "worsening": -3, + "worsens": -3, + "worshiped": 3, + "worst": -3, + "worth": 2, + "worthless": -2, + "worthy": 2, + "wow": 4, + "wowow": 4, + "wowww": 4, + "wrathful": -3, + "wreck": -2, + "wrenching": -2, + "wrong": -2, + "wrongdoing": -2, + "wrongdoings": -2, + "wronged": -2, + "wrongful": -2, + "wrongfully": -2, + "wrongly": -2, + "wtf": -4, + "wtff": -4, + "wtfff": -4, + "xo": 3, + "xoxo": 3, + "xoxoxo": 4, + "xoxoxoxo": 4, + "yeah": 1, + "yearning": 1, + "yeees": 2, + "yes": 1, + "youthful": 2, + "yucky": -2, + "yummy": 3, + "zealot": -2, + "zealots": -2, + "zealous": 2 +} diff --git a/lib/negation/negators-en.json b/languages/en/negators.json similarity index 100% rename from lib/negation/negators-en.json rename to languages/en/negators.json diff --git a/languages/en/scoring-strategy.js b/languages/en/scoring-strategy.js new file mode 100644 index 0000000..d7ec23a --- /dev/null +++ b/languages/en/scoring-strategy.js @@ -0,0 +1,13 @@ +var negators = require('./negators.json'); + +module.exports = { + apply: function(tokens, cursor, tokenScore) { + if (cursor > 0) { + var prevtoken = tokens[cursor - 1]; + if (negators[prevtoken]) { + tokenScore = -tokenScore; + } + } + return tokenScore; + } +} diff --git a/lib/helper.js b/lib/helper.js deleted file mode 100644 index 1bd9a1b..0000000 --- a/lib/helper.js +++ /dev/null @@ -1,66 +0,0 @@ -var afinn_translations = require('afinn-165-multilingual').afinn_translations; -var emojis = require('../build/emoji.json'); -var negations = require('./negation/negations'); - -// Remove empty string entry -delete afinn_translations.afinn_en['']; - -// Cache for language-specific resources -// English is loaded by default -var languages = { - en: { - translations: Object.assign(emojis, afinn_translations.afinn_en), - negation: require('./negation/negation-en') - } -}; - -module.exports = { - - /** - * Returns AFIN-165 translations for the specified language. - * - * @param {String} lang - Two-digit language code of the translations - * - * @return {Object} - */ - getTranslations: function(lang) { - if (!lang) { - // Default to english if no language was specified - return languages.en.translations; - } - if (!languages[lang]) { - // Load translations for specified language - var translations = afinn_translations['afinn_' + lang]; - if (!translations) { - throw new Error('No translations found for language: ' + lang); - } - delete translations['']; - translations = Object.assign(emojis, translations); - - // Lookup negation strategy - var negationStrategy = negations.getStrategyForLanguage(lang); - - // Add language resources to in-memory cache - languages[lang] = { - negation: negationStrategy, - translations: translations - }; - } - return languages[lang].translations; - }, - - /** - * Applies a predefined strategy for considering negation constructs - * - * @param {String} lang - Two-digit language code - * @param {int} cursor - Iteration cursor - * @param {Array} tokens - Tokens of the phrase to analyze - * @param {item} item - The current token being analyzed - */ - applyNegationStrategy: function(lang, cursor, tokens, item) { - if (!languages[lang]) { - throw new Error('No entry found for language: ', lang); - } - return languages[lang].negation.apply(cursor, tokens, item); - } -}; diff --git a/lib/index.js b/lib/index.js index cc2e3c6..d360f2a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,73 +1,103 @@ -var helper = require('./helper'); var tokenize = require('./tokenize'); +var emojis = require('../build/emoji.json'); +var languageProcessor = require('./language-processor'); -/** - * Performs sentiment analysis on the provided input 'phrase'. - * - * @param {String} phrase - Input phrase - * @param {Object} opts - Options - * @param {Object} opts.language - Input language code (2 digit code), defaults to 'en' - * @param {Object} opts.extras - Optional sentiment additions to AFINN (hash k/v pairs) - * @param {function} callback - Optional callback - * - * @return {Object} - */ -module.exports = function (phrase, opts, callback) { - // Parse arguments - if (typeof phrase === 'undefined') phrase = ''; - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - opts = opts || {}; +module.exports = { - var lang = opts.language || 'en'; - var afinn = helper.getTranslations(lang); + /** + * Registers the specified language + * + * @param {String} languageCode + * - Two-digit code for the language to register + * @param {Object} language + * - The language module to register + */ + registerLanguage: function(languageCode, language) { + languageProcessor.addLanguage(languageCode, language); + }, - // Merge - if (typeof opts.extras === 'object') { - afinn = Object.assign(afinn, opts.extras); - } + /** + * Performs sentiment analysis on the provided input 'phrase'. + * + * @param {String} phrase + * - Input phrase + * @param {Object} opts + * - Options + * @param {Object} opts.language + * - Input language code (2 digit code), defaults to 'en' + * @param {Object} opts.extras + * - Optional sentiment additions to AFINN (hash k/v pairs) + * @param {function} callback + * - Optional callback + * @return {Object} + */ + analyze: function(phrase, opts, callback) { + // Parse arguments + if (typeof phrase === 'undefined') phrase = ''; + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + opts = opts || {}; - // Storage objects - var tokens = tokenize(phrase), - score = 0, - words = [], - positive = [], - negative = []; + var languageCode = opts.language || 'en'; + var labels = languageProcessor.getLabels(languageCode); - // Iterate over tokens - var i = tokens.length; - while (i--) { - var obj = tokens[i]; - var item = afinn[obj]; - if (!afinn.hasOwnProperty(obj)) continue; + // Add emojis unless explicitly excluded + if (opts.emojis !== false) { + Object.assign(labels, emojis); + } - // Apply negation strategy if available - item = helper.applyNegationStrategy(lang, i, tokens, item); + // Merge extra labels + if (typeof opts.extras === 'object') { + labels = Object.assign(labels, opts.extras); + } - words.push(obj); - if (item > 0) positive.push(obj); - if (item < 0) negative.push(obj); + // Storage objects + var tokens = tokenize(phrase), + score = 0, + words = [], + positive = [], + negative = []; - score += item; - } + // Iterate over tokens + var i = tokens.length; + while (i--) { + var obj = tokens[i]; + if (!labels.hasOwnProperty(obj)) continue; + + // Apply scoring strategy + var tokenScore = labels[obj]; + tokenScore = languageProcessor.applyScoringStrategy( + languageCode, + tokens, + i, + tokenScore + ); + + words.push(obj); + if (tokenScore > 0) positive.push(obj); + if (tokenScore < 0) negative.push(obj); + + score += tokenScore; + } - // Handle optional async interface - var result = { - score: score, - comparative: tokens.length > 0 ? score / tokens.length : 0, - tokens: tokens, - words: words, - positive: positive, - negative: negative - }; + var result = { + score: score, + comparative: tokens.length > 0 ? score / tokens.length : 0, + tokens: tokens, + words: words, + positive: positive, + negative: negative + }; - if (typeof callback === 'function') { - process.nextTick(function () { - callback(null, result); - }); - } else { - return result; + // Handle optional async interface + if (typeof callback === 'function') { + process.nextTick(function () { + callback(null, result); + }); + } else { + return result; + } } }; diff --git a/lib/language-processor.js b/lib/language-processor.js new file mode 100644 index 0000000..4067329 --- /dev/null +++ b/lib/language-processor.js @@ -0,0 +1,78 @@ +// Cache loaded languages +// English is loaded by default +var languages = { + en: require('../languages/en/index') +}; + +module.exports = { + + /** + * Registers the specified language + * + * @param {String} languageCode + * - Two-digit code for the language to register + * @param {Object} language + * - The language module to register + */ + addLanguage: function(languageCode, language) { + languages[languageCode] = language; + }, + + /** + * Retrieves a language object from the cache, + * or tries to load it from the set of supported languages + * + * @param {String} languageCode - Two-digit code for the language to fetch + */ + getLanguage: function(languageCode) { + if (!languageCode) { + // Default to english if no language was specified + return languages.en; + } + if (!languages[languageCode]) { + // Try to load specified language + try { + // eslint-disable-next-line max-len + var language = require('../languages/' + languageCode + '/index'); + } catch (err) { + throw new Error('No language found: ' + languageCode); + } + // Add language to in-memory cache + languages[languageCode] = language; + } + return languages[languageCode]; + }, + + /** + * Returns AFINN-165 weighted labels for the specified language + * + * @param {String} languageCode - Two-digit language code + * @return {Object} + */ + getLabels: function(languageCode) { + var language = this.getLanguage(languageCode); + return language.labels; + }, + + /** + * Applies a scoring strategy for the current token + * + * @param {String} languageCode - Two-digit language code + * @param {Array} tokens - Tokens of the phrase to analyze + * @param {int} cursor - Cursor of the current token being analyzed + * @param {int} tokenScore - The score of the current token being analyzed + */ + applyScoringStrategy: function(languageCode, tokens, cursor, tokenScore) { + var language = this.getLanguage(languageCode); + // Fallback to default strategy if none was specified + // eslint-disable-next-line max-len + var scoringStrategy = language.scoringStrategy || defaultScoringStrategy; + return scoringStrategy.apply(tokens, cursor, tokenScore); + } +}; + +var defaultScoringStrategy = { + apply: function(tokens, cursor, tokenScore) { + return tokenScore; + } +}; diff --git a/lib/negation/negation-en.js b/lib/negation/negation-en.js deleted file mode 100644 index dd6b7b9..0000000 --- a/lib/negation/negation-en.js +++ /dev/null @@ -1,11 +0,0 @@ -var negators = require('./negators-en.json'); - -module.exports = { - apply: function(cursor, tokens, item) { - if (cursor > 0) { - var prevtoken = tokens[cursor-1]; - if (negators[prevtoken]) item = -item; - } - return item; - } -} diff --git a/lib/negation/negations.js b/lib/negation/negations.js deleted file mode 100644 index 577065b..0000000 --- a/lib/negation/negations.js +++ /dev/null @@ -1,24 +0,0 @@ -var defaultNegationStrategy = { - apply: function(cursor, tokens, item) { - return item; - } -} - -module.exports = { - - /** - * Returns a language-specific negation strategy - * - * @param {String} lang - Two-digit language code - */ - getStrategyForLanguage: function(lang) { - var negationStrategy; - try { - negationStrategy = require('./negation-' + lang); - } catch (err) { - // Fallback to default strategy - negationStrategy = defaultNegationStrategy; - } - return negationStrategy; - } -} diff --git a/package.json b/package.json index 2f64ce9..997f9e7 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,12 @@ "scripts": { "test": "make test" }, - "dependencies": { - "afinn-165-multilingual": "0.0.1" - }, "devDependencies": { - "async": "^2.1.5", "Sentimental": "1.0.1", + "async": "^2.1.5", "benchmark": "^2.1.0", "eslint": "^4.6.1", + "mock-require": "^3.0.1", "tap": "^10.1.0" }, "engines": { diff --git a/test/benchmark/performance.js b/test/benchmark/performance.js index 9e0b8ef..76706c5 100644 --- a/test/benchmark/performance.js +++ b/test/benchmark/performance.js @@ -25,10 +25,10 @@ var stringLong = require('../fixtures/corpus'); */ suite .add('sentiment (Latest) - Short ', function () { - sentiment(stringShort); + sentiment.analyze(stringShort); }) .add('sentiment (Latest) - Long ', function () { - sentiment(stringLong); + sentiment.analyze(stringLong); }) .add('Sentimental (1.0.1) - Short', function () { sentimental.analyze(stringShort); diff --git a/test/benchmark/validate.js b/test/benchmark/validate.js index 782d919..9a1d8c9 100644 --- a/test/benchmark/validate.js +++ b/test/benchmark/validate.js @@ -13,7 +13,7 @@ function validate (set) { // Iterate over each word/class pair in the dataset for (var i in set) { - var score = sentiment(set[i].text).comparative; + var score = sentiment.analyze(set[i].text).comparative; if (set[i].class === 0) { if (score >= 0) obj.fail++; if (score < 0) obj.pass++; diff --git a/test/integration/async_inject.js b/test/integration/async_inject.js index 82e5aa4..14c7ebe 100644 --- a/test/integration/async_inject.js +++ b/test/integration/async_inject.js @@ -6,7 +6,7 @@ var options = { extras: { 'cool': 100 } }; -sentiment(input, options, function (err, result) { +sentiment.analyze(input, options, function (err, result) { test('asynchronous inject', function (t) { t.type(result, 'object'); t.equal(result.score, 100); diff --git a/test/integration/async_lang_inject.js b/test/integration/async_lang_inject.js deleted file mode 100644 index 7d59dd7..0000000 --- a/test/integration/async_lang_inject.js +++ /dev/null @@ -1,19 +0,0 @@ -var test = require('tap').test; -var sentiment = require('../../lib/index'); - -var input = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; -var options = { - language: 'fr', - extras: { 'bien': 100 } -}; - -sentiment(input, options, function (err, result) { - test('asynchronous FR inject', function (t) { - t.type(result, 'object'); - t.equal(result.score, 102); - t.equal(result.comparative, 25.5); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 2); - t.end(); - }); -}); diff --git a/test/integration/async_negative.js b/test/integration/async_negative.js index 572e1f7..e810b70 100644 --- a/test/integration/async_negative.js +++ b/test/integration/async_negative.js @@ -3,7 +3,7 @@ var sentiment = require('../../lib/index'); var input = 'Hey you worthless scumbag'; -sentiment(input, function (err, result) { +sentiment.analyze(input, function (err, result) { test('asynchronous negative', function (t) { t.type(result, 'object'); t.equal(result.score, -6); diff --git a/test/integration/async_negative_text_and_emoji.js b/test/integration/async_negative_text_and_emoji.js index c211f30..1fec535 100644 --- a/test/integration/async_negative_text_and_emoji.js +++ b/test/integration/async_negative_text_and_emoji.js @@ -3,7 +3,7 @@ var sentiment = require('../../lib/index'); var input = 'Hey you worthless scumbag ๐Ÿ˜ฆ'; -sentiment(input, function (err, result) { +sentiment.analyze(input, function (err, result) { test('asynchronous negative text and emoji', function (t) { t.type(result, 'object'); t.equal(result.score, -8); diff --git a/test/integration/async_positive.js b/test/integration/async_positive.js index 70f8ce0..dc6e00c 100644 --- a/test/integration/async_positive.js +++ b/test/integration/async_positive.js @@ -3,7 +3,7 @@ var sentiment = require('../../lib/index'); var input = 'This is so cool'; -sentiment(input, function (err, result) { +sentiment.analyze(input, function (err, result) { test('asynchronous positive', function (t) { t.type(result, 'object'); t.equal(result.score, 1); diff --git a/test/integration/async_positive_text_and_emoji.js b/test/integration/async_positive_text_and_emoji.js index 746d31a..e9bbffe 100644 --- a/test/integration/async_positive_text_and_emoji.js +++ b/test/integration/async_positive_text_and_emoji.js @@ -3,7 +3,7 @@ var sentiment = require('../../lib/index'); var input = 'This is so cool ๐Ÿ˜ƒ'; -sentiment(input, function (err, result) { +sentiment.analyze(input, function (err, result) { test('asynchronous positive text and emoji', function (t) { t.type(result, 'object'); t.equal(result.score, 3); diff --git a/test/integration/async_lang.js b/test/integration/custom_lang.js similarity index 50% rename from test/integration/async_lang.js rename to test/integration/custom_lang.js index 0cab5bc..863e112 100644 --- a/test/integration/async_lang.js +++ b/test/integration/custom_lang.js @@ -1,18 +1,19 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); -var input = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; -var options = { - language: 'fr' -}; +var input = 'This is so cool'; -sentiment(input, options, function (err, result) { - test('asynchronous positive FR text', function (t) { +sentiment.registerLanguage('xx', { + labels: { 'cool': 5 } +}); + +sentiment.analyze(input, { language: 'xx' }, function (err, result) { + test('asynchronous positive', function (t) { t.type(result, 'object'); t.equal(result.score, 5); t.equal(result.comparative, 1.25); t.equal(result.tokens.length, 4); - t.equal(result.words.length, 2); + t.equal(result.words.length, 1); t.end(); }); }); diff --git a/test/integration/disable_emojis.js b/test/integration/disable_emojis.js new file mode 100644 index 0000000..6f82072 --- /dev/null +++ b/test/integration/disable_emojis.js @@ -0,0 +1,15 @@ +var test = require('tap').test; +var sentiment = require('../../lib/index'); + +var input = 'This is so cool ๐Ÿ˜ƒ'; + +sentiment.analyze(input, { emojis: false }, function (err, result) { + test('asynchronous positive', function (t) { + t.type(result, 'object'); + t.equal(result.score, 1); + t.equal(result.comparative, 0.2); + t.equal(result.tokens.length, 5); + t.equal(result.words.length, 1); + t.end(); + }); +}); diff --git a/test/integration/gh_12.js b/test/integration/gh_12.js index 37d102c..4d9359d 100644 --- a/test/integration/gh_12.js +++ b/test/integration/gh_12.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = 'self-deluded'; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous positive', function (t) { t.type(result, 'object'); diff --git a/test/integration/gh_13.js b/test/integration/gh_13.js index 88270dd..4a46694 100644 --- a/test/integration/gh_13.js +++ b/test/integration/gh_13.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = 'constructor'; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous positive', function (t) { t.type(result, 'object'); diff --git a/test/integration/gh_85.js b/test/integration/gh_85.js index ace135a..592b33b 100644 --- a/test/integration/gh_85.js +++ b/test/integration/gh_85.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = 'i\'ll be there soon'; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous positive', function (t) { t.type(result, 'object'); diff --git a/test/integration/supported_lang.js b/test/integration/supported_lang.js new file mode 100644 index 0000000..d7e73ae --- /dev/null +++ b/test/integration/supported_lang.js @@ -0,0 +1,20 @@ +var test = require('tap').test; +var sentiment = require('../../lib/index'); +var mock = require('mock-require'); + +// Mock a supported language +mock('../../languages/yy/index', { + labels: { 'cool': 20 } +}); + +var input = 'This is so cool'; +var result = sentiment.analyze(input, { language: 'yy' }); + +test('synchronous positive', function (t) { + t.type(result, 'object'); + t.equal(result.score, 20); + t.equal(result.comparative, 5); + t.equal(result.tokens.length, 4); + t.equal(result.words.length, 1); + t.end(); +}); diff --git a/test/integration/sync_corpus.js b/test/integration/sync_corpus.js index d429fcb..a21bb59 100644 --- a/test/integration/sync_corpus.js +++ b/test/integration/sync_corpus.js @@ -3,7 +3,7 @@ var corpus = require('../fixtures/corpus'); var sentiment = require('../../lib/index'); var dataset = corpus; -var result = sentiment(dataset); +var result = sentiment.analyze(dataset); test('synchronous corpus', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_fuzz.js b/test/integration/sync_fuzz.js index 01f4e21..0477549 100644 --- a/test/integration/sync_fuzz.js +++ b/test/integration/sync_fuzz.js @@ -5,6 +5,6 @@ var sentiment = require('../../lib/index'); var input = fuzz(1000); test('synchronous fuzz', function (t) { - t.type(sentiment(input), 'object'); + t.type(sentiment.analyze(input), 'object'); t.end(); }); diff --git a/test/integration/sync_inject.js b/test/integration/sync_inject.js index 684f003..b2046e7 100644 --- a/test/integration/sync_inject.js +++ b/test/integration/sync_inject.js @@ -6,7 +6,7 @@ var options = { extras: { 'cool': 100 } }; -var result = sentiment(input, options); +var result = sentiment.analyze(input, options); test('synchronous inject', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_lang.js b/test/integration/sync_lang.js deleted file mode 100644 index f9c2972..0000000 --- a/test/integration/sync_lang.js +++ /dev/null @@ -1,18 +0,0 @@ -var test = require('tap').test; -var sentiment = require('../../lib/index'); - -var input = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; -var options = { - language: 'fr' -}; - -var result = sentiment(input, options); - -test('synchronous positive FR text', function (t) { - t.type(result, 'object'); - t.equal(result.score, 5); - t.equal(result.comparative, 1.25); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 2); - t.end(); -}); diff --git a/test/integration/sync_lang_inject.js b/test/integration/sync_lang_inject.js deleted file mode 100644 index c0187f0..0000000 --- a/test/integration/sync_lang_inject.js +++ /dev/null @@ -1,21 +0,0 @@ -var test = require('tap').test; -var sentiment = require('../../lib/index'); - -var input = 'C\'รฉtait vraiment bien ๐Ÿ˜ƒ'; -var options = { - language: 'fr', - extras: { - 'bien': 100 - } -}; - -var result = sentiment(input, options); - -test('synchronous inject FR', function (t) { - t.type(result, 'object'); - t.equal(result.score, 102); - t.equal(result.comparative, 25.5); - t.equal(result.tokens.length, 4); - t.equal(result.words.length, 2); - t.end(); -}); diff --git a/test/integration/sync_negation.js b/test/integration/sync_negation.js index 88fc66a..13252cf 100644 --- a/test/integration/sync_negation.js +++ b/test/integration/sync_negation.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = 'I don\'t hate you'; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous negation', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_negative.js b/test/integration/sync_negative.js index 7f509d6..10f4667 100644 --- a/test/integration/sync_negative.js +++ b/test/integration/sync_negative.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = 'Hey you worthless scumbag'; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous negative', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_negative_text_and_emoji.js b/test/integration/sync_negative_text_and_emoji.js index 6243397..3afdbec 100644 --- a/test/integration/sync_negative_text_and_emoji.js +++ b/test/integration/sync_negative_text_and_emoji.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = 'Hey you worthless scumbag ๐Ÿ˜ฆ'; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous negative with emoji', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_positive.js b/test/integration/sync_positive.js index f92256a..9babdfc 100644 --- a/test/integration/sync_positive.js +++ b/test/integration/sync_positive.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = 'This is so cool'; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous positive', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_positive_text_and_emoji.js b/test/integration/sync_positive_text_and_emoji.js index d761cee..954aeea 100644 --- a/test/integration/sync_positive_text_and_emoji.js +++ b/test/integration/sync_positive_text_and_emoji.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = 'This is so cool ๐Ÿ˜ƒ'; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous positive with emoji', function (t) { t.type(result, 'object'); diff --git a/test/integration/sync_undefined.js b/test/integration/sync_undefined.js index 66f5023..b361201 100644 --- a/test/integration/sync_undefined.js +++ b/test/integration/sync_undefined.js @@ -2,7 +2,7 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); var input = undefined; -var result = sentiment(input); +var result = sentiment.analyze(input); test('synchronous undefined', function (t) { t.type(result, 'object'); diff --git a/test/unit/language-processor.js b/test/unit/language-processor.js new file mode 100644 index 0000000..c546da7 --- /dev/null +++ b/test/unit/language-processor.js @@ -0,0 +1,37 @@ +var test = require('tap').test; +var languageProcessor = require('../../lib/language-processor'); + +test('spec', function (t) { + t.type(languageProcessor, 'object'); + t.type(languageProcessor.getLanguage, 'function'); + t.type(languageProcessor.getLabels, 'function'); + t.type(languageProcessor.applyScoringStrategy, 'function'); + t.end(); +}); + +test('getLanguage', function (t) { + + var englishLanguage = require('../../languages/en/index'); + + t.deepEqual( + languageProcessor.getLanguage(), + englishLanguage + ); + + t.deepEqual( + languageProcessor.getLanguage(null), + englishLanguage + ); + + t.deepEqual( + languageProcessor.getLanguage('en'), + englishLanguage + ); + + t.throws(function () { + // Should throw with unknown language code + languageProcessor.getLanguage('xx'); + }); + + t.end(); +}); diff --git a/test/unit/spec.js b/test/unit/spec.js index 4c40475..133f2cc 100644 --- a/test/unit/spec.js +++ b/test/unit/spec.js @@ -2,8 +2,11 @@ var test = require('tap').test; var sentiment = require('../../lib/index'); test('interface', function (t) { - t.type(sentiment, 'function', 'module is a function'); - t.type(sentiment('test'), 'object'); - t.type(sentiment('test', {test: 10}), 'object'); + t.type(sentiment, 'object', 'module is an object'); + t.type(sentiment.analyze, 'function', 'sentiment.analyze is a function'); + // eslint-disable-next-line max-len + t.type(sentiment.registerLanguage, 'function', 'sentiment.registerLanguage is a function'); + t.type(sentiment.analyze('test'), 'object'); + t.type(sentiment.analyze('test', {test: 10}), 'object'); t.end(); }); From 7fd7ae5e7576a1b876ac9c3836ccae41ed74d781 Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Wed, 28 Feb 2018 13:48:55 +0100 Subject: [PATCH 8/9] Update README.md --- README.md | 128 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 93 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 1ad00bf..d3950de 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -## sentiment -#### AFINN-based sentiment analysis for Node.js +# sentiment +### AFINN-based sentiment analysis for Node.js [![Build Status](https://travis-ci.org/thisandagain/sentiment.svg?branch=develop)](https://travis-ci.org/thisandagain/sentiment) [![Coverage Status](https://coveralls.io/repos/thisandagain/sentiment/badge.svg?branch=develop&service=github)](https://coveralls.io/github/thisandagain/sentiment?branch=develop) @@ -9,54 +9,112 @@ Sentiment is a Node.js module that uses the [AFINN-165](http://www2.imm.dtu.dk/p - Performance (see benchmarks below) - The ability to append and overwrite word / value pairs from the AFINN wordlist +- The ability to easily add support for new languages +- The ability to easily define custom strategies for negation, emphasis, etc. on a per-language basis - A build process that makes updating sentiment to future wordlists trivial -### Installation +## Table of contents + +- [Installation](#installation) +- [Usage example](#usage-example) +- [Adding new languages](#adding-new-languages) +- [Adding and overwriting words](#adding-and-overwriting-words) +- [API Reference](#api-reference) +- [How it works](#how-it-works) +- [Benchmarks](#benchmarks) +- [Validation](#validation) +- [Testing](#testing) + +## Installation ```bash npm install sentiment ``` -### Usage +## Usage example ```javascript var sentiment = require('sentiment'); - -var r1 = sentiment('Cats are stupid.'); -console.dir(r1); // Score: -2, Comparative: -0.666 - -var r2 = sentiment('Cats are totally amazing!'); -console.dir(r2); // Score: 4, Comparative: 1 +var result = sentiment.analyze('Cats are stupid.'); +console.dir(result); // Score: -2, Comparative: -0.666 ``` -### Usage with multiple languages -English language ('en') is set as a default option when no other parameter is set. -The list of supported languages can be found here: https://github.com/dkocich/afinn-165-multilingual +## Adding new languages +You can add support for a new language by registering it using the `registerLanguage` method: ```javascript -var r3 = sentiment('Katzen sind dumm.', 'de'); -console.dir(r3); // Score: -2, Comparative: -0.6666666666666666 +var frLanguage = { + labels: { 'stupide': -2 } +}; +sentiment.registerLanguage('fr', frLanguage); -var r4 = sentiment('El gato es estรบpido.', 'es'); -console.dir(r4); // Score: -2, Comparative: -0.5 +var result = sentiment.analyze('Le chat est stupide.', { language: 'fr' }); +console.dir(result); // Score: -2, Comparative: -0.5 +``` -var r5 = sentiment('Le chat est stupide.', 'fr'); -console.dir(r5); // Score: -2, Comparative: -0.5 +You can also define custom scoring strategies to handle things like negation and emphasis on a per-language basis: +```javascript +var frLanguage = { + labels: { 'stupide': -2 }, + scoringStrategy: { + apply: function(tokens, cursor, tokenScore) { + if (cursor > 0) { + var prevtoken = tokens[cursor - 1]; + if (prevtoken === 'pas') { + tokenScore = -tokenScore; + } + } + return tokenScore; + } + } +}; +sentiment.registerLanguage('fr', frLanguage); + +var result = sentiment.analyze('Le chat n\'est pas stupide', { language: 'fr' }); +console.dir(result); // Score: 2, Comparative: 0.4 ``` -### Adding / overwriting words +## Adding and overwriting words You can append and/or overwrite values from AFINN by simply injecting key/value pairs into a sentiment method call: ```javascript -var sentiment = require('sentiment'); - -var result = sentiment('Cats are totally amazing!', { +var options = { + extras: { 'cats': 5, - 'amazing': 2 -}); + 'amazing': 2 + } +}; +var result = sentiment.analyze('Cats are totally amazing!', options); console.dir(result); // Score: 7, Comparative: 1.75 ``` +## API Reference + +#### `sentiment.analyze(phrase, [options], [callback])` + +| Argument | Type | Required | Description | +|----------|------------|----------|-------------| +| phrase | `string` | `true` | Input phrase to analyze | +| options | `object` | `false` | Options | +| callback | `function` | `false` | If specified, the result is returned with this callback function | + + +`options` object properties: + +| Property | Type | Default | Description | +|----------|-----------|---------|--------------| +| language | `string` | `'en'` | Language to use for sentiment analysis | +| emojis | `boolean` | `true` | Analyze emoji tokens | +| extras | `object` | `{}` | Set of labels and their associated values to add or overwrite | + + +#### `sentiment.registerLanguage(languageCode, language)` + +| Argument | Type | Required | Description | +|--------------|----------|----------|------------------------------------------------------| +| languageCode | `string` | `true` | International two-digit code for the language to add | +| language | `object` | `true` | Language module | + --- -### How it works -#### AFINN +## How it works +### AFINN AFINN is a list of words rated for valence with an integer between minus five (negative) and plus five (positive). Sentiment analysis is performed by cross-checking the string tokens(words, emojis) with the AFINN list and getting their respective scores. The comparative score is simply: `sum of each token / number of tokens`. So for example let's take the following: `I love cats, but I am allergic to them.` @@ -108,12 +166,12 @@ This approach leaves you with a mid-point of 0 and the upper and lower bounds ar (5 * 200) / 200 = 5 ``` -#### Tokenization +### Tokenization Tokenization works by splitting the lines of input string, then removing the special characters, and finally splitting it using spaces. This is used to get list of words in the string. --- -### Benchmarks +## Benchmarks A primary motivation for designing `sentiment` was performance. As such, it includes a benchmark script within the test directory that compares it against the [Sentimental](https://github.com/thinkroth/Sentimental) module which provides a nearly equivalent interface and approach. Based on these benchmarks, running on a MacBook Pro with Node v6.9.1, `sentiment` is **twice as fast** as alternative implementations: ```bash @@ -128,7 +186,7 @@ make benchmark --- -### Validation +## Validation While the accuracy provided by AFINN is quite good considering it's computational performance (see above) there is always room for improvement. Therefore the `sentiment` module is open to accepting PRs which modify or amend the AFINN / Emoji datasets or implementation given that they improve accuracy and maintain similar performance characteristics. In order to establish this, we test the `sentiment` module against [three labelled datasets provided by UCI](https://archive.ics.uci.edu/ml/datasets/Sentiment+Labelled+Sentences). To run the validation tests yourself: @@ -136,23 +194,23 @@ To run the validation tests yourself: make validate ``` -#### Rand Accuracy (AFINN Only) +### Rand Accuracy (AFINN Only) ``` Amazon: 0.70 IMDB: 0.76 Yelp: 0.67 ``` -#### Rand Accuracy (AFINN + Additions) +### Rand Accuracy (AFINN + Additions) ``` Amazon: 0.72 (+2%) -IMDB: 0.76 (+0%) -Yelp: 0.69 (+2%) +IMDB: 0.77 (+1%) +Yelp: 0.70 (+3%) ``` --- -### Testing +## Testing ```bash npm test ``` From d010408b2987af23e4873ffdca5d536be8d6282e Mon Sep 17 00:00:00 2001 From: elyas-bhy Date: Tue, 3 Apr 2018 17:24:06 +0200 Subject: [PATCH 9/9] Export a constructor from the provided module --- README.md | 35 ++-- lib/index.js | 173 +++++++++--------- lib/language-processor.js | 21 ++- test/benchmark/performance.js | 3 +- test/benchmark/validate.js | 3 +- test/integration/add_lang.js | 10 + test/integration/async_inject.js | 3 +- test/integration/async_negative.js | 3 +- .../async_negative_text_and_emoji.js | 3 +- test/integration/async_positive.js | 3 +- .../async_positive_text_and_emoji.js | 3 +- test/integration/custom_lang.js | 3 +- test/integration/disable_emojis.js | 15 -- test/integration/gh_12.js | 3 +- test/integration/gh_13.js | 3 +- test/integration/gh_85.js | 3 +- test/integration/supported_lang.js | 3 +- test/integration/sync_corpus.js | 3 +- test/integration/sync_fuzz.js | 3 +- test/integration/sync_inject.js | 3 +- test/integration/sync_negation.js | 3 +- test/integration/sync_negative.js | 3 +- .../sync_negative_text_and_emoji.js | 3 +- test/integration/sync_positive.js | 3 +- .../sync_positive_text_and_emoji.js | 3 +- test/integration/sync_undefined.js | 3 +- test/unit/spec.js | 12 +- 27 files changed, 183 insertions(+), 146 deletions(-) create mode 100644 test/integration/add_lang.js delete mode 100644 test/integration/disable_emojis.js diff --git a/README.md b/README.md index d3950de..05a99dd 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,8 @@ npm install sentiment ## Usage example ```javascript -var sentiment = require('sentiment'); +var Sentiment = require('sentiment'); +var sentiment = new Sentiment(); var result = sentiment.analyze('Cats are stupid.'); console.dir(result); // Score: -2, Comparative: -0.666 ``` @@ -86,30 +87,38 @@ console.dir(result); // Score: 7, Comparative: 1.75 ## API Reference +#### `var sentiment = new Sentiment([options])` + +| Argument | Type | Required | Description | +|----------|------------|----------|------------------------------------------------------------| +| options | `object` | `false` | Configuration options _(no options supported currently)_ | + +--- + #### `sentiment.analyze(phrase, [options], [callback])` -| Argument | Type | Required | Description | -|----------|------------|----------|-------------| +| Argument | Type | Required | Description | +|----------|------------|----------|-------------------------| | phrase | `string` | `true` | Input phrase to analyze | -| options | `object` | `false` | Options | -| callback | `function` | `false` | If specified, the result is returned with this callback function | +| options | `object` | `false` | Options _(see below)_ | +| callback | `function` | `false` | If specified, the result is returned using this callback function | `options` object properties: -| Property | Type | Default | Description | -|----------|-----------|---------|--------------| -| language | `string` | `'en'` | Language to use for sentiment analysis | -| emojis | `boolean` | `true` | Analyze emoji tokens | +| Property | Type | Default | Description | +|----------|-----------|---------|---------------------------------------------------------------| +| language | `string` | `'en'` | Language to use for sentiment analysis | | extras | `object` | `{}` | Set of labels and their associated values to add or overwrite | +--- #### `sentiment.registerLanguage(languageCode, language)` -| Argument | Type | Required | Description | -|--------------|----------|----------|------------------------------------------------------| -| languageCode | `string` | `true` | International two-digit code for the language to add | -| language | `object` | `true` | Language module | +| Argument | Type | Required | Description | +|--------------|----------|----------|---------------------------------------------------------------------| +| languageCode | `string` | `true` | International two-digit code for the language to add | +| language | `object` | `true` | Language module (see [Adding new languages](#adding-new-languages)) | --- diff --git a/lib/index.js b/lib/index.js index d360f2a..ff8a672 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,103 +1,98 @@ var tokenize = require('./tokenize'); -var emojis = require('../build/emoji.json'); var languageProcessor = require('./language-processor'); -module.exports = { - - /** - * Registers the specified language - * - * @param {String} languageCode - * - Two-digit code for the language to register - * @param {Object} language - * - The language module to register - */ - registerLanguage: function(languageCode, language) { - languageProcessor.addLanguage(languageCode, language); - }, - - /** - * Performs sentiment analysis on the provided input 'phrase'. - * - * @param {String} phrase - * - Input phrase - * @param {Object} opts - * - Options - * @param {Object} opts.language - * - Input language code (2 digit code), defaults to 'en' - * @param {Object} opts.extras - * - Optional sentiment additions to AFINN (hash k/v pairs) - * @param {function} callback - * - Optional callback - * @return {Object} - */ - analyze: function(phrase, opts, callback) { - // Parse arguments - if (typeof phrase === 'undefined') phrase = ''; - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - opts = opts || {}; - - var languageCode = opts.language || 'en'; - var labels = languageProcessor.getLabels(languageCode); +/** + * Constructor + * @param {Object} options - Instance options + */ +var Sentiment = function (options) { + this.options = options; +}; - // Add emojis unless explicitly excluded - if (opts.emojis !== false) { - Object.assign(labels, emojis); - } +/** + * Registers the specified language + * + * @param {String} languageCode + * - Two-digit code for the language to register + * @param {Object} language + * - The language module to register + */ +Sentiment.prototype.registerLanguage = function (languageCode, language) { + languageProcessor.addLanguage(languageCode, language); +}; - // Merge extra labels - if (typeof opts.extras === 'object') { - labels = Object.assign(labels, opts.extras); - } +/** + * Performs sentiment analysis on the provided input 'phrase'. + * + * @param {String} phrase + * - Input phrase + * @param {Object} opts + * - Options + * @param {Object} opts.language + * - Input language code (2 digit code), defaults to 'en' + * @param {Object} opts.extras + * - Optional sentiment additions to AFINN (hash k/v pairs) + * @param {function} callback + * - Optional callback + * @return {Object} + */ +Sentiment.prototype.analyze = function (phrase, opts, callback) { + // Parse arguments + if (typeof phrase === 'undefined') phrase = ''; + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + opts = opts || {}; - // Storage objects - var tokens = tokenize(phrase), - score = 0, - words = [], - positive = [], - negative = []; + var languageCode = opts.language || 'en'; + var labels = languageProcessor.getLabels(languageCode); - // Iterate over tokens - var i = tokens.length; - while (i--) { - var obj = tokens[i]; - if (!labels.hasOwnProperty(obj)) continue; + // Merge extra labels + if (typeof opts.extras === 'object') { + labels = Object.assign(labels, opts.extras); + } - // Apply scoring strategy - var tokenScore = labels[obj]; - tokenScore = languageProcessor.applyScoringStrategy( - languageCode, - tokens, - i, - tokenScore - ); + // Storage objects + var tokens = tokenize(phrase), + score = 0, + words = [], + positive = [], + negative = []; - words.push(obj); - if (tokenScore > 0) positive.push(obj); - if (tokenScore < 0) negative.push(obj); + // Iterate over tokens + var i = tokens.length; + while (i--) { + var obj = tokens[i]; + if (!labels.hasOwnProperty(obj)) continue; + words.push(obj); - score += tokenScore; - } + // Apply scoring strategy + var tokenScore = labels[obj]; + // eslint-disable-next-line max-len + tokenScore = languageProcessor.applyScoringStrategy(languageCode, tokens, i, tokenScore); + if (tokenScore > 0) positive.push(obj); + if (tokenScore < 0) negative.push(obj); + score += tokenScore; + } - var result = { - score: score, - comparative: tokens.length > 0 ? score / tokens.length : 0, - tokens: tokens, - words: words, - positive: positive, - negative: negative - }; + var result = { + score: score, + comparative: tokens.length > 0 ? score / tokens.length : 0, + tokens: tokens, + words: words, + positive: positive, + negative: negative + }; - // Handle optional async interface - if (typeof callback === 'function') { - process.nextTick(function () { - callback(null, result); - }); - } else { - return result; - } + // Handle optional async interface + if (typeof callback === 'function') { + process.nextTick(function () { + callback(null, result); + }); + } else { + return result; } }; + +module.exports = Sentiment; diff --git a/lib/language-processor.js b/lib/language-processor.js index 4067329..fe373de 100644 --- a/lib/language-processor.js +++ b/lib/language-processor.js @@ -1,7 +1,13 @@ -// Cache loaded languages +var emojis = require('../build/emoji.json'); + // English is loaded by default +var enLanguage = require('../languages/en/index'); +// Add emojis +Object.assign(enLanguage.labels, emojis); + +// Cache loaded languages var languages = { - en: require('../languages/en/index') + en: enLanguage }; module.exports = { @@ -14,7 +20,12 @@ module.exports = { * @param {Object} language * - The language module to register */ - addLanguage: function(languageCode, language) { + addLanguage: function (languageCode, language) { + if (!language.labels) { + throw new Error('language.labels must be defined!'); + } + // Add emojis + Object.assign(language.labels, emojis); languages[languageCode] = language; }, @@ -34,11 +45,11 @@ module.exports = { try { // eslint-disable-next-line max-len var language = require('../languages/' + languageCode + '/index'); + // Add language to in-memory cache + this.addLanguage(languageCode, language); } catch (err) { throw new Error('No language found: ' + languageCode); } - // Add language to in-memory cache - languages[languageCode] = language; } return languages[languageCode]; }, diff --git a/test/benchmark/performance.js b/test/benchmark/performance.js index 76706c5..caa9499 100644 --- a/test/benchmark/performance.js +++ b/test/benchmark/performance.js @@ -11,7 +11,8 @@ var Benchmark = require('benchmark'); var suite = new Benchmark.Suite(); -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var sentimental = require('Sentimental'); /** diff --git a/test/benchmark/validate.js b/test/benchmark/validate.js index 9a1d8c9..7a7d0ff 100644 --- a/test/benchmark/validate.js +++ b/test/benchmark/validate.js @@ -1,4 +1,5 @@ -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var amazon = require('../fixtures/amazon.json'); var imdb = require('../fixtures/imdb.json'); diff --git a/test/integration/add_lang.js b/test/integration/add_lang.js new file mode 100644 index 0000000..b029c5c --- /dev/null +++ b/test/integration/add_lang.js @@ -0,0 +1,10 @@ +var test = require('tap').test; +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); + +test('adding a language with no labels attribute should throw', function (t) { + t.throws(function () { + sentiment.registerLanguage('xx', {}); + }, new Error('language.labels must be defined!')); + t.end(); +}); diff --git a/test/integration/async_inject.js b/test/integration/async_inject.js index 14c7ebe..59077b8 100644 --- a/test/integration/async_inject.js +++ b/test/integration/async_inject.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'This is so cool'; var options = { diff --git a/test/integration/async_negative.js b/test/integration/async_negative.js index e810b70..ac60a27 100644 --- a/test/integration/async_negative.js +++ b/test/integration/async_negative.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'Hey you worthless scumbag'; diff --git a/test/integration/async_negative_text_and_emoji.js b/test/integration/async_negative_text_and_emoji.js index 1fec535..dc5c9d1 100644 --- a/test/integration/async_negative_text_and_emoji.js +++ b/test/integration/async_negative_text_and_emoji.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'Hey you worthless scumbag ๐Ÿ˜ฆ'; diff --git a/test/integration/async_positive.js b/test/integration/async_positive.js index dc6e00c..afb2f0a 100644 --- a/test/integration/async_positive.js +++ b/test/integration/async_positive.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'This is so cool'; diff --git a/test/integration/async_positive_text_and_emoji.js b/test/integration/async_positive_text_and_emoji.js index e9bbffe..abf18d5 100644 --- a/test/integration/async_positive_text_and_emoji.js +++ b/test/integration/async_positive_text_and_emoji.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'This is so cool ๐Ÿ˜ƒ'; diff --git a/test/integration/custom_lang.js b/test/integration/custom_lang.js index 863e112..c916790 100644 --- a/test/integration/custom_lang.js +++ b/test/integration/custom_lang.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'This is so cool'; diff --git a/test/integration/disable_emojis.js b/test/integration/disable_emojis.js deleted file mode 100644 index 6f82072..0000000 --- a/test/integration/disable_emojis.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var sentiment = require('../../lib/index'); - -var input = 'This is so cool ๐Ÿ˜ƒ'; - -sentiment.analyze(input, { emojis: false }, function (err, result) { - test('asynchronous positive', function (t) { - t.type(result, 'object'); - t.equal(result.score, 1); - t.equal(result.comparative, 0.2); - t.equal(result.tokens.length, 5); - t.equal(result.words.length, 1); - t.end(); - }); -}); diff --git a/test/integration/gh_12.js b/test/integration/gh_12.js index 4d9359d..1d8f01a 100644 --- a/test/integration/gh_12.js +++ b/test/integration/gh_12.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'self-deluded'; var result = sentiment.analyze(input); diff --git a/test/integration/gh_13.js b/test/integration/gh_13.js index 4a46694..2903cc0 100644 --- a/test/integration/gh_13.js +++ b/test/integration/gh_13.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'constructor'; var result = sentiment.analyze(input); diff --git a/test/integration/gh_85.js b/test/integration/gh_85.js index 592b33b..b3ea090 100644 --- a/test/integration/gh_85.js +++ b/test/integration/gh_85.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'i\'ll be there soon'; var result = sentiment.analyze(input); diff --git a/test/integration/supported_lang.js b/test/integration/supported_lang.js index d7e73ae..5db1679 100644 --- a/test/integration/supported_lang.js +++ b/test/integration/supported_lang.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var mock = require('mock-require'); // Mock a supported language diff --git a/test/integration/sync_corpus.js b/test/integration/sync_corpus.js index a21bb59..72d45ea 100644 --- a/test/integration/sync_corpus.js +++ b/test/integration/sync_corpus.js @@ -1,6 +1,7 @@ var test = require('tap').test; var corpus = require('../fixtures/corpus'); -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var dataset = corpus; var result = sentiment.analyze(dataset); diff --git a/test/integration/sync_fuzz.js b/test/integration/sync_fuzz.js index 0477549..9a94d53 100644 --- a/test/integration/sync_fuzz.js +++ b/test/integration/sync_fuzz.js @@ -1,6 +1,7 @@ var test = require('tap').test; var fuzz = require('../fixtures/fuzz'); -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = fuzz(1000); diff --git a/test/integration/sync_inject.js b/test/integration/sync_inject.js index b2046e7..c8dd90c 100644 --- a/test/integration/sync_inject.js +++ b/test/integration/sync_inject.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'This is so cool'; var options = { diff --git a/test/integration/sync_negation.js b/test/integration/sync_negation.js index 13252cf..0635a9b 100644 --- a/test/integration/sync_negation.js +++ b/test/integration/sync_negation.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'I don\'t hate you'; var result = sentiment.analyze(input); diff --git a/test/integration/sync_negative.js b/test/integration/sync_negative.js index 10f4667..cb6019a 100644 --- a/test/integration/sync_negative.js +++ b/test/integration/sync_negative.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'Hey you worthless scumbag'; var result = sentiment.analyze(input); diff --git a/test/integration/sync_negative_text_and_emoji.js b/test/integration/sync_negative_text_and_emoji.js index 3afdbec..4514f7f 100644 --- a/test/integration/sync_negative_text_and_emoji.js +++ b/test/integration/sync_negative_text_and_emoji.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'Hey you worthless scumbag ๐Ÿ˜ฆ'; var result = sentiment.analyze(input); diff --git a/test/integration/sync_positive.js b/test/integration/sync_positive.js index 9babdfc..35260a0 100644 --- a/test/integration/sync_positive.js +++ b/test/integration/sync_positive.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'This is so cool'; var result = sentiment.analyze(input); diff --git a/test/integration/sync_positive_text_and_emoji.js b/test/integration/sync_positive_text_and_emoji.js index 954aeea..f9bf464 100644 --- a/test/integration/sync_positive_text_and_emoji.js +++ b/test/integration/sync_positive_text_and_emoji.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = 'This is so cool ๐Ÿ˜ƒ'; var result = sentiment.analyze(input); diff --git a/test/integration/sync_undefined.js b/test/integration/sync_undefined.js index b361201..33b91af 100644 --- a/test/integration/sync_undefined.js +++ b/test/integration/sync_undefined.js @@ -1,5 +1,6 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); var input = undefined; var result = sentiment.analyze(input); diff --git a/test/unit/spec.js b/test/unit/spec.js index 133f2cc..1d14a5c 100644 --- a/test/unit/spec.js +++ b/test/unit/spec.js @@ -1,12 +1,18 @@ var test = require('tap').test; -var sentiment = require('../../lib/index'); +var Sentiment = require('../../lib/index'); +var sentiment = new Sentiment(); + +test('module', function (t) { + t.type(Sentiment, 'function', 'module is a function'); + t.end(); +}); test('interface', function (t) { - t.type(sentiment, 'object', 'module is an object'); + t.type(sentiment, 'object', 'instance is an object'); t.type(sentiment.analyze, 'function', 'sentiment.analyze is a function'); // eslint-disable-next-line max-len t.type(sentiment.registerLanguage, 'function', 'sentiment.registerLanguage is a function'); t.type(sentiment.analyze('test'), 'object'); - t.type(sentiment.analyze('test', {test: 10}), 'object'); + t.type(sentiment.analyze('test', { test: 10 }), 'object'); t.end(); });