emotidragon 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .rvmrc
2
+ .rspec
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ emotidragon (1.0.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.1.3)
10
+ rspec (2.12.0)
11
+ rspec-core (~> 2.12.0)
12
+ rspec-expectations (~> 2.12.0)
13
+ rspec-mocks (~> 2.12.0)
14
+ rspec-core (2.12.2)
15
+ rspec-expectations (2.12.1)
16
+ diff-lcs (~> 1.1.3)
17
+ rspec-mocks (2.12.2)
18
+
19
+ PLATFORMS
20
+ ruby
21
+
22
+ DEPENDENCIES
23
+ emotidragon!
24
+ rspec
data/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # Emotidragon: Emoticons! ROAR!
2
+
3
+ Emotidragon acts on String objects to help ruby devs work with emoticons, what can you do:
4
+
5
+ * get an array of all emoticons
6
+ * get an array of just positive/negative emoticons
7
+ * get sentiment of the text based on emoticons
8
+ * determine if string contains an emoticon
9
+ * determine if string contains just positive/negative emoticon
10
+ * get number of emoticons
11
+ * get number of positive/negative emoitcons
12
+ * get sentiment of text based on sentiment of emoticons
13
+ * get an informative hash of sentiment, number of positive emoticons, number of negative emoticons,and difference between the number of emoticons
14
+
15
+ ## I always wanted to ride a dragon myself, so I decided to do this for a year in my imagination.
16
+
17
+ Use RubyGems to install emotidragon
18
+
19
+ $ gem install emotidragon
20
+
21
+ ## What can I do? Remember, emotidragon gets included into String class, so you can call methods on an instance of String
22
+
23
+ ## Method List
24
+ ### emoticons - get array of all emoticons
25
+ "I love science :). I hate nickelback :(".emoticions
26
+ -> [":)", ":("]
27
+
28
+ ### positive_emoticons - get array of positive emoticons
29
+ "I love science :). I hate nickelback :(".positive_emoticions
30
+ -> [":)"]
31
+
32
+ ### negative_emoticons - get array of negative emoticons
33
+ "I love science :). I hate nickelback :(".positive_emoticions
34
+ -> [":("]
35
+
36
+ ### emoticon? - determine if string contains an emoticon
37
+ "i love science :). i hate nickelback :(".emoticion?
38
+ -> true
39
+
40
+ ### positive_emoticon? - determine if string contains positive emoticon
41
+ "I love science :)".positive_emoticion?
42
+ -> true
43
+
44
+ "I hate nickelback :(".positive_emoticion?
45
+ -> false
46
+
47
+ ### negative_emoticon? - determine if string contains negative emoticon
48
+ "I hate nickelback :(".negative_emoticion?
49
+ -> true
50
+
51
+ "I love science :)".negative_emoticion?
52
+ -> false
53
+
54
+ ### number_of_emoticon - get total number of emoticonss
55
+ "i love science :). i hate nickelback :(".number_of_emoticons
56
+ -> 2
57
+
58
+ ### positive_count - get number of positive emoticons
59
+ "i love science :). i hate nickelback :(".positive_count
60
+ -> 1
61
+
62
+ ### negative_count - get number of negative emoticons
63
+ "i love science :). i hate nickelback :(".negative_count
64
+ -> 1
65
+
66
+ ### text_sentiment - get sentiment of text
67
+ "I love science :). I hate nickelback :(".text_sentiment
68
+ -> "neutral
69
+
70
+ "I love science :)".text_sentiment
71
+ -> "positive"
72
+
73
+ "I hate nickelback :(".text_sentiment
74
+ -> "negative"
75
+
76
+ ### sentiment_info - get a hash of information about the text (sentiment, # of positive emoticons, # of negative emoticons, difference)
77
+ "I love science :). I hate nickelback :(".sentiment_info
78
+ -> { :sentiment => "neutral", :positive_count => 1, :negative_count => 1, :difference => 0 }
79
+
80
+ "I love science :)".sentiment_info
81
+ -> { :sentiment => "neutral", :positive_count => 1, :negative_count => 0, :difference => 1 }
82
+
83
+ "I hate nickelback :(".sentiment_info
84
+ -> { :sentiment => "neutral", :positive_count => 0, :negative_count => 1, :difference => 1 }
85
+
86
+ ### Dependencies
87
+
88
+ Just rspec, for science and testing!
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "emotidragon/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'emotidragon'
7
+ s.version = Emotidragon::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Chris Nixon"]
10
+ s.email = ['chris@liamneesonsarm.com']
11
+ s.homepage = ""
12
+ s.summary = %q{Emoticons! ROAR!}
13
+ s.description = %q{A simple gem to collect an array of, get sentiment about a string based on, determine if a string contains...emoticons}
14
+
15
+ s.add_development_dependency "rspec"
16
+
17
+ s.rubyforge_project = "emotidragon"
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+ end
@@ -0,0 +1,84 @@
1
+ module Emotidragon #http://en.wikipedia.org/wiki/List_of_emoticons
2
+ POSITIVE_EMOTICONS = /\|?>?[:*;Xx8=]-?o?\^?[DPpb3)}\]>]\)?/
3
+ NEGATIVE_EMOTICONS = /([:><].?-?[@><cC(\[{\|]\|?|[D][:8;=X]<?|v.v)/
4
+
5
+ #gets an array of all matching emoticons in the text
6
+ def emoticons
7
+ (positive_emoticons + negative_emoticons)
8
+ end
9
+
10
+ #gets an array of the matching positive emoticons in the text
11
+ def positive_emoticons
12
+ self.scan(POSITIVE_EMOTICONS).flatten
13
+ end
14
+
15
+ #gets an array of the matching negative emoticons in the text
16
+ def negative_emoticons
17
+ self.scan(NEGATIVE_EMOTICONS).flatten
18
+ end
19
+
20
+ #contains any emoticon?
21
+ def emoticon?
22
+ (positive_emoticon? || negative_emoticon?)
23
+ end
24
+
25
+ #checks if the text has a positive emoticon
26
+ def positive_emoticon?
27
+ self =~ POSITIVE_EMOTICONS
28
+ end
29
+
30
+ #checks if the text has a negative emoticon
31
+ def negative_emoticon?
32
+ self =~ NEGATIVE_EMOTICONS
33
+ end
34
+
35
+ #get total number of emoticons
36
+ def number_of_emoticons
37
+ positive_count + negative_count
38
+ end
39
+
40
+ #number of positive emoticons
41
+ def positive_count
42
+ positive_emoticons.count
43
+ end
44
+
45
+ #number of negative emoticons
46
+ def negative_count
47
+ negative_emoticons.count
48
+ end
49
+
50
+ #sentiment based on emoticons
51
+ def text_sentiment
52
+ count = positive_emoticons.count - negative_emoticons.count
53
+ if count > 0
54
+ "positive"
55
+ elsif count < 0
56
+ "negative"
57
+ else
58
+ "neutral"
59
+ end
60
+ end
61
+
62
+ #gets more info regarding the sentiment of the text
63
+ def sentiment_info
64
+ pos_count, neg_count = positive_count, negative_count
65
+ count = pos_count - neg_count
66
+ if count > 0
67
+ Emotidragon.score_hash("positive", pos_count, neg_count, count)
68
+ elsif count < 0
69
+ Emotidragon.score_hash("negative", pos_count, neg_count, count)
70
+ else
71
+ Emotidragon.score_hash("neutral", pos_count, neg_count, count)
72
+ end
73
+ end
74
+
75
+ #include Emotidragon into String class
76
+ String.send(:include, Emotidragon)
77
+
78
+ private
79
+
80
+ #hash returned that contains information regarding text
81
+ def self.score_hash(sentiment, pos_count, neg_count, count)
82
+ { sentiment: sentiment, positive_count: pos_count, negative_count: neg_count, difference: count.abs }
83
+ end
84
+ end
@@ -0,0 +1,3 @@
1
+ module Emotidragon
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,147 @@
1
+ require 'spec_helper'
2
+
3
+ describe Emotidragon do
4
+ let(:positive_string) { 'This is a positive :) string' }
5
+ let(:negative_string) { 'This is a negative :( string' }
6
+ let(:neutral_string) { 'This is a neutral string' }
7
+ let(:emoticon_string) { 'This contains :) and :( emoticons. :o) :*(' }
8
+
9
+ describe '#emoticons' do
10
+ context 'emoticons present' do
11
+ it('returns all positive and negative emoticons') { emoticon_string.emoticons.should =~ [':)', ':(', ':o)', ':*('] }
12
+ end
13
+ context 'no emoticons' do
14
+ it('returns empty array') { neutral_string.emoticons.should == [] }
15
+ end
16
+ end
17
+
18
+ describe '#positive_emoticons' do
19
+ context 'positive emoticons' do
20
+ it('returns all positive') { emoticon_string.positive_emoticons.should =~ [':)', ':o)'] }
21
+ end
22
+ context 'no positive emoticons, just negative' do
23
+ it('should not return any negative') { emoticon_string.positive_emoticons.should_not == [':(', ':*('] }
24
+ end
25
+ context 'no emoticons' do
26
+ it('returns empty array') { neutral_string.positive_emoticons.should == [] }
27
+ end
28
+ end
29
+
30
+ describe '#negative_emoticons' do
31
+ context 'negative emoticons' do
32
+ it('returns all negative') { emoticon_string.negative_emoticons.should =~ [':(', ':*('] }
33
+ end
34
+ context 'no negative emoticons, just positive' do
35
+ it('should not return any positive') { emoticon_string.negative_emoticons.should_not == [':)', ':o)'] }
36
+ end
37
+ context 'no emoticons' do
38
+ it('returns empty array') { neutral_string.negative_emoticons.should == [] }
39
+ end
40
+ end
41
+
42
+ describe '#emoticon?' do
43
+ context 'both' do
44
+ it('returns true') { emoticon_string.emoticon?.should be_true }
45
+ end
46
+ context 'just positive' do
47
+ it('returns true') { positive_string.emoticon?.should be_true }
48
+ end
49
+ context 'just negative' do
50
+ it('returns true') { negative_string.emoticon?.should be_true }
51
+ end
52
+ context 'neither' do
53
+ it('returns false') { neutral_string.emoticon?.should be_false }
54
+ end
55
+ end
56
+
57
+ describe '#positive_emoticon?' do
58
+ context 'text contains a positive emoticon' do
59
+ it('returns true') { positive_string.positive_emoticon?.should be_true }
60
+ end
61
+ context 'text does not contain a positive emoticon' do
62
+ it('returns true') { negative_string.positive_emoticon?.should be_false }
63
+ end
64
+ context 'neither' do
65
+ it('returns false') { neutral_string.positive_emoticon?.should be_false }
66
+ end
67
+ end
68
+
69
+ describe '#negative_emoticon?' do
70
+ context 'text contains a negative emoticon' do
71
+ it('returns true') { negative_string.negative_emoticon?.should be_true }
72
+ end
73
+ context 'text does not contain a negative emoticon' do
74
+ it('returns true') { positive_string.negative_emoticon?.should be_false }
75
+ end
76
+ context 'neither' do
77
+ it('returns false') { neutral_string.negative_emoticon?.should be_false }
78
+ end
79
+ end
80
+
81
+ describe '#number_of_emoticons' do
82
+ it('returns the count') { emoticon_string.number_of_emoticons.should == 4 }
83
+ it('returns the count') { positive_string.number_of_emoticons.should == 1 }
84
+ it('returns the count') { negative_string.number_of_emoticons.should == 1 }
85
+ it('returns the count') { neutral_string.number_of_emoticons.should == 0 }
86
+ end
87
+
88
+ describe '#positive_count' do
89
+ context 'text contains positive emoticon' do
90
+ it('returns the count') { positive_string.positive_count.should == 1 }
91
+ it('returns the count') { emoticon_string.positive_count.should == 2 }
92
+ end
93
+ context 'text does not contain a positive emoticon' do
94
+ it('returns the count') { neutral_string.positive_count.should == 0 }
95
+ end
96
+ end
97
+
98
+ describe '#negative_count' do
99
+ context 'text contains positive emoticon' do
100
+ it('returns the count') { negative_string.negative_count.should == 1 }
101
+ it('returns the count') { emoticon_string.negative_count.should == 2 }
102
+ end
103
+ context 'text does not contain a positive emoticon' do
104
+ it('returns the count') { neutral_string.negative_count.should == 0 }
105
+ end
106
+ end
107
+
108
+ describe '#text_sentiment' do
109
+ context 'positive' do
110
+ it('returns "positive"') { positive_string.text_sentiment.should == "positive" }
111
+ end
112
+ context 'negative' do
113
+ it('returns "negative"') { negative_string.text_sentiment.should == "negative" }
114
+ end
115
+ context 'neutral' do
116
+ it('returns "neutral"') { emoticon_string.text_sentiment.should == "neutral" }
117
+ end
118
+ end
119
+
120
+ describe '#sentiment_info' do
121
+ context 'positive count' do
122
+ it 'returns hash containing positive' do
123
+ positive_string.sentiment_info.should == { sentiment: "positive", positive_count: 1, negative_count: 0, difference: 1 }
124
+ end
125
+ end
126
+ context 'negative count' do
127
+ it 'returns hash containing negative' do
128
+ negative_string.sentiment_info.should == { sentiment: "negative", positive_count: 0, negative_count: 1, difference: 1 }
129
+ end
130
+ end
131
+ context 'neutral count' do
132
+ it 'returns hash containing neutral' do
133
+ neutral_string.sentiment_info.should == { sentiment: "neutral", positive_count: 0, negative_count: 0, difference: 0 }
134
+ end
135
+ end
136
+ end
137
+
138
+ describe '#score_hash' do
139
+ let(:sentiment) { "sentiment" }
140
+ let(:pos_count) { Random.rand(0...10) }
141
+ let(:neg_count) { Random.rand(0...10) }
142
+ let(:difference) { (pos_count - neg_count).abs }
143
+ it 'returns hash of what is passed in' do
144
+ Emotidragon.score_hash(sentiment, pos_count, neg_count, difference).should == { sentiment: sentiment, positive_count: pos_count, negative_count: neg_count, difference: difference }
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,23 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ require 'rubygems'
9
+ require 'bundler/setup'
10
+
11
+ require 'emotidragon'
12
+
13
+ RSpec.configure do |config|
14
+ config.treat_symbols_as_metadata_keys_with_true_values = true
15
+ config.run_all_when_everything_filtered = true
16
+ config.filter_run :focus
17
+
18
+ # Run specs in random order to surface order dependencies. If you find an
19
+ # order dependency and want to debug it, you can fix the order by providing
20
+ # the seed, which is printed after each run.
21
+ # --seed 1234
22
+ config.order = 'random'
23
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: emotidragon
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chris Nixon
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: A simple gem to collect an array of, get sentiment about a string based
31
+ on, determine if a string contains...emoticons
32
+ email:
33
+ - chris@liamneesonsarm.com
34
+ executables: []
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - .gitignore
39
+ - Gemfile
40
+ - Gemfile.lock
41
+ - README.md
42
+ - Rakefile
43
+ - emotidragon.gemspec
44
+ - lib/emotidragon.rb
45
+ - lib/emotidragon/version.rb
46
+ - spec/emotidragon_spec.rb
47
+ - spec/spec_helper.rb
48
+ homepage: ''
49
+ licenses: []
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project: emotidragon
68
+ rubygems_version: 1.8.24
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Emoticons! ROAR!
72
+ test_files:
73
+ - spec/emotidragon_spec.rb
74
+ - spec/spec_helper.rb