logstash-filter-sentimentalizer 0.2.0 → 0.2.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +11 -4
- data/README.md +21 -2
- data/demo.gif +0 -0
- data/lib/logstash/filters/sentimentalizer.rb +4 -3
- data/logstash-filter-sentimentalizer.gemspec +2 -1
- data/spec/filters/sentimentalizer_spec.rb +43 -40
- metadata +16 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 985434fa92185812a9723b193bbf35993c35cd39
|
4
|
+
data.tar.gz: 2d9778a8dc3854c1d8eee28a95a846b02f23579b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d5d64917cdcc72cf81c95c09a6a1271a2fe20eda29bb137c3b6382f71d70c9a797696dcc6a45bf688fda48856b8fdd285fedfb73654033787f31fd8fb5a9ce4
|
7
|
+
data.tar.gz: 4b6efdc4e66ffae2c9267d5f92514c368a62a8980211fd44c96873f7756216a27fa8b27694baa9eb1af51385b6a8b93f73ae97bc2854f8dfe5c662f125d409bc
|
data/.travis.yml
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
+
---
|
2
|
+
sudo: false
|
1
3
|
language: ruby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
cache: bundler
|
5
|
+
matrix:
|
6
|
+
include:
|
7
|
+
- rvm: jruby-9.1.13.0
|
8
|
+
- rvm: jruby-9.1.13.0
|
9
|
+
- rvm: jruby-9.1.13.0
|
10
|
+
- rvm: jruby-1.7.27
|
11
|
+
fast_finish: true
|
12
|
+
jdk: oraclejdk8
|
6
13
|
script: 'bundle exec rspec'
|
data/README.md
CHANGED
@@ -1,6 +1,25 @@
|
|
1
|
-
#
|
1
|
+
# logstash-filter-sentimentalizer [](https://travis-ci.org/tylerjl/logstash-filter-sentimentalizer)
|
2
2
|
|
3
|
-
This is a plugin for [Logstash](https://github.com/elasticsearch/logstash).
|
3
|
+
This is a plugin for [Logstash](https://github.com/elasticsearch/logstash).
|
4
|
+
|
5
|
+
This plugin enables you to perform effective sentiment analysis on arbitrary event fields with pretty simple configuration.
|
6
|
+
Consider the following:
|
7
|
+
|
8
|
+
```
|
9
|
+
filter {
|
10
|
+
sentimentalizer {
|
11
|
+
source => "message"
|
12
|
+
}
|
13
|
+
}
|
14
|
+
```
|
15
|
+
|
16
|
+
Is enough to perform sentiment analysis on the `message` field.
|
17
|
+
|
18
|
+
Results are stored in the `sentiment.probability` (a float between 0 and 1, 0 being wholly negative and 1 being maximum positive) and `sentiment.polarity` (an enum with the members "positive", "negative", and "neutral") fields of the processed event (these names come from the underlying sentiment analysis library).
|
19
|
+
|
20
|
+
Here's a short demo of it in action.
|
21
|
+
|
22
|
+

|
4
23
|
|
5
24
|
It is fully free and fully open source. The license is Apache 2.0, meaning you are pretty much free to use it however you want in whatever way.
|
6
25
|
|
data/demo.gif
ADDED
Binary file
|
@@ -34,12 +34,13 @@ class LogStash::Filters::Sentimentalizer < LogStash::Filters::Base
|
|
34
34
|
def filter(event)
|
35
35
|
return unless filter?(event)
|
36
36
|
|
37
|
-
source = event.get(@source)
|
38
|
-
source.gsub!(/\B#(\S+)\b/, '\1') if @scrub
|
37
|
+
source = event.get(@source).dup
|
39
38
|
|
40
39
|
unless source.nil?
|
41
40
|
begin
|
42
|
-
sentiment = Sentimentalizer.analyze(
|
41
|
+
sentiment = Sentimentalizer.analyze(
|
42
|
+
@scrub ? source.gsub(/\B#(\S+)\b/, '\1') : source
|
43
|
+
)
|
43
44
|
rescue NoMethodError => e
|
44
45
|
@logger.error(
|
45
46
|
'Error parsing sentiment for field',
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-filter-sentimentalizer'
|
3
|
-
s.version = '0.2.
|
3
|
+
s.version = '0.2.1'
|
4
4
|
s.licenses = ['Apache-2.0']
|
5
5
|
s.summary = 'This plugin will analyze sentiment of a specified field.'
|
6
6
|
s.description = 'A logstash plugin to derive sentiment from fields.'
|
@@ -24,4 +24,5 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_runtime_dependency 'sentimentalizer', '~> 0.3.0'
|
25
25
|
|
26
26
|
s.add_development_dependency 'logstash-devutils', '~> 1.0'
|
27
|
+
s.add_development_dependency 'rspec', '~> 3.0'
|
27
28
|
end
|
@@ -1,75 +1,78 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require
|
2
|
+
require 'logstash/filters/sentimentalizer'
|
3
3
|
|
4
4
|
describe LogStash::Filters::Sentimentalizer do
|
5
5
|
describe 'default sentiment configuration' do
|
6
|
-
let(:config) do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
let(:config) do
|
7
|
+
<<-CONFIG
|
8
|
+
filter {
|
9
|
+
sentimentalizer { }
|
10
|
+
}
|
11
|
+
CONFIG
|
11
12
|
end
|
12
13
|
|
13
14
|
sample 'Horrible' do
|
14
|
-
expect(subject).to include(
|
15
|
-
expect(subject
|
16
|
-
expect(subject
|
17
|
-
expect(subject
|
15
|
+
expect(subject).to include('message')
|
16
|
+
expect(subject.get('sentiment')['polarity']).to eq('negative')
|
17
|
+
expect(subject.get('sentiment')['probability']).to be_a(Float)
|
18
|
+
expect(subject.get('sentiment')['probability']).to be < 0.5
|
18
19
|
end
|
19
20
|
|
20
21
|
sample 'Fantastic' do
|
21
|
-
expect(subject).to include(
|
22
|
-
expect(subject
|
23
|
-
expect(subject
|
24
|
-
expect(subject
|
22
|
+
expect(subject).to include('message')
|
23
|
+
expect(subject.get('sentiment')['polarity']).to eq('positive')
|
24
|
+
expect(subject.get('sentiment')['probability']).to be_a(Float)
|
25
|
+
expect(subject.get('sentiment')['probability']).to be > 0.5
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
29
|
describe 'twitter hashtag scoring without scrubbing' do
|
29
|
-
let(:config) do
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
let(:config) do
|
31
|
+
<<-CONFIG
|
32
|
+
filter {
|
33
|
+
sentimentalizer {
|
34
|
+
scrub => false
|
35
|
+
}
|
33
36
|
}
|
34
|
-
|
35
|
-
CONFIG
|
37
|
+
CONFIG
|
36
38
|
end
|
37
39
|
|
38
40
|
sample 'What a #horrible idea' do
|
39
|
-
expect(subject).to include(
|
40
|
-
expect(subject
|
41
|
-
expect(subject
|
41
|
+
expect(subject).to include('message')
|
42
|
+
expect(subject.get('sentiment')['probability']).to be_a(Float)
|
43
|
+
expect(subject.get('sentiment')['probability']).to be_within(0.1).of(0.5)
|
42
44
|
end
|
43
45
|
|
44
46
|
sample 'What a #fantastic idea' do
|
45
|
-
expect(subject).to include(
|
46
|
-
expect(subject
|
47
|
-
expect(subject
|
47
|
+
expect(subject).to include('message')
|
48
|
+
expect(subject.get('sentiment')['probability']).to be_a(Float)
|
49
|
+
expect(subject.get('sentiment')['probability']).to be_within(0.1).of(0.5)
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
53
|
describe 'twitter hashtag scoring with scrubbing' do
|
52
|
-
let(:config) do
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
let(:config) do
|
55
|
+
<<-CONFIG
|
56
|
+
filter {
|
57
|
+
sentimentalizer {
|
58
|
+
scrub => true
|
59
|
+
}
|
56
60
|
}
|
57
|
-
|
58
|
-
CONFIG
|
61
|
+
CONFIG
|
59
62
|
end
|
60
63
|
|
61
64
|
sample 'What a #horrible idea' do
|
62
|
-
expect(subject).to include(
|
63
|
-
expect(subject
|
64
|
-
expect(subject
|
65
|
-
expect(subject
|
65
|
+
expect(subject).to include('message')
|
66
|
+
expect(subject.get('sentiment')['polarity']).to eq('negative')
|
67
|
+
expect(subject.get('sentiment')['probability']).to be_a(Float)
|
68
|
+
expect(subject.get('sentiment')['probability']).to be < 0.1
|
66
69
|
end
|
67
70
|
|
68
71
|
sample 'What a #fantastic idea' do
|
69
|
-
expect(subject).to include(
|
70
|
-
expect(subject
|
71
|
-
expect(subject
|
72
|
-
expect(subject
|
72
|
+
expect(subject).to include('message')
|
73
|
+
expect(subject.get('sentiment')['polarity']).to eq('positive')
|
74
|
+
expect(subject.get('sentiment')['probability']).to be_a(Float)
|
75
|
+
expect(subject.get('sentiment')['probability']).to be > 0.9
|
73
76
|
end
|
74
77
|
end
|
75
78
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-sentimentalizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Langlois
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.0'
|
75
|
+
name: rspec
|
76
|
+
prerelease: false
|
77
|
+
type: :development
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
69
83
|
description: A logstash plugin to derive sentiment from fields.
|
70
84
|
email: tyler@elastic.co
|
71
85
|
executables: []
|
@@ -80,6 +94,7 @@ files:
|
|
80
94
|
- LICENSE
|
81
95
|
- README.md
|
82
96
|
- Rakefile
|
97
|
+
- demo.gif
|
83
98
|
- lib/logstash/filters/sentimentalizer.rb
|
84
99
|
- logstash-filter-sentimentalizer.gemspec
|
85
100
|
- spec/filters/sentimentalizer_spec.rb
|