sad_panda 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/README.md +11 -8
- data/lib/sad_panda.rb +11 -162
- data/lib/sad_panda/{emotions → bank}/emotions.csv +0 -0
- data/lib/sad_panda/bank/emotions.rb +18 -0
- data/lib/sad_panda/bank/polarities.rb +1466 -0
- data/lib/sad_panda/bank/stopwords.rb +43 -0
- data/lib/sad_panda/{emotions → bank}/subjectivity.csv +0 -0
- data/lib/sad_panda/emotion.rb +78 -0
- data/lib/sad_panda/helpers.rb +62 -0
- data/lib/sad_panda/polarity.rb +46 -0
- data/lib/sad_panda/version.rb +1 -1
- data/sad_panda.gemspec +12 -11
- data/spec/sad_panda/bank/emotions_spec.rb +45 -0
- data/spec/sad_panda/bank/polarities_spec.rb +13 -0
- data/spec/sad_panda/bank/stopwords_spec.rb +13 -0
- data/spec/sad_panda/emotion_spec.rb +175 -0
- data/spec/sad_panda/helpers_spec.rb +73 -0
- data/spec/sad_panda/polarity_spec.rb +87 -0
- data/spec/sad_panda_spec.rb +47 -375
- data/spec/spec_helper.rb +3 -3
- metadata +41 -45
- data/lib/sad_panda/emotions/emotion_bank.rb +0 -265
- data/lib/sad_panda/emotions/stopwords.rb +0 -42
- data/lib/sad_panda/emotions/term_polarities.rb +0 -1467
- data/spec/emotion_bank_spec.rb +0 -16
- data/spec/term_polarities_spec.rb +0 -16
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SadPanda::Helpers do
|
4
|
+
let(:helpers) { Class.new { extend SadPanda::Helpers } }
|
5
|
+
|
6
|
+
describe '#frequencies_for' do
|
7
|
+
it 'returns a hash with the frquency of each word' do
|
8
|
+
expect(helpers.frequencies_for(['foo', 'bar', 'quxx', 'foo'])).to eq({'foo' => 2, 'bar' => 1, 'quxx' => 1})
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#stems_for' do
|
13
|
+
it 'returns the stems of words' do
|
14
|
+
expect(helpers.stems_for(%w[programming amazes])).to eq %w[program amaz]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#remove_stopwords_in' do
|
19
|
+
it 'returns the array without stop words in it' do
|
20
|
+
expect(helpers.remove_stopwords_in(%w[this is a cool test])).to eq %w[cool test]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#words_in' do
|
25
|
+
it 'returns an array' do
|
26
|
+
expect(helpers.words_in('output array')).to be_a Array
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'returns an array of words from the text' do
|
30
|
+
expect(helpers.words_in('make this an array')).to eq %w[make this an array]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#emojies_in' do
|
35
|
+
it 'returns sad and happy emojies from the text as an array' do
|
36
|
+
expect(helpers.emojies_in('I am :] :). But :( as well.')).to eq [':(', ':)', ':]']
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#sanitize' do
|
41
|
+
it 'returns text with only english alphabets' do
|
42
|
+
expect(helpers.sanitize('I am :] :). But :( as well.')).to eq 'i am but as well'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#happy_emoticon?' do
|
47
|
+
context 'when words has a happy emoji' do
|
48
|
+
it 'returns true' do
|
49
|
+
expect(helpers.happy_emoticon?(['foo', ':)'])).to be true
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when words does not have a happy emoji' do
|
54
|
+
it 'returns false' do
|
55
|
+
expect(helpers.happy_emoticon?(['foo', 'bar'])).to be false
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#sad_emoticon?' do
|
61
|
+
context 'when words has a sad emoji' do
|
62
|
+
it 'returns true' do
|
63
|
+
expect(helpers.sad_emoticon?(['foo', ':('])).to be true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'when words does not have a sad emoji' do
|
68
|
+
it 'returns false' do
|
69
|
+
expect(helpers.sad_emoticon?(['foo', 'bar'])).to be false
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SadPanda::Polarity do
|
4
|
+
describe 'initialization' do
|
5
|
+
let(:object) { SadPanda::Polarity.new('Initialize this text in sad panda') }
|
6
|
+
|
7
|
+
it 'initializes polarities as an empty Array' do
|
8
|
+
expect(object.polarities).to eq []
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'initializes words in an Array' do
|
12
|
+
expect(object.words).to eq %w[initialize this text in sad panda]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#call' do
|
17
|
+
context 'when input contains no words with polarities' do
|
18
|
+
let(:object) { SadPanda::Polarity.new(' ') }
|
19
|
+
|
20
|
+
it 'returns 5.0' do
|
21
|
+
expect(object.call).to eq 5.0
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'adds no polarities of words to polarities Array' do
|
25
|
+
object.call
|
26
|
+
|
27
|
+
expect(object.polarities).to eq []
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when input contains a word with polarity' do
|
32
|
+
let(:object) { SadPanda::Polarity.new('I love cactuses!') }
|
33
|
+
|
34
|
+
it 'returns 10.0' do
|
35
|
+
expect(object.call).to eq 10.0
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'adds polarities of words to polarities Array' do
|
39
|
+
object.call
|
40
|
+
|
41
|
+
expect(object.polarities).to eq [10.0]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#score_emoticon_polarity' do
|
47
|
+
context 'when words has a sad emoji' do
|
48
|
+
let(:object) { SadPanda::Polarity.new('I am :(') }
|
49
|
+
|
50
|
+
it 'adds 2.0 to polarities' do
|
51
|
+
object.send(:score_emoticon_polarity)
|
52
|
+
|
53
|
+
expect(object.polarities.include?(2.0)).to be true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'when words has a happy emoji' do
|
58
|
+
let(:object) { SadPanda::Polarity.new('I am :)') }
|
59
|
+
|
60
|
+
it 'adds 8.0 to polarities' do
|
61
|
+
object.send(:score_emoticon_polarity)
|
62
|
+
|
63
|
+
expect(object.polarities.include?(8.0)).to be true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'when words has sad & happy emoji' do
|
68
|
+
let(:object) { SadPanda::Polarity.new('I am :) and :(') }
|
69
|
+
|
70
|
+
it 'adds 5.0 to polarities' do
|
71
|
+
object.send(:score_emoticon_polarity)
|
72
|
+
|
73
|
+
expect(object.polarities.include?(5.0)).to be true
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#score_polarities_for' do
|
79
|
+
let(:object) { SadPanda::Polarity.new('') }
|
80
|
+
|
81
|
+
it 'appends the right polarities of words to polarities' do
|
82
|
+
object.send(:score_polarities_for, { 'abandoned' => 1, 'educated' => 1 })
|
83
|
+
|
84
|
+
expect(object.polarities).to eq [2.5, 7.5]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/spec/sad_panda_spec.rb
CHANGED
@@ -1,423 +1,95 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
describe
|
5
|
-
|
6
|
-
|
7
|
-
let(:polarities) {TermPolarities.get_term_polarities}
|
8
|
-
let(:term_frequencies) {SadPanda.build_term_frequencies("My cactus collection makes me happy.")}
|
9
|
-
let(:emotion_score) { {} }
|
10
|
-
let(:polarity_scores) { [] }
|
11
|
-
let(:polarity_hash) { TermPolarities.get_term_polarities }
|
12
|
-
|
13
|
-
context "methods" do
|
14
|
-
describe "#happy_emoticon" do
|
15
|
-
|
16
|
-
context "when true" do
|
17
|
-
it "returns true" do
|
18
|
-
message = ":)"
|
19
|
-
expect(SadPanda.happy_emoticon(message)).to be_true
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "when false" do
|
24
|
-
it "returns true" do
|
25
|
-
message = "stuff"
|
26
|
-
expect(SadPanda.happy_emoticon(message)).to be_false
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
|
3
|
+
describe SadPanda do
|
4
|
+
describe '#emotion' do
|
5
|
+
it 'returns a Symbol result' do
|
6
|
+
expect(SadPanda.emotion('panda emotion respose')).to be_a Symbol
|
31
7
|
end
|
32
8
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
it "returns true" do
|
37
|
-
message = ":("
|
38
|
-
expect(SadPanda.sad_emoticon(message)).to be_true
|
39
|
-
end
|
9
|
+
context 'joy' do
|
10
|
+
it 'returns :joy for a happy text' do
|
11
|
+
expect(SadPanda.emotion('my lobster collection makes me happy!')).to eq :joy
|
40
12
|
end
|
41
13
|
|
42
|
-
|
43
|
-
|
44
|
-
message = "stuff"
|
45
|
-
expect(SadPanda.sad_emoticon(message)).to be_false
|
46
|
-
end
|
14
|
+
it 'returns :joy for a happy emoji' do
|
15
|
+
expect(SadPanda.emotion('my lobster collection makes me :)')).to eq :joy
|
47
16
|
end
|
48
|
-
|
49
17
|
end
|
50
18
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
message = "lobster hickory http://www.boston.com/business #Rails"
|
55
|
-
|
56
|
-
words = SadPanda.words_from_message_text(message)
|
57
|
-
|
58
|
-
expect(words).to eql(["lobster", "hickory", "rails"])
|
19
|
+
context 'anger' do
|
20
|
+
it 'returns :anger for an angry text' do
|
21
|
+
expect(SadPanda.emotion('Can the JS devils focus on one framewors than having 100')).to eq :anger
|
59
22
|
end
|
60
|
-
|
61
23
|
end
|
62
24
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
term_frequencies.each do |key, value|
|
68
|
-
SadPanda.set_emotions(emotions, emotion_score, key, value)
|
69
|
-
end
|
70
|
-
expect((emotion_score["joy"])).to eql(1)
|
25
|
+
context 'fear' do
|
26
|
+
it 'returns :fear for an fearedful text' do
|
27
|
+
expect(SadPanda.emotion('I am ril afraid of cats, homie')).to eq :fear
|
71
28
|
end
|
72
|
-
|
73
29
|
end
|
74
30
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
term_frequencies = {'sad' => 1}
|
79
|
-
term_frequencies.each do |key, value|
|
80
|
-
SadPanda.set_polarities(key, value, polarity_hash, polarity_scores)
|
81
|
-
end
|
82
|
-
expect(polarity_scores).to eql([0.0])
|
31
|
+
context 'disgust' do
|
32
|
+
it 'returns :disgust for an text with disgust' do
|
33
|
+
expect(SadPanda.emotion('I am disgusted')).to eq :disgust
|
83
34
|
end
|
84
|
-
|
85
35
|
end
|
86
36
|
|
87
|
-
|
88
|
-
it
|
89
|
-
|
90
|
-
emotions = {"joy" => "zorg" }
|
91
|
-
key,value = "zorg", 1
|
92
|
-
|
93
|
-
emotions.keys.each do |k|
|
94
|
-
SadPanda.store_emotions(emotions, emotion_score, k, key, value)
|
95
|
-
end
|
96
|
-
expect(emotion_score["joy"]).to eql(1)
|
37
|
+
context 'surprise' do
|
38
|
+
it 'returns :surprise for an surprising text' do
|
39
|
+
expect(SadPanda.emotion('ActionCable mystifies me')).to eq :surprise
|
97
40
|
end
|
98
|
-
|
99
41
|
end
|
100
42
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
it "adds a polarity to polarity_scores" do
|
106
|
-
term = "sad"
|
107
|
-
word = "sad"
|
108
|
-
SadPanda.store_polarities(term, word, polarity_hash, polarity_scores)
|
109
|
-
expect(polarity_scores).to eql([0.0])
|
110
|
-
end
|
111
|
-
|
43
|
+
context 'ambiguous' do
|
44
|
+
it 'returns :ambiguous for a neutral text' do
|
45
|
+
expect(SadPanda.emotion('Python is ok')).to eq :ambiguous
|
112
46
|
end
|
113
47
|
|
114
|
-
|
115
|
-
|
116
|
-
it "does not add a polarity to polarity_scores" do
|
117
|
-
term = "sad"
|
118
|
-
word = "cactus"
|
119
|
-
SadPanda.store_polarities(term, word, polarity_hash, polarity_scores)
|
120
|
-
expect(polarity_scores).to eql([])
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
|
-
describe "#create_term_frequencies" do
|
128
|
-
|
129
|
-
it "populates a word-stem frequency hash" do
|
130
|
-
words = ["yo", "stuff"]
|
131
|
-
term_frequencies = {}
|
132
|
-
word_stems = SadPanda.get_word_stems(words)
|
133
|
-
term_frequencies = SadPanda.create_term_frequencies(word_stems, term_frequencies)
|
134
|
-
|
135
|
-
expect(term_frequencies).to eql({"yo"=>1, "stuff"=>1})
|
48
|
+
it 'returns :ambiguous for an empty string' do
|
49
|
+
expect(SadPanda.emotion(' ')).to be :ambiguous
|
136
50
|
end
|
137
|
-
|
138
51
|
end
|
139
52
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
it "returns 'joy'" do
|
144
|
-
message = ":)"
|
145
|
-
output = SadPanda.check_emoticon_for_emotion(emotion_score, message)
|
146
|
-
expect(output).to eql("joy")
|
147
|
-
end
|
148
|
-
|
53
|
+
context 'sadness' do
|
54
|
+
it 'returns :sadness for a sad text' do
|
55
|
+
expect(SadPanda.emotion('Slow tests make me sad')).to eq :sadness
|
149
56
|
end
|
150
57
|
|
151
|
-
|
152
|
-
|
153
|
-
it "returns 'sadness'" do
|
154
|
-
message = ":("
|
155
|
-
output = SadPanda.check_emoticon_for_emotion(emotion_score, message)
|
156
|
-
expect(output).to eql("sadness")
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|
160
|
-
|
161
|
-
context "contains both a happy and a sad emoticon" do
|
162
|
-
|
163
|
-
it "returns 'ambiguous'" do
|
164
|
-
message = ":( :)"
|
165
|
-
output = SadPanda.check_emoticon_for_emotion(emotion_score, message)
|
166
|
-
expect(output).to eql("ambiguous")
|
167
|
-
end
|
168
|
-
|
169
|
-
end
|
170
|
-
|
171
|
-
context "contains no emoticons and emotion_score is not empty" do
|
172
|
-
|
173
|
-
it "returns joy" do
|
174
|
-
message = "no emoticons in hur"
|
175
|
-
emotion_score = {"joy" => 1}
|
176
|
-
output = SadPanda.check_emoticon_for_emotion(emotion_score, message)
|
177
|
-
expect(output).to eql("joy")
|
178
|
-
end
|
179
|
-
|
180
|
-
end
|
181
|
-
|
182
|
-
context "contains no emoticons and emotion_score is empty" do
|
183
|
-
|
184
|
-
it "returns joy" do
|
185
|
-
message = "no emoticons in hur"
|
186
|
-
output = SadPanda.check_emoticon_for_emotion(emotion_score, message)
|
187
|
-
expect(output).to eql("ambiguous")
|
188
|
-
end
|
189
|
-
|
58
|
+
it 'returns :anger for an sad emoji' do
|
59
|
+
expect(SadPanda.emotion('Angular, React & Vue. Now what? :(')).to eq :sadness
|
190
60
|
end
|
191
61
|
end
|
192
|
-
|
193
|
-
describe "#check_emoticon_for_polarity" do
|
194
|
-
context "contains happy emoticon" do
|
195
|
-
|
196
|
-
it "returns 8" do
|
197
|
-
message = ":)"
|
198
|
-
polarity_scores = [2.0,3.0]
|
199
|
-
output = SadPanda.check_emoticon_for_polarity(polarity_scores, message)
|
200
|
-
expect(output).to eql(8)
|
201
|
-
end
|
202
|
-
|
203
|
-
end
|
204
|
-
|
205
|
-
context "contains sad emoticon" do
|
206
|
-
|
207
|
-
it "returns 2" do
|
208
|
-
message = ":("
|
209
|
-
polarity_scores = [2.0,3.0]
|
210
|
-
output = SadPanda.check_emoticon_for_polarity(polarity_scores, message)
|
211
|
-
expect(output).to eql(2)
|
212
|
-
end
|
213
|
-
|
214
|
-
end
|
215
|
-
|
216
|
-
context "contains both a happy and a sad emoticon" do
|
217
|
-
|
218
|
-
it "returns 5" do
|
219
|
-
message = ":( :)"
|
220
|
-
polarity_scores = [2.0,3.0]
|
221
|
-
output = SadPanda.check_emoticon_for_polarity(polarity_scores, message)
|
222
|
-
expect(output).to eql(5)
|
223
|
-
end
|
224
|
-
|
225
|
-
end
|
226
|
-
|
227
|
-
|
228
|
-
context "contains no emoticons and polarity_scores is empty" do
|
229
|
-
|
230
|
-
it "returns joy" do
|
231
|
-
message = "no emoticons in hur"
|
232
|
-
polarity_scores = []
|
233
|
-
output = SadPanda.check_emoticon_for_polarity(polarity_scores, message)
|
234
|
-
expect(output).to eql(5)
|
235
|
-
end
|
236
|
-
|
237
|
-
end
|
238
|
-
|
239
|
-
context "contains no emoticons and emotion_score is not empty" do
|
240
|
-
|
241
|
-
it "returns joy" do
|
242
|
-
message = "no emoticons in hur"
|
243
|
-
polarity_scores = [8.0]
|
244
|
-
output = SadPanda.check_emoticon_for_polarity(polarity_scores, message)
|
245
|
-
expect(output).to eql(8.0)
|
246
|
-
end
|
247
|
-
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
end
|
252
|
-
|
253
|
-
describe "when 'build_term_frequencies' method is called" do
|
254
|
-
|
255
|
-
context "when status_message is an empty string" do
|
256
|
-
it "returns an empty hash" do
|
257
|
-
empty_message = " "
|
258
|
-
expect(SadPanda.build_term_frequencies(empty_message)).to be_empty
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
context "when input is a non-recogizable word" do
|
263
|
-
it "returns a empty hash with key == zorg and and value == 1" do
|
264
|
-
word = "zorg"
|
265
|
-
expect(SadPanda.build_term_frequencies(word)).to eql({"zorg" => 1})
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
context "when input includes recognizable words" do
|
270
|
-
it "returns a non-empty hash" do
|
271
|
-
hash = SadPanda.build_term_frequencies("I am happy")
|
272
|
-
expect(hash).to_not be_empty
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
62
|
end
|
277
63
|
|
278
|
-
describe
|
279
|
-
|
280
|
-
message = "this is a message!"
|
281
|
-
output = SadPanda.get_emotion_score(message, emotions,term_frequencies)
|
282
|
-
expect(output.class).to eql(String)
|
283
|
-
end
|
284
|
-
end
|
64
|
+
describe '#polarity' do
|
65
|
+
let(:polarity) { SadPanda.polarity('I love cactuses!') }
|
285
66
|
|
286
|
-
|
287
|
-
|
288
|
-
message = "this is another message!"
|
289
|
-
output = SadPanda.get_polarity_score(message, polarities, term_frequencies)
|
290
|
-
expect(output.class).to eql(Fixnum)
|
67
|
+
it 'returns a Float value polarity' do
|
68
|
+
expect(polarity).to be_a Float
|
291
69
|
end
|
292
|
-
end
|
293
|
-
|
294
70
|
|
295
|
-
|
296
|
-
|
297
|
-
it "returns a fixnum" do
|
298
|
-
expect(SadPanda.polarity("My cactus collection makes me happy.").class).to eql(Fixnum)
|
71
|
+
it 'returns 10.0' do
|
72
|
+
expect(polarity).to eq 10.0
|
299
73
|
end
|
300
74
|
|
301
|
-
|
302
|
-
|
303
|
-
status_message = "my lobster collection makes me happy"
|
304
|
-
expect(SadPanda.emotion(status_message)).to eql("joy")
|
305
|
-
end
|
75
|
+
it 'returns 8.0 for happy emoji' do
|
76
|
+
expect(SadPanda.polarity(':)')).to eq 8.0
|
306
77
|
end
|
307
78
|
|
308
|
-
|
309
|
-
|
310
|
-
status_message = "sad"
|
311
|
-
expect(SadPanda.emotion(status_message)).to eql("sadness")
|
312
|
-
end
|
79
|
+
it 'returns 8.0 for sad emoji' do
|
80
|
+
expect(SadPanda.polarity(':(')).to eq 2.0
|
313
81
|
end
|
314
82
|
|
315
|
-
|
316
|
-
|
317
|
-
status_message = "angry"
|
318
|
-
expect(SadPanda.emotion(status_message)).to eql('anger')
|
319
|
-
end
|
83
|
+
it 'returns 5.0 for happy & sademoji' do
|
84
|
+
expect(SadPanda.polarity(':) :(')).to eq 5.0
|
320
85
|
end
|
321
86
|
|
322
|
-
|
323
|
-
|
324
|
-
status_message = "I am ril afraid of cats, homie"
|
325
|
-
expect(SadPanda.emotion(status_message)).to eql("fear")
|
326
|
-
end
|
327
|
-
end
|
328
|
-
|
329
|
-
context "when status == 'I am disgusted' " do
|
330
|
-
it "emotion == 'disgust'" do
|
331
|
-
status_message = "I am disgusted"
|
332
|
-
expect(SadPanda.emotion(status_message)).to eql('disgust')
|
333
|
-
end
|
87
|
+
it 'returns 5.0 for empty string' do
|
88
|
+
expect(SadPanda.polarity(' ')).to eq 5.0
|
334
89
|
end
|
335
90
|
|
336
|
-
|
337
|
-
|
338
|
-
status_message = "I am so surprised"
|
339
|
-
expect(SadPanda.emotion(status_message)).to eql('surprise')
|
340
|
-
end
|
341
|
-
end
|
342
|
-
|
343
|
-
context "when status_message == 'blarg' " do
|
344
|
-
it "emotion == 'ambiguous' " do
|
345
|
-
status_message = "blarg"
|
346
|
-
expect(SadPanda.emotion(status_message)).to eql('ambiguous')
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
|
-
context "when status_message == ' ' " do
|
351
|
-
it "emotion is 'ambiguous'" do
|
352
|
-
status_message = " "
|
353
|
-
expect(SadPanda.emotion(status_message)).to eql('ambiguous')
|
354
|
-
end
|
355
|
-
end
|
356
|
-
|
357
|
-
end
|
358
|
-
|
359
|
-
describe "when emotion method is called" do
|
360
|
-
|
361
|
-
it "returns a string" do
|
362
|
-
status_message="joy"
|
363
|
-
expect(SadPanda.emotion(status_message).class).to eql(String)
|
364
|
-
end
|
365
|
-
|
366
|
-
context "when status_message == 'I am happy' " do
|
367
|
-
it "polarity is greater than zero" do
|
368
|
-
status_message = "I am happy"
|
369
|
-
expect(SadPanda.polarity(status_message)).to be > 0
|
370
|
-
end
|
371
|
-
end
|
372
|
-
|
373
|
-
|
374
|
-
context "when status_message == 'sad' " do
|
375
|
-
it "polarity is less than zero" do
|
376
|
-
status_message = "sad"
|
377
|
-
expect(SadPanda.polarity(status_message)).to be < 5
|
378
|
-
end
|
379
|
-
end
|
380
|
-
|
381
|
-
context "when status_message == 'anger' " do
|
382
|
-
it "polarity is zero" do
|
383
|
-
status_message = "anger"
|
384
|
-
expect(SadPanda.polarity(status_message)).to be < 5
|
385
|
-
end
|
386
|
-
end
|
387
|
-
|
388
|
-
context "when status_message == 'I am terrified' " do
|
389
|
-
it "polarity is zero" do
|
390
|
-
status_message = "I am fearful"
|
391
|
-
expect(SadPanda.polarity(status_message)).to be < 5
|
392
|
-
end
|
393
|
-
end
|
394
|
-
|
395
|
-
context "when status == 'I am disgusted' " do
|
396
|
-
it "has a non-zero polarity value" do
|
397
|
-
status_message = "I am disgusted"
|
398
|
-
expect(SadPanda.polarity(status_message)).to be < 5
|
399
|
-
end
|
400
|
-
end
|
401
|
-
|
402
|
-
context "when status == 'This is surprising'" do
|
403
|
-
it "has a neutral polarity value" do
|
404
|
-
status_message = "This is surprising"
|
405
|
-
expect(SadPanda.polarity(status_message)).to eql(5)
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
context "when status_message == 'blarg' " do
|
410
|
-
it "polarity is zero" do
|
411
|
-
status_message = "blarg"
|
412
|
-
expect(SadPanda.polarity(status_message)).to eql(5)
|
413
|
-
end
|
414
|
-
end
|
415
|
-
|
416
|
-
context "when status_message == ' ' " do
|
417
|
-
it "polarity is zero" do
|
418
|
-
status_message = " "
|
419
|
-
expect(SadPanda.polarity(status_message)).to eql(5)
|
420
|
-
end
|
91
|
+
it 'returns 5.0 for a neutral' do
|
92
|
+
expect(SadPanda.polarity('This is surprising')).to eq 5.0
|
421
93
|
end
|
422
94
|
end
|
423
95
|
end
|