From bd48917143df18d7da4394e7a78047c0edc6754a Mon Sep 17 00:00:00 2001 From: Carlos C Date: Sat, 19 Dec 2015 04:37:43 +0100 Subject: [PATCH] Port to Go of Sentimental library (thinkroth/Sentimental) --- .travis.yml | 5 + README.md | 36 +- afinn.go | 2467 +++++++++++++++++++++++++++++++++++++++++++++++ checker.go | 108 +++ checker_test.go | 89 ++ 5 files changed, 2703 insertions(+), 2 deletions(-) create mode 100644 .travis.yml create mode 100644 afinn.go create mode 100644 checker.go create mode 100644 checker_test.go diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..26ac392 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: go +sudo: false + +go: + - 1.5 \ No newline at end of file diff --git a/README.md b/README.md index 9cce905..7c8465e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,34 @@ -# HumorChecker -Port into Go of Sentimental library +# HumorChecker - port of SentiMental into Go. + +[![Build Status](https://travis-ci.org/ccirello/HumorChecker.svg?branch=master)](https://travis-ci.org/ccirello/HumorChecker) + +Credits where credits are due: consider starring [SentiMental](https://github.com/thinkroth/Sentimental) repo on which this one was based. + +Sentiment analysis tool based on the [AFINN-111 wordlist](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6010). + +## Install + $ go get cirello.io/HumorChecker + +## Features + + * Positivity ranking + * Negativity ranking + * Analyze - combines Positivity and Negativity ranking into an aggregate sentiment score + +## Example +```js +package main + +import hc "cirello.io/HumorChecker" + +func main(){ + hc.Analyze("Hey you worthless scumbag"); //Score: -6, Comparative:-1.5 + hc.Positivity("This is so cool"); //Score: 1, Comparative:.25 + hc.Negativity("Hey you worthless scumbag"); //Score: 6, Comparative:1.5 + hc.Analyze("I am happy"); //Score: 3, Comparative: 1 + hc.Analyze("I am so happy"); //Score: 6, Comparative: 1.5 + hc.Analyze("I am extremely happy"); //Score: 12, Comparative: 3 + hc.Analyze("I am really sad"); //Score: -4, Comparative: -1 +} +``` + diff --git a/afinn.go b/afinn.go new file mode 100644 index 0000000..5f7aced --- /dev/null +++ b/afinn.go @@ -0,0 +1,2467 @@ +package HumorChecker + +// From: http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6010 +var afinn = map[string]float64{ + "abandon": -2.0, + "abandoned": -2.0, + "abandons": -2.0, + "abducted": -2.0, + "abduction": -2.0, + "abductions": -2.0, + "abhor": -3.0, + "abhorred": -3.0, + "abhorrent": -3.0, + "abhors": -3.0, + "abilities": 2.0, + "ability": 2.0, + "aboard": 1.0, + "absentee": -1.0, + "absentees": -1.0, + "absolve": 2.0, + "absolved": 2.0, + "absolves": 2.0, + "absolving": 2.0, + "absorbed": 1.0, + "abuse": -3.0, + "abused": -3.0, + "abuses": -3.0, + "abusive": -3.0, + "accept": 1.0, + "accepted": 1.0, + "accepting": 1.0, + "accepts": 1.0, + "accident": -2.0, + "accidental": -2.0, + "accidentally": -2.0, + "accidents": -2.0, + "accomplish": 2.0, + "accomplished": 2.0, + "accomplishes": 2.0, + "accusation": -2.0, + "accusations": -2.0, + "accuse": -2.0, + "accused": -2.0, + "accuses": -2.0, + "accusing": -2.0, + "ache": -2.0, + "achievable": 1.0, + "aching": -2.0, + "acquit": 2.0, + "acquits": 2.0, + "acquitted": 2.0, + "acquitting": 2.0, + "acrimonious": -3.0, + "active": 1.0, + "adequate": 1.0, + "admire": 3.0, + "admired": 3.0, + "admires": 3.0, + "admiring": 3.0, + "admit": -1.0, + "admits": -1.0, + "admitted": -1.0, + "admonish": -2.0, + "admonished": -2.0, + "adopt": 1.0, + "adopts": 1.0, + "adorable": 3.0, + "adore": 3.0, + "adored": 3.0, + "adores": 3.0, + "advanced": 1.0, + "advantage": 2.0, + "advantages": 2.0, + "adventure": 2.0, + "adventures": 2.0, + "adventurous": 2.0, + "affected": -1.0, + "affection": 3.0, + "affectionate": 3.0, + "afflicted": -1.0, + "affronted": -1.0, + "afraid": -2.0, + "aggravate": -2.0, + "aggravated": -2.0, + "aggravates": -2.0, + "aggravating": -2.0, + "aggression": -2.0, + "aggressions": -2.0, + "aggressive": -2.0, + "aghast": -2.0, + "agog": 2.0, + "agonise": -3.0, + "agonised": -3.0, + "agonises": -3.0, + "agonising": -3.0, + "agonize": -3.0, + "agonized": -3.0, + "agonizes": -3.0, + "agonizing": -3.0, + "agree": 1.0, + "agreeable": 2.0, + "agreed": 1.0, + "agreement": 1.0, + "agrees": 1.0, + "alarm": -2.0, + "alarmed": -2.0, + "alarmist": -2.0, + "alarmists": -2.0, + "alas": -1.0, + "alert": -1.0, + "alienation": -2.0, + "alive": 1.0, + "allergic": -2.0, + "allow": 1.0, + "alone": -2.0, + "amaze": 2.0, + "amazed": 2.0, + "amazes": 2.0, + "amazing": 4.0, + "ambitious": 2.0, + "ambivalent": -1.0, + "amuse": 3.0, + "amused": 3.0, + "amusement": 3.0, + "amusements": 3.0, + "anger": -3.0, + "angers": -3.0, + "angry": -3.0, + "anguish": -3.0, + "anguished": -3.0, + "animosity": -2.0, + "annoy": -2.0, + "annoyance": -2.0, + "annoyed": -2.0, + "annoying": -2.0, + "annoys": -2.0, + "antagonistic": -2.0, + "anti": -1.0, + "anticipation": 1.0, + "anxiety": -2.0, + "anxious": -2.0, + "apathetic": -3.0, + "apathy": -3.0, + "apeshit": -3.0, + "apocalyptic": -2.0, + "apologise": -1.0, + "apologised": -1.0, + "apologises": -1.0, + "apologising": -1.0, + "apologize": -1.0, + "apologized": -1.0, + "apologizes": -1.0, + "apologizing": -1.0, + "apology": -1.0, + "appalled": -2.0, + "appalling": -2.0, + "appease": 2.0, + "appeased": 2.0, + "appeases": 2.0, + "appeasing": 2.0, + "applaud": 2.0, + "applauded": 2.0, + "applauding": 2.0, + "applauds": 2.0, + "applause": 2.0, + "appreciate": 2.0, + "appreciated": 2.0, + "appreciates": 2.0, + "appreciating": 2.0, + "appreciation": 2.0, + "apprehensive": -2.0, + "approval": 2.0, + "approved": 2.0, + "approves": 2.0, + "ardent": 1.0, + "arrest": -2.0, + "arrested": -3.0, + "arrests": -2.0, + "arrogant": -2.0, + "ashame": -2.0, + "ashamed": -2.0, + "ass": -4.0, + "assassination": -3.0, + "assassinations": -3.0, + "asset": 2.0, + "assets": 2.0, + "assfucking": -4.0, + "asshole": -4.0, + "astonished": 2.0, + "astound": 3.0, + "astounded": 3.0, + "astounding": 3.0, + "astoundingly": 3.0, + "astounds": 3.0, + "attack": -1.0, + "attacked": -1.0, + "attacking": -1.0, + "attacks": -1.0, + "attract": 1.0, + "attracted": 1.0, + "attracting": 2.0, + "attraction": 2.0, + "attractions": 2.0, + "attracts": 1.0, + "audacious": 3.0, + "authority": 1.0, + "avert": -1.0, + "averted": -1.0, + "averts": -1.0, + "avid": 2.0, + "avoid": -1.0, + "avoided": -1.0, + "avoids": -1.0, + "await": -1.0, + "awaited": -1.0, + "awaits": -1.0, + "award": 3.0, + "awarded": 3.0, + "awards": 3.0, + "awesome": 4.0, + "awful": -3.0, + "awkward": -2.0, + "axe": -1.0, + "axed": -1.0, + "backed": 1.0, + "backing": 2.0, + "backs": 1.0, + "bad": -3.0, + "badass": -3.0, + "badly": -3.0, + "bailout": -2.0, + "bamboozle": -2.0, + "bamboozled": -2.0, + "bamboozles": -2.0, + "ban": -2.0, + "banish": -1.0, + "bankrupt": -3.0, + "bankster": -3.0, + "banned": -2.0, + "bargain": 2.0, + "barrier": -2.0, + "bastard": -5.0, + "bastards": -5.0, + "battle": -1.0, + "battles": -1.0, + "beaten": -2.0, + "beatific": 3.0, + "beating": -1.0, + "beauties": 3.0, + "beautiful": 3.0, + "beautifully": 3.0, + "beautify": 3.0, + "belittle": -2.0, + "belittled": -2.0, + "beloved": 3.0, + "benefit": 2.0, + "benefits": 2.0, + "benefitted": 2.0, + "benefitting": 2.0, + "bereave": -2.0, + "bereaved": -2.0, + "bereaves": -2.0, + "bereaving": -2.0, + "best": 3.0, + "betray": -3.0, + "betrayal": -3.0, + "betrayed": -3.0, + "betraying": -3.0, + "betrays": -3.0, + "better": 2.0, + "bias": -1.0, + "biased": -2.0, + "big": 1.0, + "bitch": -5.0, + "bitches": -5.0, + "bitter": -2.0, + "bitterly": -2.0, + "bizarre": -2.0, + "blah": -2.0, + "blame": -2.0, + "blamed": -2.0, + "blames": -2.0, + "blaming": -2.0, + "bless": 2.0, + "blesses": 2.0, + "blessing": 3.0, + "blind": -1.0, + "bliss": 3.0, + "blissful": 3.0, + "blithe": 2.0, + "block": -1.0, + "blockbuster": 3.0, + "blocked": -1.0, + "blocking": -1.0, + "blocks": -1.0, + "bloody": -3.0, + "blurry": -2.0, + "boastful": -2.0, + "bold": 2.0, + "boldly": 2.0, + "bomb": -1.0, + "boost": 1.0, + "boosted": 1.0, + "boosting": 1.0, + "boosts": 1.0, + "bore": -2.0, + "bored": -2.0, + "boring": -3.0, + "bother": -2.0, + "bothered": -2.0, + "bothers": -2.0, + "bothersome": -2.0, + "boycott": -2.0, + "boycotted": -2.0, + "boycotting": -2.0, + "boycotts": -2.0, + "brainwashing": -3.0, + "brave": 2.0, + "breakthrough": 3.0, + "breathtaking": 5.0, + "bribe": -3.0, + "bright": 1.0, + "brightest": 2.0, + "brightness": 1.0, + "brilliant": 4.0, + "brisk": 2.0, + "broke": -1.0, + "broken": -1.0, + "brooding": -2.0, + "bullied": -2.0, + "bullshit": -4.0, + "bully": -2.0, + "bullying": -2.0, + "bummer": -2.0, + "buoyant": 2.0, + "burden": -2.0, + "burdened": -2.0, + "burdening": -2.0, + "burdens": -2.0, + "calm": 2.0, + "calmed": 2.0, + "calming": 2.0, + "calms": 2.0, + "cancel": -1.0, + "cancelled": -1.0, + "cancelling": -1.0, + "cancels": -1.0, + "cancer": -1.0, + "capable": 1.0, + "captivated": 3.0, + "care": 2.0, + "carefree": 1.0, + "careful": 2.0, + "carefully": 2.0, + "careless": -2.0, + "cares": 2.0, + "casualty": -2.0, + "catastrophe": -3.0, + "catastrophic": -4.0, + "cautious": -1.0, + "celebrate": 3.0, + "celebrated": 3.0, + "celebrates": 3.0, + "celebrating": 3.0, + "censor": -2.0, + "censored": -2.0, + "censors": -2.0, + "certain": 1.0, + "chagrin": -2.0, + "chagrined": -2.0, + "challenge": -1.0, + "chance": 2.0, + "chances": 2.0, + "chaos": -2.0, + "chaotic": -2.0, + "charged": -3.0, + "charges": -2.0, + "charm": 3.0, + "charming": 3.0, + "charmless": -3.0, + "chastise": -3.0, + "chastised": -3.0, + "chastises": -3.0, + "chastising": -3.0, + "cheat": -3.0, + "cheated": -3.0, + "cheater": -3.0, + "cheaters": -3.0, + "cheats": -3.0, + "cheer": 2.0, + "cheered": 2.0, + "cheerful": 2.0, + "cheering": 2.0, + "cheerless": -2.0, + "cheers": 2.0, + "cheery": 3.0, + "cherish": 2.0, + "cherished": 2.0, + "cherishes": 2.0, + "cherishing": 2.0, + "chic": 2.0, + "childish": -2.0, + "chilling": -1.0, + "choke": -2.0, + "choked": -2.0, + "chokes": -2.0, + "choking": -2.0, + "clarifies": 2.0, + "clarity": 2.0, + "clash": -2.0, + "classy": 3.0, + "clean": 2.0, + "cleaner": 2.0, + "clear": 1.0, + "cleared": 1.0, + "clearly": 1.0, + "clears": 1.0, + "clever": 2.0, + "clouded": -1.0, + "clueless": -2.0, + "cock": -5.0, + "cocksucker": -5.0, + "cocksuckers": -5.0, + "cocky": -2.0, + "coerced": -2.0, + "collapse": -2.0, + "collapsed": -2.0, + "collapses": -2.0, + "collapsing": -2.0, + "collide": -1.0, + "collides": -1.0, + "colliding": -1.0, + "collision": -2.0, + "collisions": -2.0, + "colluding": -3.0, + "combat": -1.0, + "combats": -1.0, + "comedy": 1.0, + "comfort": 2.0, + "comfortable": 2.0, + "comforting": 2.0, + "comforts": 2.0, + "commend": 2.0, + "commended": 2.0, + "commit": 1.0, + "commitment": 2.0, + "commits": 1.0, + "committed": 1.0, + "committing": 1.0, + "compassionate": 2.0, + "compelled": 1.0, + "competent": 2.0, + "competitive": 2.0, + "complacent": -2.0, + "complain": -2.0, + "complained": -2.0, + "complains": -2.0, + "comprehensive": 2.0, + "conciliate": 2.0, + "conciliated": 2.0, + "conciliates": 2.0, + "conciliating": 2.0, + "condemn": -2.0, + "condemnation": -2.0, + "condemned": -2.0, + "condemns": -2.0, + "confidence": 2.0, + "confident": 2.0, + "conflict": -2.0, + "conflicting": -2.0, + "conflictive": -2.0, + "conflicts": -2.0, + "confuse": -2.0, + "confused": -2.0, + "confusing": -2.0, + "congrats": 2.0, + "congratulate": 2.0, + "congratulation": 2.0, + "congratulations": 2.0, + "consent": 2.0, + "consents": 2.0, + "consolable": 2.0, + "conspiracy": -3.0, + "constrained": -2.0, + "contagion": -2.0, + "contagions": -2.0, + "contagious": -1.0, + "contempt": -2.0, + "contemptuous": -2.0, + "contemptuously": -2.0, + "contend": -1.0, + "contender": -1.0, + "contending": -1.0, + "contentious": -2.0, + "contestable": -2.0, + "controversial": -2.0, + "controversially": -2.0, + "convince": 1.0, + "convinced": 1.0, + "convinces": 1.0, + "convivial": 2.0, + "cool": 1.0, + "cornered": -2.0, + "corpse": -1.0, + "costly": -2.0, + "courage": 2.0, + "courageous": 2.0, + "courteous": 2.0, + "courtesy": 2.0, + "cover-up": -3.0, + "coward": -2.0, + "cowardly": -2.0, + "coziness": 2.0, + "cramp": -1.0, + "crap": -3.0, + "crash": -2.0, + "crazier": -2.0, + "craziest": -2.0, + "crazy": -2.0, + "creative": 2.0, + "crestfallen": -2.0, + "cried": -2.0, + "cries": -2.0, + "crime": -3.0, + "criminal": -3.0, + "criminals": -3.0, + "crisis": -3.0, + "critic": -2.0, + "criticism": -2.0, + "criticize": -2.0, + "criticized": -2.0, + "criticizes": -2.0, + "criticizing": -2.0, + "critics": -2.0, + "cruel": -3.0, + "cruelty": -3.0, + "crush": -1.0, + "crushed": -2.0, + "crushes": -1.0, + "crushing": -1.0, + "cry": -1.0, + "crying": -2.0, + "cunt": -5.0, + "curious": 1.0, + "curse": -1.0, + "cut": -1.0, + "cute": 2.0, + "cuts": -1.0, + "cutting": -1.0, + "cynic": -2.0, + "cynical": -2.0, + "cynicism": -2.0, + "damage": -3.0, + "damages": -3.0, + "damn": -4.0, + "damned": -4.0, + "damnit": -4.0, + "danger": -2.0, + "daredevil": 2.0, + "daring": 2.0, + "darkest": -2.0, + "darkness": -1.0, + "dauntless": 2.0, + "dead": -3.0, + "deadlock": -2.0, + "deafening": -1.0, + "dear": 2.0, + "dearly": 3.0, + "death": -2.0, + "debonair": 2.0, + "debt": -2.0, + "deceit": -3.0, + "deceitful": -3.0, + "deceive": -3.0, + "deceived": -3.0, + "deceives": -3.0, + "deceiving": -3.0, + "deception": -3.0, + "decisive": 1.0, + "dedicated": 2.0, + "defeated": -2.0, + "defect": -3.0, + "defects": -3.0, + "defender": 2.0, + "defenders": 2.0, + "defenseless": -2.0, + "defer": -1.0, + "deferring": -1.0, + "defiant": -1.0, + "deficit": -2.0, + "degrade": -2.0, + "degraded": -2.0, + "degrades": -2.0, + "dehumanize": -2.0, + "dehumanized": -2.0, + "dehumanizes": -2.0, + "dehumanizing": -2.0, + "deject": -2.0, + "dejected": -2.0, + "dejecting": -2.0, + "dejects": -2.0, + "delay": -1.0, + "delayed": -1.0, + "delight": 3.0, + "delighted": 3.0, + "delighting": 3.0, + "delights": 3.0, + "demand": -1.0, + "demanded": -1.0, + "demanding": -1.0, + "demands": -1.0, + "demonstration": -1.0, + "demoralized": -2.0, + "denied": -2.0, + "denier": -2.0, + "deniers": -2.0, + "denies": -2.0, + "denounce": -2.0, + "denounces": -2.0, + "deny": -2.0, + "denying": -2.0, + "depressed": -2.0, + "depressing": -2.0, + "derail": -2.0, + "derailed": -2.0, + "derails": -2.0, + "deride": -2.0, + "derided": -2.0, + "derides": -2.0, + "deriding": -2.0, + "derision": -2.0, + "desirable": 2.0, + "desire": 1.0, + "desired": 2.0, + "desirous": 2.0, + "despair": -3.0, + "despairing": -3.0, + "despairs": -3.0, + "desperate": -3.0, + "desperately": -3.0, + "despondent": -3.0, + "destroy": -3.0, + "destroyed": -3.0, + "destroying": -3.0, + "destroys": -3.0, + "destruction": -3.0, + "destructive": -3.0, + "detached": -1.0, + "detain": -2.0, + "detained": -2.0, + "detention": -2.0, + "determined": 2.0, + "devastate": -2.0, + "devastated": -2.0, + "devastating": -2.0, + "devoted": 3.0, + "diamond": 1.0, + "dick": -4.0, + "dickhead": -4.0, + "die": -3.0, + "died": -3.0, + "difficult": -1.0, + "diffident": -2.0, + "dilemma": -1.0, + "dipshit": -3.0, + "dire": -3.0, + "direful": -3.0, + "dirt": -2.0, + "dirtier": -2.0, + "dirtiest": -2.0, + "dirty": -2.0, + "disabling": -1.0, + "disadvantage": -2.0, + "disadvantaged": -2.0, + "disappear": -1.0, + "disappeared": -1.0, + "disappears": -1.0, + "disappoint": -2.0, + "disappointed": -2.0, + "disappointing": -2.0, + "disappointment": -2.0, + "disappointments": -2.0, + "disappoints": -2.0, + "disaster": -2.0, + "disasters": -2.0, + "disastrous": -3.0, + "disbelieve": -2.0, + "discard": -1.0, + "discarded": -1.0, + "discarding": -1.0, + "discards": -1.0, + "disconsolate": -2.0, + "disconsolation": -2.0, + "discontented": -2.0, + "discord": -2.0, + "discounted": -1.0, + "discouraged": -2.0, + "discredited": -2.0, + "disdain": -2.0, + "disgrace": -2.0, + "disgraced": -2.0, + "disguise": -1.0, + "disguised": -1.0, + "disguises": -1.0, + "disguising": -1.0, + "disgust": -3.0, + "disgusted": -3.0, + "disgusting": -3.0, + "disheartened": -2.0, + "dishonest": -2.0, + "disillusioned": -2.0, + "disinclined": -2.0, + "disjointed": -2.0, + "dislike": -2.0, + "dismal": -2.0, + "dismayed": -2.0, + "disorder": -2.0, + "disorganized": -2.0, + "disoriented": -2.0, + "disparage": -2.0, + "disparaged": -2.0, + "disparages": -2.0, + "disparaging": -2.0, + "displeased": -2.0, + "dispute": -2.0, + "disputed": -2.0, + "disputes": -2.0, + "disputing": -2.0, + "disqualified": -2.0, + "disquiet": -2.0, + "disregard": -2.0, + "disregarded": -2.0, + "disregarding": -2.0, + "disregards": -2.0, + "disrespect": -2.0, + "disrespected": -2.0, + "disruption": -2.0, + "disruptions": -2.0, + "disruptive": -2.0, + "dissatisfied": -2.0, + "distort": -2.0, + "distorted": -2.0, + "distorting": -2.0, + "distorts": -2.0, + "distract": -2.0, + "distracted": -2.0, + "distraction": -2.0, + "distracts": -2.0, + "distress": -2.0, + "distressed": -2.0, + "distresses": -2.0, + "distressing": -2.0, + "distrust": -3.0, + "distrustful": -3.0, + "disturb": -2.0, + "disturbed": -2.0, + "disturbing": -2.0, + "disturbs": -2.0, + "dithering": -2.0, + "dizzy": -1.0, + "dodging": -2.0, + "dodgy": -2.0, + "dolorous": -2.0, + "doom": -2.0, + "doomed": -2.0, + "doubt": -1.0, + "doubted": -1.0, + "doubtful": -1.0, + "doubting": -1.0, + "doubts": -1.0, + "douche": -3.0, + "douchebag": -3.0, + "downcast": -2.0, + "downhearted": -2.0, + "downside": -2.0, + "drag": -1.0, + "dragged": -1.0, + "drags": -1.0, + "drained": -2.0, + "dread": -2.0, + "dreaded": -2.0, + "dreadful": -3.0, + "dreading": -2.0, + "dream": 1.0, + "dreams": 1.0, + "dreary": -2.0, + "droopy": -2.0, + "drop": -1.0, + "drown": -2.0, + "drowned": -2.0, + "drowns": -2.0, + "drunk": -2.0, + "dubious": -2.0, + "dud": -2.0, + "dull": -2.0, + "dumb": -3.0, + "dumbass": -3.0, + "dump": -1.0, + "dumped": -2.0, + "dumps": -1.0, + "dupe": -2.0, + "duped": -2.0, + "dysfunction": -2.0, + "eager": 2.0, + "earnest": 2.0, + "ease": 2.0, + "easy": 1.0, + "ecstatic": 4.0, + "eerie": -2.0, + "eery": -2.0, + "effective": 2.0, + "effectively": 2.0, + "elated": 3.0, + "elation": 3.0, + "elegant": 2.0, + "elegantly": 2.0, + "embarrass": -2.0, + "embarrassed": -2.0, + "embarrasses": -2.0, + "embarrassing": -2.0, + "embarrassment": -2.0, + "embittered": -2.0, + "embrace": 1.0, + "emergency": -2.0, + "empathetic": 2.0, + "emptiness": -1.0, + "empty": -1.0, + "enchanted": 2.0, + "encourage": 2.0, + "encouraged": 2.0, + "encouragement": 2.0, + "encourages": 2.0, + "endorse": 2.0, + "endorsed": 2.0, + "endorsement": 2.0, + "endorses": 2.0, + "enemies": -2.0, + "enemy": -2.0, + "energetic": 2.0, + "engage": 1.0, + "engages": 1.0, + "engrossed": 1.0, + "enjoy": 2.0, + "enjoying": 2.0, + "enjoys": 2.0, + "enlighten": 2.0, + "enlightened": 2.0, + "enlightening": 2.0, + "enlightens": 2.0, + "ennui": -2.0, + "enrage": -2.0, + "enraged": -2.0, + "enrages": -2.0, + "enraging": -2.0, + "enrapture": 3.0, + "enslave": -2.0, + "enslaved": -2.0, + "enslaves": -2.0, + "ensure": 1.0, + "ensuring": 1.0, + "enterprising": 1.0, + "entertaining": 2.0, + "enthral": 3.0, + "enthusiastic": 3.0, + "entitled": 1.0, + "entrusted": 2.0, + "envies": -1.0, + "envious": -2.0, + "envy": -1.0, + "envying": -1.0, + "erroneous": -2.0, + "error": -2.0, + "errors": -2.0, + "escape": -1.0, + "escapes": -1.0, + "escaping": -1.0, + "esteemed": 2.0, + "ethical": 2.0, + "euphoria": 3.0, + "euphoric": 4.0, + "eviction": -1.0, + "evil": -3.0, + "exaggerate": -2.0, + "exaggerated": -2.0, + "exaggerates": -2.0, + "exaggerating": -2.0, + "exasperated": 2.0, + "excellence": 3.0, + "excellent": 3.0, + "excite": 3.0, + "excited": 3.0, + "excitement": 3.0, + "exciting": 3.0, + "exclude": -1.0, + "excluded": -2.0, + "exclusion": -1.0, + "exclusive": 2.0, + "excuse": -1.0, + "exempt": -1.0, + "exhausted": -2.0, + "exhilarated": 3.0, + "exhilarates": 3.0, + "exhilarating": 3.0, + "exonerate": 2.0, + "exonerated": 2.0, + "exonerates": 2.0, + "exonerating": 2.0, + "expand": 1.0, + "expands": 1.0, + "expel": -2.0, + "expelled": -2.0, + "expelling": -2.0, + "expels": -2.0, + "exploit": -2.0, + "exploited": -2.0, + "exploiting": -2.0, + "exploits": -2.0, + "exploration": 1.0, + "explorations": 1.0, + "expose": -1.0, + "exposed": -1.0, + "exposes": -1.0, + "exposing": -1.0, + "extend": 1.0, + "extends": 1.0, + "exuberant": 4.0, + "exultant": 3.0, + "exultantly": 3.0, + "fabulous": 4.0, + "fad": -2.0, + "fag": -3.0, + "faggot": -3.0, + "faggots": -3.0, + "fail": -2.0, + "failed": -2.0, + "failing": -2.0, + "fails": -2.0, + "failure": -2.0, + "failures": -2.0, + "fainthearted": -2.0, + "fair": 2.0, + "faith": 1.0, + "faithful": 3.0, + "fake": -3.0, + "fakes": -3.0, + "faking": -3.0, + "fallen": -2.0, + "falling": -1.0, + "falsified": -3.0, + "falsify": -3.0, + "fame": 1.0, + "fan": 3.0, + "fantastic": 4.0, + "farce": -1.0, + "fascinate": 3.0, + "fascinated": 3.0, + "fascinates": 3.0, + "fascinating": 3.0, + "fascist": -2.0, + "fascists": -2.0, + "fatalities": -3.0, + "fatality": -3.0, + "fatigue": -2.0, + "fatigued": -2.0, + "fatigues": -2.0, + "fatiguing": -2.0, + "favor": 2.0, + "favored": 2.0, + "favorite": 2.0, + "favorited": 2.0, + "favorites": 2.0, + "favors": 2.0, + "fear": -2.0, + "fearful": -2.0, + "fearing": -2.0, + "fearless": 2.0, + "fearsome": -2.0, + "feeble": -2.0, + "feeling": 1.0, + "felonies": -3.0, + "felony": -3.0, + "fervent": 2.0, + "fervid": 2.0, + "festive": 2.0, + "fiasco": -3.0, + "fidgety": -2.0, + "fight": -1.0, + "fine": 2.0, + "fire": -2.0, + "fired": -2.0, + "firing": -2.0, + "fit": 1.0, + "fitness": 1.0, + "flagship": 2.0, + "flees": -1.0, + "flop": -2.0, + "flops": -2.0, + "flu": -2.0, + "flustered": -2.0, + "focused": 2.0, + "fond": 2.0, + "fondness": 2.0, + "fool": -2.0, + "foolish": -2.0, + "fools": -2.0, + "forced": -1.0, + "foreclosure": -2.0, + "foreclosures": -2.0, + "forget": -1.0, + "forgetful": -2.0, + "forgive": 1.0, + "forgiving": 1.0, + "forgotten": -1.0, + "fortunate": 2.0, + "frantic": -1.0, + "fraud": -4.0, + "frauds": -4.0, + "fraudster": -4.0, + "fraudsters": -4.0, + "fraudulence": -4.0, + "fraudulent": -4.0, + "free": 1.0, + "freedom": 2.0, + "frenzy": -3.0, + "fresh": 1.0, + "friendly": 2.0, + "fright": -2.0, + "frightened": -2.0, + "frightening": -3.0, + "frikin": -2.0, + "frisky": 2.0, + "frowning": -1.0, + "frustrate": -2.0, + "frustrated": -2.0, + "frustrates": -2.0, + "frustrating": -2.0, + "frustration": -2.0, + "ftw": 3.0, + "fuck": -4.0, + "fucked": -4.0, + "fucker": -4.0, + "fuckers": -4.0, + "fuckface": -4.0, + "fuckhead": -4.0, + "fucking": -4.0, + "fucktard": -4.0, + "fud": -3.0, + "fuked": -4.0, + "fuking": -4.0, + "fulfill": 2.0, + "fulfilled": 2.0, + "fulfills": 2.0, + "fuming": -2.0, + "fun": 4.0, + "funeral": -1.0, + "funerals": -1.0, + "funky": 2.0, + "funnier": 4.0, + "funny": 4.0, + "furious": -3.0, + "futile": 2.0, + "gag": -2.0, + "gagged": -2.0, + "gain": 2.0, + "gained": 2.0, + "gaining": 2.0, + "gains": 2.0, + "gallant": 3.0, + "gallantly": 3.0, + "gallantry": 3.0, + "generous": 2.0, + "genial": 3.0, + "ghost": -1.0, + "giddy": -2.0, + "gift": 2.0, + "glad": 3.0, + "glamorous": 3.0, + "glamourous": 3.0, + "glee": 3.0, + "gleeful": 3.0, + "gloom": -1.0, + "gloomy": -2.0, + "glorious": 2.0, + "glory": 2.0, + "glum": -2.0, + "god": 1.0, + "goddamn": -3.0, + "godsend": 4.0, + "good": 3.0, + "goodness": 3.0, + "grace": 1.0, + "gracious": 3.0, + "grand": 3.0, + "grant": 1.0, + "granted": 1.0, + "granting": 1.0, + "grants": 1.0, + "grateful": 3.0, + "gratification": 2.0, + "grave": -2.0, + "gray": -1.0, + "great": 3.0, + "greater": 3.0, + "greatest": 3.0, + "greed": -3.0, + "greedy": -2.0, + "greenwash": -3.0, + "greenwasher": -3.0, + "greenwashers": -3.0, + "greenwashing": -3.0, + "greet": 1.0, + "greeted": 1.0, + "greeting": 1.0, + "greetings": 2.0, + "greets": 1.0, + "grey": -1.0, + "grief": -2.0, + "grieved": -2.0, + "gross": -2.0, + "growing": 1.0, + "growth": 2.0, + "guarantee": 1.0, + "guilt": -3.0, + "guilty": -3.0, + "gullibility": -2.0, + "gullible": -2.0, + "gun": -1.0, + "ha": 2.0, + "hacked": -1.0, + "haha": 3.0, + "hahaha": 3.0, + "hahahah": 3.0, + "hail": 2.0, + "hailed": 2.0, + "hapless": -2.0, + "haplessness": -2.0, + "happiness": 3.0, + "happy": 3.0, + "hard": -1.0, + "hardier": 2.0, + "hardship": -2.0, + "hardy": 2.0, + "harm": -2.0, + "harmed": -2.0, + "harmful": -2.0, + "harming": -2.0, + "harms": -2.0, + "harried": -2.0, + "harsh": -2.0, + "harsher": -2.0, + "harshest": -2.0, + "hate": -3.0, + "hated": -3.0, + "haters": -3.0, + "hates": -3.0, + "hating": -3.0, + "haunt": -1.0, + "haunted": -2.0, + "haunting": 1.0, + "haunts": -1.0, + "havoc": -2.0, + "healthy": 2.0, + "heartbreaking": -3.0, + "heartbroken": -3.0, + "heartfelt": 3.0, + "heaven": 2.0, + "heavenly": 4.0, + "heavyhearted": -2.0, + "hell": -4.0, + "help": 2.0, + "helpful": 2.0, + "helping": 2.0, + "helpless": -2.0, + "helps": 2.0, + "hero": 2.0, + "heroes": 2.0, + "heroic": 3.0, + "hesitant": -2.0, + "hesitate": -2.0, + "hid": -1.0, + "hide": -1.0, + "hides": -1.0, + "hiding": -1.0, + "highlight": 2.0, + "hilarious": 2.0, + "hindrance": -2.0, + "hoax": -2.0, + "homesick": -2.0, + "honest": 2.0, + "honor": 2.0, + "honored": 2.0, + "honoring": 2.0, + "honour": 2.0, + "honoured": 2.0, + "honouring": 2.0, + "hooligan": -2.0, + "hooliganism": -2.0, + "hooligans": -2.0, + "hope": 2.0, + "hopeful": 2.0, + "hopefully": 2.0, + "hopeless": -2.0, + "hopelessness": -2.0, + "hopes": 2.0, + "hoping": 2.0, + "horrendous": -3.0, + "horrible": -3.0, + "horrific": -3.0, + "horrified": -3.0, + "hostile": -2.0, + "huckster": -2.0, + "hug": 2.0, + "huge": 1.0, + "hugs": 2.0, + "humerous": 3.0, + "humiliated": -3.0, + "humiliation": -3.0, + "humor": 2.0, + "humorous": 2.0, + "humour": 2.0, + "humourous": 2.0, + "hunger": -2.0, + "hurrah": 5.0, + "hurt": -2.0, + "hurting": -2.0, + "hurts": -2.0, + "hypocritical": -2.0, + "hysteria": -3.0, + "hysterical": -3.0, + "hysterics": -3.0, + "idiot": -3.0, + "idiotic": -3.0, + "ignorance": -2.0, + "ignorant": -2.0, + "ignore": -1.0, + "ignored": -2.0, + "ignores": -1.0, + "ill": -2.0, + "illegal": -3.0, + "illiteracy": -2.0, + "illness": -2.0, + "illnesses": -2.0, + "imbecile": -3.0, + "immobilized": -1.0, + "immortal": 2.0, + "immune": 1.0, + "impatient": -2.0, + "imperfect": -2.0, + "importance": 2.0, + "important": 2.0, + "impose": -1.0, + "imposed": -1.0, + "imposes": -1.0, + "imposing": -1.0, + "impotent": -2.0, + "impress": 3.0, + "impressed": 3.0, + "impresses": 3.0, + "impressive": 3.0, + "imprisoned": -2.0, + "improve": 2.0, + "improved": 2.0, + "improvement": 2.0, + "improves": 2.0, + "improving": 2.0, + "inability": -2.0, + "inaction": -2.0, + "inadequate": -2.0, + "incapable": -2.0, + "incapacitated": -2.0, + "incensed": -2.0, + "incompetence": -2.0, + "incompetent": -2.0, + "inconsiderate": -2.0, + "inconvenience": -2.0, + "inconvenient": -2.0, + "increase": 1.0, + "increased": 1.0, + "indecisive": -2.0, + "indestructible": 2.0, + "indifference": -2.0, + "indifferent": -2.0, + "indignant": -2.0, + "indignation": -2.0, + "indoctrinate": -2.0, + "indoctrinated": -2.0, + "indoctrinates": -2.0, + "indoctrinating": -2.0, + "ineffective": -2.0, + "ineffectively": -2.0, + "infatuated": 2.0, + "infatuation": 2.0, + "infected": -2.0, + "inferior": -2.0, + "inflamed": -2.0, + "influential": 2.0, + "infringement": -2.0, + "infuriate": -2.0, + "infuriated": -2.0, + "infuriates": -2.0, + "infuriating": -2.0, + "inhibit": -1.0, + "injured": -2.0, + "injury": -2.0, + "injustice": -2.0, + "innovate": 1.0, + "innovates": 1.0, + "innovation": 1.0, + "innovative": 2.0, + "inquisition": -2.0, + "inquisitive": 2.0, + "insane": -2.0, + "insanity": -2.0, + "insecure": -2.0, + "insensitive": -2.0, + "insensitivity": -2.0, + "insignificant": -2.0, + "insipid": -2.0, + "inspiration": 2.0, + "inspirational": 2.0, + "inspire": 2.0, + "inspired": 2.0, + "inspires": 2.0, + "inspiring": 3.0, + "insult": -2.0, + "insulted": -2.0, + "insulting": -2.0, + "insults": -2.0, + "intact": 2.0, + "integrity": 2.0, + "intelligent": 2.0, + "intense": 1.0, + "interest": 1.0, + "interested": 2.0, + "interesting": 2.0, + "interests": 1.0, + "interrogated": -2.0, + "interrupt": -2.0, + "interrupted": -2.0, + "interrupting": -2.0, + "interruption": -2.0, + "interrupts": -2.0, + "intimidate": -2.0, + "intimidated": -2.0, + "intimidates": -2.0, + "intimidating": -2.0, + "intimidation": -2.0, + "intricate": 2.0, + "intrigues": 1.0, + "invincible": 2.0, + "invite": 1.0, + "inviting": 1.0, + "invulnerable": 2.0, + "irate": -3.0, + "ironic": -1.0, + "irony": -1.0, + "irrational": -1.0, + "irresistible": 2.0, + "irresolute": -2.0, + "irresponsible": 2.0, + "irreversible": -1.0, + "irritate": -3.0, + "irritated": -3.0, + "irritating": -3.0, + "isolated": -1.0, + "itchy": -2.0, + "jackass": -4.0, + "jackasses": -4.0, + "jailed": -2.0, + "jaunty": 2.0, + "jealous": -2.0, + "jeopardy": -2.0, + "jerk": -3.0, + "jesus": 1.0, + "jewel": 1.0, + "jewels": 1.0, + "jocular": 2.0, + "join": 1.0, + "joke": 2.0, + "jokes": 2.0, + "jolly": 2.0, + "jovial": 2.0, + "joy": 3.0, + "joyful": 3.0, + "joyfully": 3.0, + "joyless": -2.0, + "joyous": 3.0, + "jubilant": 3.0, + "jumpy": -1.0, + "justice": 2.0, + "justifiably": 2.0, + "justified": 2.0, + "keen": 1.0, + "kill": -3.0, + "killed": -3.0, + "killing": -3.0, + "kills": -3.0, + "kind": 2.0, + "kinder": 2.0, + "kiss": 2.0, + "kudos": 3.0, + "lack": -2.0, + "lackadaisical": -2.0, + "lag": -1.0, + "lagged": -2.0, + "lagging": -2.0, + "lags": -2.0, + "lame": -2.0, + "landmark": 2.0, + "laugh": 1.0, + "laughed": 1.0, + "laughing": 1.0, + "laughs": 1.0, + "laughting": 1.0, + "launched": 1.0, + "lawl": 3.0, + "lawsuit": -2.0, + "lawsuits": -2.0, + "lazy": -1.0, + "leak": -1.0, + "leaked": -1.0, + "leave": -1.0, + "legal": 1.0, + "legally": 1.0, + "lenient": 1.0, + "lethargic": -2.0, + "lethargy": -2.0, + "liar": -3.0, + "liars": -3.0, + "libelous": -2.0, + "lied": -2.0, + "lifesaver": 4.0, + "lighthearted": 1.0, + "like": 2.0, + "liked": 2.0, + "likes": 2.0, + "limitation": -1.0, + "limited": -1.0, + "limits": -1.0, + "litigation": -1.0, + "litigious": -2.0, + "lively": 2.0, + "livid": -2.0, + "lmao": 4.0, + "lmfao": 4.0, + "loathe": -3.0, + "loathed": -3.0, + "loathes": -3.0, + "loathing": -3.0, + "lobby": -2.0, + "lobbying": -2.0, + "lol": 3.0, + "lonely": -2.0, + "lonesome": -2.0, + "longing": -1.0, + "loom": -1.0, + "loomed": -1.0, + "looming": -1.0, + "looms": -1.0, + "loose": -3.0, + "looses": -3.0, + "loser": -3.0, + "losing": -3.0, + "loss": -3.0, + "lost": -3.0, + "lovable": 3.0, + "love": 3.0, + "loved": 3.0, + "lovelies": 3.0, + "lovely": 3.0, + "loving": 2.0, + "lowest": -1.0, + "loyal": 3.0, + "loyalty": 3.0, + "luck": 3.0, + "luckily": 3.0, + "lucky": 3.0, + "lugubrious": -2.0, + "lunatic": -3.0, + "lunatics": -3.0, + "lurk": -1.0, + "lurking": -1.0, + "lurks": -1.0, + "mad": -3.0, + "maddening": -3.0, + "made-up": -1.0, + "madly": -3.0, + "madness": -3.0, + "mandatory": -1.0, + "manipulated": -1.0, + "manipulating": -1.0, + "manipulation": -1.0, + "marvel": 3.0, + "marvelous": 3.0, + "marvels": 3.0, + "masterpiece": 4.0, + "masterpieces": 4.0, + "matter": 1.0, + "matters": 1.0, + "mature": 2.0, + "meaningful": 2.0, + "meaningless": -2.0, + "medal": 3.0, + "mediocrity": -3.0, + "meditative": 1.0, + "melancholy": -2.0, + "menace": -2.0, + "menaced": -2.0, + "mercy": 2.0, + "merry": 3.0, + "mess": -2.0, + "messed": -2.0, + "methodical": 2.0, + "mindless": -2.0, + "miracle": 4.0, + "mirth": 3.0, + "mirthful": 3.0, + "mirthfully": 3.0, + "misbehave": -2.0, + "misbehaved": -2.0, + "misbehaves": -2.0, + "misbehaving": -2.0, + "mischief": -1.0, + "mischiefs": -1.0, + "miserable": -3.0, + "misery": -2.0, + "misgiving": -2.0, + "misinformation": -2.0, + "misinformed": -2.0, + "misinterpreted": -2.0, + "misleading": -3.0, + "misread": -1.0, + "misreporting": -2.0, + "misrepresentation": -2.0, + "miss": -2.0, + "missed": -2.0, + "missing": -2.0, + "mistake": -2.0, + "mistaken": -2.0, + "mistakes": -2.0, + "mistaking": -2.0, + "misunderstand": -2.0, + "misunderstanding": -2.0, + "misunderstands": -2.0, + "misunderstood": -2.0, + "moan": -2.0, + "moaned": -2.0, + "moaning": -2.0, + "moans": -2.0, + "mock": -2.0, + "mocked": -2.0, + "mocking": -2.0, + "mocks": -2.0, + "mongering": -2.0, + "monopolize": -2.0, + "monopolized": -2.0, + "monopolizes": -2.0, + "monopolizing": -2.0, + "moody": -1.0, + "mope": -1.0, + "moping": -1.0, + "moron": -3.0, + "motherfucker": -5.0, + "motherfucking": -5.0, + "motivate": 1.0, + "motivated": 2.0, + "motivating": 2.0, + "motivation": 1.0, + "mourn": -2.0, + "mourned": -2.0, + "mournful": -2.0, + "mourning": -2.0, + "mourns": -2.0, + "mumpish": -2.0, + "murder": -2.0, + "murderer": -2.0, + "murdering": -3.0, + "murderous": -3.0, + "murders": -2.0, + "myth": -1.0, + "n00b": -2.0, + "naive": -2.0, + "nasty": -3.0, + "natural": 1.0, + "naïve": -2.0, + "needy": -2.0, + "negative": -2.0, + "negativity": -2.0, + "neglect": -2.0, + "neglected": -2.0, + "neglecting": -2.0, + "neglects": -2.0, + "nerves": -1.0, + "nervous": -2.0, + "nervously": -2.0, + "nice": 3.0, + "nifty": 2.0, + "niggas": -5.0, + "nigger": -5.0, + "no": -1.0, + "noble": 2.0, + "noisy": -1.0, + "nonsense": -2.0, + "noob": -2.0, + "nosey": -2.0, + "notorious": -2.0, + "novel": 2.0, + "numb": -1.0, + "nuts": -3.0, + "obliterate": -2.0, + "obliterated": -2.0, + "obnoxious": -3.0, + "obscene": -2.0, + "obsessed": 2.0, + "obsolete": -2.0, + "obstacle": -2.0, + "obstacles": -2.0, + "obstinate": -2.0, + "odd": -2.0, + "offend": -2.0, + "offended": -2.0, + "offender": -2.0, + "offending": -2.0, + "offends": -2.0, + "offline": -1.0, + "oks": 2.0, + "ominous": 3.0, + "once-in-a-lifetime": 3.0, + "opportunities": 2.0, + "opportunity": 2.0, + "oppressed": -2.0, + "oppressive": -2.0, + "optimism": 2.0, + "optimistic": 2.0, + "optionless": -2.0, + "outcry": -2.0, + "outmaneuvered": -2.0, + "outrage": -3.0, + "outraged": -3.0, + "outreach": 2.0, + "outstanding": 5.0, + "overjoyed": 4.0, + "overload": -1.0, + "overlooked": -1.0, + "overreact": -2.0, + "overreacted": -2.0, + "overreaction": -2.0, + "overreacts": -2.0, + "oversell": -2.0, + "overselling": -2.0, + "oversells": -2.0, + "oversimplification": -2.0, + "oversimplified": -2.0, + "oversimplifies": -2.0, + "oversimplify": -2.0, + "overstatement": -2.0, + "overstatements": -2.0, + "overweight": -1.0, + "oxymoron": -1.0, + "pain": -2.0, + "pained": -2.0, + "panic": -3.0, + "panicked": -3.0, + "panics": -3.0, + "paradise": 3.0, + "paradox": -1.0, + "pardon": 2.0, + "pardoned": 2.0, + "pardoning": 2.0, + "pardons": 2.0, + "parley": -1.0, + "passionate": 2.0, + "passive": -1.0, + "passively": -1.0, + "pathetic": -2.0, + "pay": -1.0, + "peace": 2.0, + "peaceful": 2.0, + "peacefully": 2.0, + "penalty": -2.0, + "pensive": -1.0, + "perfect": 3.0, + "perfected": 2.0, + "perfectly": 3.0, + "perfects": 2.0, + "peril": -2.0, + "perjury": -3.0, + "perpetrator": -2.0, + "perpetrators": -2.0, + "perplexed": -2.0, + "persecute": -2.0, + "persecuted": -2.0, + "persecutes": -2.0, + "persecuting": -2.0, + "perturbed": -2.0, + "pesky": -2.0, + "pessimism": -2.0, + "pessimistic": -2.0, + "petrified": -2.0, + "phobic": -2.0, + "picturesque": 2.0, + "pileup": -1.0, + "pique": -2.0, + "piqued": -2.0, + "piss": -4.0, + "pissed": -4.0, + "pissing": -3.0, + "piteous": -2.0, + "pitied": -1.0, + "pity": -2.0, + "playful": 2.0, + "pleasant": 3.0, + "please": 1.0, + "pleased": 3.0, + "pleasure": 3.0, + "poised": -2.0, + "poison": -2.0, + "poisoned": -2.0, + "poisons": -2.0, + "pollute": -2.0, + "polluted": -2.0, + "polluter": -2.0, + "polluters": -2.0, + "pollutes": -2.0, + "poor": -2.0, + "poorer": -2.0, + "poorest": -2.0, + "popular": 3.0, + "positive": 2.0, + "positively": 2.0, + "possessive": -2.0, + "postpone": -1.0, + "postponed": -1.0, + "postpones": -1.0, + "postponing": -1.0, + "poverty": -1.0, + "powerful": 2.0, + "powerless": -2.0, + "praise": 3.0, + "praised": 3.0, + "praises": 3.0, + "praising": 3.0, + "pray": 1.0, + "praying": 1.0, + "prays": 1.0, + "prblm": -2.0, + "prblms": -2.0, + "prepared": 1.0, + "pressure": -1.0, + "pressured": -2.0, + "pretend": -1.0, + "pretending": -1.0, + "pretends": -1.0, + "pretty": 1.0, + "prevent": -1.0, + "prevented": -1.0, + "preventing": -1.0, + "prevents": -1.0, + "prick": -5.0, + "prison": -2.0, + "prisoner": -2.0, + "prisoners": -2.0, + "privileged": 2.0, + "proactive": 2.0, + "problem": -2.0, + "problems": -2.0, + "profiteer": -2.0, + "progress": 2.0, + "prominent": 2.0, + "promise": 1.0, + "promised": 1.0, + "promises": 1.0, + "promote": 1.0, + "promoted": 1.0, + "promotes": 1.0, + "promoting": 1.0, + "propaganda": -2.0, + "prosecute": -1.0, + "prosecuted": -2.0, + "prosecutes": -1.0, + "prosecution": -1.0, + "prospect": 1.0, + "prospects": 1.0, + "prosperous": 3.0, + "protect": 1.0, + "protected": 1.0, + "protects": 1.0, + "protest": -2.0, + "protesters": -2.0, + "protesting": -2.0, + "protests": -2.0, + "proud": 2.0, + "proudly": 2.0, + "provoke": -1.0, + "provoked": -1.0, + "provokes": -1.0, + "provoking": -1.0, + "pseudoscience": -3.0, + "punish": -2.0, + "punished": -2.0, + "punishes": -2.0, + "punitive": -2.0, + "pushy": -1.0, + "puzzled": -2.0, + "quaking": -2.0, + "questionable": -2.0, + "questioned": -1.0, + "questioning": -1.0, + "racism": -3.0, + "racist": -3.0, + "racists": -3.0, + "rage": -2.0, + "rageful": -2.0, + "rainy": -1.0, + "rant": -3.0, + "ranter": -3.0, + "ranters": -3.0, + "rants": -3.0, + "rape": -4.0, + "rapist": -4.0, + "rapture": 2.0, + "raptured": 2.0, + "raptures": 2.0, + "rapturous": 4.0, + "rash": -2.0, + "ratified": 2.0, + "reach": 1.0, + "reached": 1.0, + "reaches": 1.0, + "reaching": 1.0, + "reassure": 1.0, + "reassured": 1.0, + "reassures": 1.0, + "reassuring": 2.0, + "rebellion": -2.0, + "recession": -2.0, + "reckless": -2.0, + "recommend": 2.0, + "recommended": 2.0, + "recommends": 2.0, + "redeemed": 2.0, + "refuse": -2.0, + "refused": -2.0, + "refusing": -2.0, + "regret": -2.0, + "regretful": -2.0, + "regrets": -2.0, + "regretted": -2.0, + "regretting": -2.0, + "reject": -1.0, + "rejected": -1.0, + "rejecting": -1.0, + "rejects": -1.0, + "rejoice": 4.0, + "rejoiced": 4.0, + "rejoices": 4.0, + "rejoicing": 4.0, + "relaxed": 2.0, + "relentless": -1.0, + "reliant": 2.0, + "relieve": 1.0, + "relieved": 2.0, + "relieves": 1.0, + "relieving": 2.0, + "relishing": 2.0, + "remarkable": 2.0, + "remorse": -2.0, + "repulse": -1.0, + "repulsed": -2.0, + "rescue": 2.0, + "rescued": 2.0, + "rescues": 2.0, + "resentful": -2.0, + "resign": -1.0, + "resigned": -1.0, + "resigning": -1.0, + "resigns": -1.0, + "resolute": 2.0, + "resolve": 2.0, + "resolved": 2.0, + "resolves": 2.0, + "resolving": 2.0, + "respected": 2.0, + "responsible": 2.0, + "responsive": 2.0, + "restful": 2.0, + "restless": -2.0, + "restore": 1.0, + "restored": 1.0, + "restores": 1.0, + "restoring": 1.0, + "restrict": -2.0, + "restricted": -2.0, + "restricting": -2.0, + "restriction": -2.0, + "restricts": -2.0, + "retained": -1.0, + "retard": -2.0, + "retarded": -2.0, + "retreat": -1.0, + "revenge": -2.0, + "revengeful": -2.0, + "revered": 2.0, + "revive": 2.0, + "revives": 2.0, + "reward": 2.0, + "rewarded": 2.0, + "rewarding": 2.0, + "rewards": 2.0, + "rich": 2.0, + "ridiculous": -3.0, + "rig": -1.0, + "rigged": -1.0, + "rigorous": 3.0, + "rigorously": 3.0, + "riot": -2.0, + "riots": -2.0, + "risk": -2.0, + "risks": -2.0, + "rob": -2.0, + "robber": -2.0, + "robed": -2.0, + "robing": -2.0, + "robs": -2.0, + "robust": 2.0, + "rofl": 4.0, + "roflcopter": 4.0, + "roflmao": 4.0, + "romance": 2.0, + "rotfl": 4.0, + "rotflmfao": 4.0, + "rotflol": 4.0, + "ruin": -2.0, + "ruined": -2.0, + "ruining": -2.0, + "ruins": -2.0, + "sabotage": -2.0, + "sad": -2.0, + "sadden": -2.0, + "saddened": -2.0, + "sadly": -2.0, + "safe": 1.0, + "safely": 1.0, + "safety": 1.0, + "salient": 1.0, + "sappy": -1.0, + "sarcastic": -2.0, + "satisfied": 2.0, + "save": 2.0, + "saved": 2.0, + "scam": -2.0, + "scams": -2.0, + "scandal": -3.0, + "scandalous": -3.0, + "scandals": -3.0, + "scapegoat": -2.0, + "scapegoats": -2.0, + "scare": -2.0, + "scared": -2.0, + "scary": -2.0, + "sceptical": -2.0, + "scold": -2.0, + "scoop": 3.0, + "scorn": -2.0, + "scornful": -2.0, + "scream": -2.0, + "screamed": -2.0, + "screaming": -2.0, + "screams": -2.0, + "screwed": -2.0, + "scumbag": -4.0, + "secure": 2.0, + "secured": 2.0, + "secures": 2.0, + "sedition": -2.0, + "seditious": -2.0, + "seduced": -1.0, + "self-confident": 2.0, + "self-deluded": -2.0, + "selfish": -3.0, + "selfishness": -3.0, + "sentence": -2.0, + "sentenced": -2.0, + "sentences": -2.0, + "sentencing": -2.0, + "serene": 2.0, + "severe": -2.0, + "sexy": 3.0, + "shaky": -2.0, + "shame": -2.0, + "shamed": -2.0, + "shameful": -2.0, + "share": 1.0, + "shared": 1.0, + "shares": 1.0, + "shattered": -2.0, + "shit": -4.0, + "shithead": -4.0, + "shitty": -3.0, + "shock": -2.0, + "shocked": -2.0, + "shocking": -2.0, + "shocks": -2.0, + "shoot": -1.0, + "short-sighted": -2.0, + "short-sightedness": -2.0, + "shortage": -2.0, + "shortages": -2.0, + "shrew": -4.0, + "shy": -1.0, + "sick": -2.0, + "sigh": -2.0, + "significance": 1.0, + "significant": 1.0, + "silencing": -1.0, + "silly": -1.0, + "sincere": 2.0, + "sincerely": 2.0, + "sincerest": 2.0, + "sincerity": 2.0, + "sinful": -3.0, + "singleminded": -2.0, + "skeptic": -2.0, + "skeptical": -2.0, + "skepticism": -2.0, + "skeptics": -2.0, + "slam": -2.0, + "slash": -2.0, + "slashed": -2.0, + "slashes": -2.0, + "slashing": -2.0, + "slavery": -3.0, + "sleeplessness": -2.0, + "slick": 2.0, + "slicker": 2.0, + "slickest": 2.0, + "sluggish": -2.0, + "slut": -5.0, + "smart": 1.0, + "smarter": 2.0, + "smartest": 2.0, + "smear": -2.0, + "smile": 2.0, + "smiled": 2.0, + "smiles": 2.0, + "smiling": 2.0, + "smog": -2.0, + "sneaky": -1.0, + "snub": -2.0, + "snubbed": -2.0, + "snubbing": -2.0, + "snubs": -2.0, + "sobering": 1.0, + "solemn": -1.0, + "solid": 2.0, + "solidarity": 2.0, + "solution": 1.0, + "solutions": 1.0, + "solve": 1.0, + "solved": 1.0, + "solves": 1.0, + "solving": 1.0, + "somber": -2.0, + "son-of-a-bitch": -5.0, + "soothe": 3.0, + "soothed": 3.0, + "soothing": 3.0, + "sophisticated": 2.0, + "sore": -1.0, + "sorrow": -2.0, + "sorrowful": -2.0, + "sorry": -1.0, + "spam": -2.0, + "spammer": -3.0, + "spammers": -3.0, + "spamming": -2.0, + "spark": 1.0, + "sparkle": 3.0, + "sparkles": 3.0, + "sparkling": 3.0, + "speculative": -2.0, + "spirit": 1.0, + "spirited": 2.0, + "spiritless": -2.0, + "spiteful": -2.0, + "splendid": 3.0, + "sprightly": 2.0, + "squelched": -1.0, + "stab": -2.0, + "stabbed": -2.0, + "stable": 2.0, + "stabs": -2.0, + "stall": -2.0, + "stalled": -2.0, + "stalling": -2.0, + "stamina": 2.0, + "stampede": -2.0, + "startled": -2.0, + "starve": -2.0, + "starved": -2.0, + "starves": -2.0, + "starving": -2.0, + "steadfast": 2.0, + "steal": -2.0, + "steals": -2.0, + "stereotype": -2.0, + "stereotyped": -2.0, + "stifled": -1.0, + "stimulate": 1.0, + "stimulated": 1.0, + "stimulates": 1.0, + "stimulating": 2.0, + "stingy": -2.0, + "stolen": -2.0, + "stop": -1.0, + "stopped": -1.0, + "stopping": -1.0, + "stops": -1.0, + "stout": 2.0, + "straight": 1.0, + "strange": -1.0, + "strangely": -1.0, + "strangled": -2.0, + "strength": 2.0, + "strengthen": 2.0, + "strengthened": 2.0, + "strengthening": 2.0, + "strengthens": 2.0, + "stressed": -2.0, + "stressor": -2.0, + "stressors": -2.0, + "stricken": -2.0, + "strike": -1.0, + "strikers": -2.0, + "strikes": -1.0, + "strong": 2.0, + "stronger": 2.0, + "strongest": 2.0, + "struck": -1.0, + "struggle": -2.0, + "struggled": -2.0, + "struggles": -2.0, + "struggling": -2.0, + "stubborn": -2.0, + "stuck": -2.0, + "stunned": -2.0, + "stunning": 4.0, + "stupid": -2.0, + "stupidly": -2.0, + "suave": 2.0, + "substantial": 1.0, + "substantially": 1.0, + "subversive": -2.0, + "success": 2.0, + "successful": 3.0, + "suck": -3.0, + "sucks": -3.0, + "suffer": -2.0, + "suffering": -2.0, + "suffers": -2.0, + "suicidal": -2.0, + "suicide": -2.0, + "suing": -2.0, + "sulking": -2.0, + "sulky": -2.0, + "sullen": -2.0, + "sunshine": 2.0, + "super": 3.0, + "superb": 5.0, + "superior": 2.0, + "support": 2.0, + "supported": 2.0, + "supporter": 1.0, + "supporters": 1.0, + "supporting": 1.0, + "supportive": 2.0, + "supports": 2.0, + "survived": 2.0, + "surviving": 2.0, + "survivor": 2.0, + "suspect": -1.0, + "suspected": -1.0, + "suspecting": -1.0, + "suspects": -1.0, + "suspend": -1.0, + "suspended": -1.0, + "suspicious": -2.0, + "swear": -2.0, + "swearing": -2.0, + "swears": -2.0, + "sweet": 2.0, + "swift": 2.0, + "swiftly": 2.0, + "swindle": -3.0, + "swindles": -3.0, + "swindling": -3.0, + "sympathetic": 2.0, + "sympathy": 2.0, + "tard": -2.0, + "tears": -2.0, + "tender": 2.0, + "tense": -2.0, + "tension": -1.0, + "terrible": -3.0, + "terribly": -3.0, + "terrific": 4.0, + "terrified": -3.0, + "terror": -3.0, + "terrorize": -3.0, + "terrorized": -3.0, + "terrorizes": -3.0, + "thank": 2.0, + "thankful": 2.0, + "thanks": 2.0, + "thorny": -2.0, + "thoughtful": 2.0, + "thoughtless": -2.0, + "threat": -2.0, + "threaten": -2.0, + "threatened": -2.0, + "threatening": -2.0, + "threatens": -2.0, + "threats": -2.0, + "thrilled": 5.0, + "thwart": -2.0, + "thwarted": -2.0, + "thwarting": -2.0, + "thwarts": -2.0, + "timid": -2.0, + "timorous": -2.0, + "tired": -2.0, + "tits": -2.0, + "tolerant": 2.0, + "toothless": -2.0, + "top": 2.0, + "tops": 2.0, + "torn": -2.0, + "torture": -4.0, + "tortured": -4.0, + "tortures": -4.0, + "torturing": -4.0, + "totalitarian": -2.0, + "totalitarianism": -2.0, + "tout": -2.0, + "touted": -2.0, + "touting": -2.0, + "touts": -2.0, + "tragedy": -2.0, + "tragic": -2.0, + "tranquil": 2.0, + "trap": -1.0, + "trapped": -2.0, + "trauma": -3.0, + "traumatic": -3.0, + "travesty": -2.0, + "treason": -3.0, + "treasonous": -3.0, + "treasure": 2.0, + "treasures": 2.0, + "trembling": -2.0, + "tremulous": -2.0, + "tricked": -2.0, + "trickery": -2.0, + "triumph": 4.0, + "triumphant": 4.0, + "trouble": -2.0, + "troubled": -2.0, + "troubles": -2.0, + "true": 2.0, + "trust": 1.0, + "trusted": 2.0, + "tumor": -2.0, + "twat": -5.0, + "ugly": -3.0, + "unacceptable": -2.0, + "unappreciated": -2.0, + "unapproved": -2.0, + "unaware": -2.0, + "unbelievable": -1.0, + "unbelieving": -1.0, + "unbiased": 2.0, + "uncertain": -1.0, + "unclear": -1.0, + "uncomfortable": -2.0, + "unconcerned": -2.0, + "unconfirmed": -1.0, + "unconvinced": -1.0, + "uncredited": -1.0, + "undecided": -1.0, + "underestimate": -1.0, + "underestimated": -1.0, + "underestimates": -1.0, + "underestimating": -1.0, + "undermine": -2.0, + "undermined": -2.0, + "undermines": -2.0, + "undermining": -2.0, + "undeserving": -2.0, + "undesirable": -2.0, + "uneasy": -2.0, + "unemployment": -2.0, + "unequal": -1.0, + "unequaled": 2.0, + "unethical": -2.0, + "unfair": -2.0, + "unfocused": -2.0, + "unfulfilled": -2.0, + "unhappy": -2.0, + "unhealthy": -2.0, + "unified": 1.0, + "unimpressed": -2.0, + "unintelligent": -2.0, + "united": 1.0, + "unjust": -2.0, + "unlovable": -2.0, + "unloved": -2.0, + "unmatched": 1.0, + "unmotivated": -2.0, + "unprofessional": -2.0, + "unresearched": -2.0, + "unsatisfied": -2.0, + "unsecured": -2.0, + "unsettled": -1.0, + "unsophisticated": -2.0, + "unstable": -2.0, + "unstoppable": 2.0, + "unsupported": -2.0, + "unsure": -1.0, + "untarnished": 2.0, + "unwanted": -2.0, + "unworthy": -2.0, + "upset": -2.0, + "upsets": -2.0, + "upsetting": -2.0, + "uptight": -2.0, + "urgent": -1.0, + "useful": 2.0, + "usefulness": 2.0, + "useless": -2.0, + "uselessness": -2.0, + "vague": -2.0, + "validate": 1.0, + "validated": 1.0, + "validates": 1.0, + "validating": 1.0, + "verdict": -1.0, + "verdicts": -1.0, + "vested": 1.0, + "vexation": -2.0, + "vexing": -2.0, + "vibrant": 3.0, + "vicious": -2.0, + "victim": -3.0, + "victimize": -3.0, + "victimized": -3.0, + "victimizes": -3.0, + "victimizing": -3.0, + "victims": -3.0, + "vigilant": 3.0, + "vile": -3.0, + "vindicate": 2.0, + "vindicated": 2.0, + "vindicates": 2.0, + "vindicating": 2.0, + "violate": -2.0, + "violated": -2.0, + "violates": -2.0, + "violating": -2.0, + "violence": -3.0, + "violent": -3.0, + "virtuous": 2.0, + "virulent": -2.0, + "vision": 1.0, + "visionary": 3.0, + "visioning": 1.0, + "visions": 1.0, + "vitality": 3.0, + "vitamin": 1.0, + "vitriolic": -3.0, + "vivacious": 3.0, + "vociferous": -1.0, + "vulnerability": -2.0, + "vulnerable": -2.0, + "walkout": -2.0, + "walkouts": -2.0, + "wanker": -3.0, + "want": 1.0, + "war": -2.0, + "warfare": -2.0, + "warm": 1.0, + "warmth": 2.0, + "warn": -2.0, + "warned": -2.0, + "warning": -3.0, + "warnings": -3.0, + "warns": -2.0, + "waste": -1.0, + "wasted": -2.0, + "wasting": -2.0, + "wavering": -1.0, + "weak": -2.0, + "weakness": -2.0, + "wealth": 3.0, + "wealthy": 2.0, + "weary": -2.0, + "weep": -2.0, + "weeping": -2.0, + "weird": -2.0, + "welcome": 2.0, + "welcomed": 2.0, + "welcomes": 2.0, + "whimsical": 1.0, + "whitewash": -3.0, + "whore": -4.0, + "wicked": -2.0, + "widowed": -1.0, + "willingness": 2.0, + "win": 4.0, + "winner": 4.0, + "winning": 4.0, + "wins": 4.0, + "winwin": 3.0, + "wish": 1.0, + "wishes": 1.0, + "wishing": 1.0, + "withdrawal": -3.0, + "woebegone": -2.0, + "woeful": -3.0, + "won": 3.0, + "wonderful": 4.0, + "woo": 3.0, + "woohoo": 3.0, + "wooo": 4.0, + "woow": 4.0, + "worn": -1.0, + "worried": -3.0, + "worry": -3.0, + "worrying": -3.0, + "worse": -3.0, + "worsen": -3.0, + "worsened": -3.0, + "worsening": -3.0, + "worsens": -3.0, + "worshiped": 3.0, + "worst": -3.0, + "worth": 2.0, + "worthless": -2.0, + "worthy": 2.0, + "wow": 4.0, + "wowow": 4.0, + "wowww": 4.0, + "wrathful": -3.0, + "wreck": -2.0, + "wrong": -2.0, + "wronged": -2.0, + "wtf": -4.0, + "yeah": 1.0, + "yearning": 1.0, + "yeees": 2.0, + "yes": 1.0, + "youthful": 2.0, + "yucky": -2.0, + "yummy": 3.0, + "zealot": -2.0, + "zealots": -2.0, + "zealous": 2.0, +} diff --git a/checker.go b/checker.go new file mode 100644 index 0000000..03fcfb0 --- /dev/null +++ b/checker.go @@ -0,0 +1,108 @@ +package HumorChecker // "cirello.io/HumorChecker" + +import ( + "bufio" + "regexp" + "strings" +) + +type Score struct { + // Score is the sum of the sentiment points of the analyzed text. + // Negativity will render negative points only, and vice-versa. + Score float64 + + // Comparative establishes a ratio of sentiment per word + Comparative float64 + + // List of words for a given sentiment. + Words []string +} + +type FullScore struct { + // Score is the difference between positive and negative sentiment + // scores. + Score float64 + + // Comparative is the difference between positive and negative sentiment + // comparative scores. + Comparative float64 + + // Positive score object + Positive Score + + // Negative score object + Negative Score +} + +var lettersAndSpaceOnly = regexp.MustCompile(`[^a-zA-Z ]+`) + +// Negativity calculates the negative sentiment of a sentence +func Negativity(phrase string) Score { + var hits float64 + var words []string + + addPush := func(t string, score float64) { + hits -= score + words = append(words, t) + } + + scanner := bufio.NewScanner(strings.NewReader(strings.ToLower(lettersAndSpaceOnly.ReplaceAllString(phrase, " ")))) + scanner.Split(bufio.ScanWords) + + var count float64 + for scanner.Scan() { + count++ + word := scanner.Text() + if v, ok := afinn[word]; ok && v < 0 { + addPush(word, v) + } + } + + return Score{ + Score: hits, + Comparative: hits / count, + Words: words, + } +} + +// Positiviy calculates the positive sentiment of a sentence +func Positivity(phrase string) Score { + var hits float64 + var words []string + + addPush := func(t string, score float64) { + hits += score + words = append(words, t) + } + + scanner := bufio.NewScanner(strings.NewReader(strings.ToLower(lettersAndSpaceOnly.ReplaceAllString(phrase, " ")))) + scanner.Split(bufio.ScanWords) + + var count float64 + for scanner.Scan() { + count++ + word := scanner.Text() + if v, ok := afinn[word]; ok && v > 0 { + addPush(word, v) + } + } + + return Score{ + Score: hits, + Comparative: hits / count, + Words: words, + } +} + +// Analyze calculates overall sentiment +func Analyze(phrase string) FullScore { + pos := Positivity(phrase) + neg := Negativity(phrase) + + return FullScore{ + Score: pos.Score - neg.Score, + Comparative: pos.Comparative - neg.Comparative, + Positive: pos, + Negative: neg, + } +} diff --git a/checker_test.go b/checker_test.go new file mode 100644 index 0000000..e9e11fa --- /dev/null +++ b/checker_test.go @@ -0,0 +1,89 @@ +package HumorChecker + +import "testing" + +var negAndPosTests = []struct { + Function string + Type string + In string + Expected float64 +}{ + {"Negativity", "Score", "bastard", 5.0}, + {"Negativity", "Score", "scumbag", 4.0}, + {"Negativity", "Score", "evil", 3.0}, + {"Negativity", "Score", "ache", 2.0}, + {"Negativity", "Score", "anti", 1.0}, + + {"Negativity", "Comparative", "Hey scumbag", 2.0}, + {"Negativity", "Comparative", "I'll be here till 5", 0}, + + {"Negativity", "WordCount", "This is two anti evil words", 2.0}, + + {"Positivity", "Score", "superb", 5.0}, + {"Positivity", "Score", "amazing", 4.0}, + {"Positivity", "Score", "admire", 3.0}, + {"Positivity", "Score", "amaze", 2.0}, + {"Positivity", "Score", "cool", 1.0}, + + {"Positivity", "Comparative", "Hey amazing", 2.0}, + {"Positivity", "Comparative", "I'll be here till 5", 0.0}, + + {"Positivity", "WordCount", "This is two amazing cool words", 2.0}, +} + +func TestNegAndPos(t *testing.T) { + var f func(string) Score + for _, test := range negAndPosTests { + if test.Function == "Negativity" { + f = Negativity + } else if test.Function == "Positivity" { + f = Positivity + } else { + t.Fatal("Impossible humor type check") + } + + result := f(test.In) + if test.Type == "Score" { + if result.Score != test.Expected { + t.Errorf("got wrong score for %s in %s. got: %v. expected: %v", test.Function, test.In, result.Score, test.Expected) + } + } else if test.Type == "Comparative" { + if result.Comparative != test.Expected { + t.Errorf("got wrong comparative for %s in %s. got: %v. expected: %v", test.Function, test.In, result.Comparative, test.Expected) + } + } else if test.Type == "WordCount" { + if len(result.Words) != int(test.Expected) { + t.Errorf("got wrong comparative for %s in %s. got: %v. expected: %v", test.Function, test.In, len(result.Words), int(test.Expected)) + } + } else { + t.Fatal("Impossible test") + } + } +} + +func TestAnalyze(t *testing.T) { + // if v := Analyze("Hey Amazing Scumbag").Score; v != 0 { + // t.Errorf("error analyzing score of sentence. got: %v", v) + // } + // if v := Analyze("Cool beans").Score; v != 1 { + // t.Errorf("error analyzing score of sentence: should be positive for only positives. got: %v", v) + // } + // if v := Analyze("Hey scumbag").Score; v != -4 { + // t.Errorf("error analyzing score of sentence: should be negative for only negatives. got: %v", v) + // } + if v := Analyze("Fearless!").Score; v != 2 { + t.Errorf("error analyzing score of sentence: punctuation must be ignored (positive). got: %v", v) + } + if v := Analyze("Crash!").Score; v != -2 { + t.Errorf("error analyzing score of sentence: punctuation must be ignored (negative). got: %v", v) + } + if v := Analyze("#fearless").Score; v != 2 { + t.Errorf("error analyzing score of sentence: hashtags must be ignored (positive). got: %v", v) + } + if v := Analyze("#crash").Score; v != -2 { + t.Errorf("error analyzing score of sentence: hashtags must be ignored (negative). got: %v", v) + } + // if v := Analyze("An amazing anti").Comparative; v != 1 { + // t.Errorf("error analyzing comparative score of sentence. got: %v", v) + // } +}