opener-opinion-detector-basic 3.1.1 → 3.2.3
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 +5 -5
- data/exec/opinion-detector-basic.rb +16 -0
- data/lib/opener/opinion_detector_basic.rb +5 -4
- data/lib/opener/opinion_detector_basic/opinion.rb +1 -1
- data/lib/opener/opinion_detector_basic/processor.rb +22 -35
- data/lib/opener/opinion_detector_basic/term.rb +8 -8
- data/lib/opener/opinion_detector_basic/version.rb +3 -1
- data/opener-opinion-detector-basic.gemspec +1 -1
- metadata +51 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 37bab9088bfcdff7ddd21a5452bd9226edb14a0d11fb35b2f7bd8a183cd5b1af
|
4
|
+
data.tar.gz: 3605f40a5b4c1f22d343a308d6b7e4e28184bd8f0e7de000ca334842ccc3b4f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccc07cced6aee88b530fa52bfa7185855a840cced15f7008574e9493e85e9249c2af14c6b0645b0e991edfe876e51d69ef26a10ff9ab56ded4ffe59a47873cf4
|
7
|
+
data.tar.gz: 025e2637189339a502fefa73f4e6c44d1317e3199ea474a790d1a4421a0b50293adac691da913800f70a023c1ae190ba2473397021b0d45f7952d6470f33da09
|
@@ -41,6 +41,22 @@ Opener::OpinionDetectorBasic::Processor.class_eval do
|
|
41
41
|
add_method_tracer(:apply_conjunctions)
|
42
42
|
end
|
43
43
|
|
44
|
+
Opener::OpinionDetectorBasic::Term.class_eval do
|
45
|
+
include NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
46
|
+
include NewRelic::Agent::MethodTracer
|
47
|
+
|
48
|
+
add_method_tracer(:initialize)
|
49
|
+
add_method_tracer(:sentiment_modifier)
|
50
|
+
add_method_tracer(:polarity)
|
51
|
+
add_method_tracer(:target_ids)
|
52
|
+
add_method_tracer(:strength)
|
53
|
+
add_method_tracer(:get_sentence)
|
54
|
+
add_method_tracer(:is_intensifier?)
|
55
|
+
add_method_tracer(:is_shifter?)
|
56
|
+
add_method_tracer(:is_expression?)
|
57
|
+
add_method_tracer(:is_conjunction?)
|
58
|
+
end
|
59
|
+
|
44
60
|
daemon = Opener::Daemons::Daemon.new(Opener::OpinionDetectorBasic)
|
45
61
|
|
46
62
|
daemon.start
|
@@ -1,7 +1,7 @@
|
|
1
1
|
gem 'slop', '~> 3.0'
|
2
2
|
|
3
3
|
require 'slop'
|
4
|
-
require '
|
4
|
+
require 'nokogiri'
|
5
5
|
|
6
6
|
require 'rexml/document'
|
7
7
|
require 'rexml/formatters/pretty'
|
@@ -40,10 +40,11 @@ module Opener
|
|
40
40
|
# @param [String] input
|
41
41
|
# @return [String]
|
42
42
|
#
|
43
|
-
def run
|
43
|
+
def run input, params = {}
|
44
44
|
return Processor.new(input, options).process
|
45
45
|
end
|
46
|
-
|
47
|
-
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
48
49
|
|
49
50
|
|
@@ -76,7 +76,7 @@ module Opener
|
|
76
76
|
def obtain_holders(sentences, language)
|
77
77
|
sentence_terms = sentences[sentence]
|
78
78
|
sentence_terms.each do |term|
|
79
|
-
if OPINION_HOLDERS[language]
|
79
|
+
if OPINION_HOLDERS[language]&.include?(term.lemma)
|
80
80
|
@holders << term.id
|
81
81
|
break
|
82
82
|
end
|
@@ -17,7 +17,7 @@ module Opener
|
|
17
17
|
# by default due to the performance overhead.
|
18
18
|
#
|
19
19
|
def initialize(file, options = {})
|
20
|
-
@document =
|
20
|
+
@document = Nokogiri.XML file
|
21
21
|
|
22
22
|
@timestamp = options[:timestamp]
|
23
23
|
@opinion_strength = options[:opinion_strength]
|
@@ -44,30 +44,16 @@ module Opener
|
|
44
44
|
pretty ? pretty_print(document) : document.to_xml
|
45
45
|
end
|
46
46
|
|
47
|
-
##
|
48
|
-
# Get the language of the input file.
|
49
|
-
#
|
50
|
-
# @return [String]
|
51
|
-
#
|
52
47
|
def language
|
53
|
-
@language ||= document.at_xpath('KAF').
|
48
|
+
@language ||= document.at_xpath('KAF').attr('xml:lang')
|
54
49
|
end
|
55
50
|
|
56
|
-
##
|
57
|
-
# Get the terms from the input file
|
58
|
-
# @return [Hash]
|
59
|
-
#
|
60
51
|
def terms
|
61
52
|
@terms ||= document.xpath('KAF/terms/term').map do |term|
|
62
53
|
Term.new(term, document, language)
|
63
54
|
end
|
64
55
|
end
|
65
56
|
|
66
|
-
##
|
67
|
-
# Get the opinions.
|
68
|
-
#
|
69
|
-
# @return [Hash]
|
70
|
-
#
|
71
57
|
def opinions
|
72
58
|
unless @opinions
|
73
59
|
set_accumulated_strength
|
@@ -79,7 +65,7 @@ module Opener
|
|
79
65
|
#
|
80
66
|
@opinions = terms.map do |term|
|
81
67
|
if term.is_expression? && term.accumulated_strength != 0
|
82
|
-
|
68
|
+
Opinion.new(term)
|
83
69
|
end
|
84
70
|
end.compact
|
85
71
|
|
@@ -117,7 +103,7 @@ module Opener
|
|
117
103
|
#
|
118
104
|
def add_opinion(opinion, index)
|
119
105
|
opinion_node = new_node("opinion", "KAF/opinions")
|
120
|
-
opinion_node
|
106
|
+
opinion_node['oid'] = "o#{index.to_s}"
|
121
107
|
|
122
108
|
unless opinion.holders.empty?
|
123
109
|
opinion_holder_node = new_node("opinion_holder", opinion_node)
|
@@ -131,8 +117,8 @@ module Opener
|
|
131
117
|
end
|
132
118
|
|
133
119
|
expression_node = new_node("opinion_expression", opinion_node)
|
134
|
-
expression_node
|
135
|
-
expression_node
|
120
|
+
expression_node['polarity'] = opinion.polarity
|
121
|
+
expression_node['strength'] = opinion.strength.to_s
|
136
122
|
|
137
123
|
add_opinion_element(expression_node, opinion.ids)
|
138
124
|
end
|
@@ -141,14 +127,15 @@ module Opener
|
|
141
127
|
# Method for adding opinion holders, targets and expressions.
|
142
128
|
#
|
143
129
|
def add_opinion_element(node, ids)
|
144
|
-
lemmas
|
145
|
-
comment
|
146
|
-
node.
|
130
|
+
lemmas = terms.select{|t| ids.include?(t.id)}.map(&:lemma).join(" ")
|
131
|
+
comment = Nokogiri::XML::Comment.new(document, "#{lemmas}")
|
132
|
+
node.add_child comment
|
133
|
+
|
147
134
|
span_node = new_node("span", node)
|
148
135
|
|
149
136
|
ids.each do |id|
|
150
|
-
target_node
|
151
|
-
target_node
|
137
|
+
target_node = new_node("target", span_node)
|
138
|
+
target_node['id'] = id.to_s
|
152
139
|
end
|
153
140
|
end
|
154
141
|
|
@@ -162,19 +149,19 @@ module Opener
|
|
162
149
|
version = '2.0'
|
163
150
|
|
164
151
|
node = new_node('linguisticProcessors', 'KAF/kafHeader')
|
165
|
-
node
|
152
|
+
node['layer'] = 'opinions'
|
166
153
|
|
167
154
|
lp_node = new_node('lp', node)
|
168
155
|
|
169
|
-
lp_node
|
170
|
-
lp_node
|
156
|
+
lp_node['version'] = "#{last_edited}-#{version}"
|
157
|
+
lp_node['name'] = description
|
171
158
|
|
172
159
|
if timestamp
|
173
160
|
format = '%Y-%m-%dT%H:%M:%S%Z'
|
174
161
|
|
175
|
-
lp_node
|
162
|
+
lp_node['timestamp'] = Time.now.strftime(format)
|
176
163
|
else
|
177
|
-
lp_node
|
164
|
+
lp_node['timestamp'] = '*'
|
178
165
|
end
|
179
166
|
end
|
180
167
|
|
@@ -307,9 +294,9 @@ module Opener
|
|
307
294
|
parent_node = parent
|
308
295
|
end
|
309
296
|
|
310
|
-
node =
|
297
|
+
node = Nokogiri::XML::Element.new(tag, document)
|
311
298
|
|
312
|
-
parent_node.
|
299
|
+
parent_node.add_child node
|
313
300
|
|
314
301
|
node
|
315
302
|
end
|
@@ -321,6 +308,6 @@ module Opener
|
|
321
308
|
def is_kaf?
|
322
309
|
!!document.at_xpath('KAF')
|
323
310
|
end
|
324
|
-
end
|
325
|
-
end
|
326
|
-
end
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
@@ -29,7 +29,7 @@ module Opener
|
|
29
29
|
# @return [String]
|
30
30
|
#
|
31
31
|
def id
|
32
|
-
@id ||= node.
|
32
|
+
@id ||= node.attr('tid')
|
33
33
|
end
|
34
34
|
|
35
35
|
##
|
@@ -38,7 +38,7 @@ module Opener
|
|
38
38
|
# @return [String]
|
39
39
|
#
|
40
40
|
def lemma
|
41
|
-
@lemma ||= node.
|
41
|
+
@lemma ||= node.attr('lemma')
|
42
42
|
end
|
43
43
|
|
44
44
|
##
|
@@ -47,7 +47,7 @@ module Opener
|
|
47
47
|
# @return [String]
|
48
48
|
#
|
49
49
|
def pos
|
50
|
-
@pos ||= node.
|
50
|
+
@pos ||= node.attr('pos')
|
51
51
|
end
|
52
52
|
|
53
53
|
##
|
@@ -57,7 +57,7 @@ module Opener
|
|
57
57
|
#
|
58
58
|
def sentiment_modifier
|
59
59
|
@sentiment_modifier ||=
|
60
|
-
first_sentiment ? first_sentiment.
|
60
|
+
first_sentiment ? first_sentiment.attr('sentiment_modifier') : nil
|
61
61
|
end
|
62
62
|
|
63
63
|
##
|
@@ -66,7 +66,7 @@ module Opener
|
|
66
66
|
# @return [String|NilClass]
|
67
67
|
#
|
68
68
|
def polarity
|
69
|
-
@polarity ||= first_sentiment ? first_sentiment.
|
69
|
+
@polarity ||= first_sentiment ? first_sentiment.attr('polarity') : nil
|
70
70
|
end
|
71
71
|
|
72
72
|
##
|
@@ -76,7 +76,7 @@ module Opener
|
|
76
76
|
#
|
77
77
|
def target_ids
|
78
78
|
@target_ids ||= node.xpath('span/target')
|
79
|
-
.map { |target| target.
|
79
|
+
.map { |target| target.attr('id') }
|
80
80
|
end
|
81
81
|
|
82
82
|
##
|
@@ -109,7 +109,7 @@ module Opener
|
|
109
109
|
document
|
110
110
|
.xpath("KAF/text/wf[@wid='#{target_ids.first}']")
|
111
111
|
.first
|
112
|
-
.
|
112
|
+
.attr('sent')
|
113
113
|
end
|
114
114
|
|
115
115
|
##
|
@@ -145,7 +145,7 @@ module Opener
|
|
145
145
|
# @return [TrueClass|FalseClass]
|
146
146
|
#
|
147
147
|
def is_conjunction?(language)
|
148
|
-
CONJUNCTIONS[language]
|
148
|
+
pos == 'J' || CONJUNCTIONS[language]&.include?(lemma)
|
149
149
|
end
|
150
150
|
|
151
151
|
private
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |gem|
|
|
27
27
|
gem.add_dependency 'opener-webservice', '~> 2.1'
|
28
28
|
gem.add_dependency 'opener-core', '~> 2.2'
|
29
29
|
|
30
|
-
gem.add_dependency '
|
30
|
+
gem.add_dependency 'nokogiri'
|
31
31
|
|
32
32
|
gem.add_development_dependency 'rspec', '~> 3.0'
|
33
33
|
gem.add_development_dependency 'cucumber'
|
metadata
CHANGED
@@ -1,160 +1,154 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opener-opinion-detector-basic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- development@olery.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: opener-daemons
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
|
-
- - ~>
|
17
|
+
- - "~>"
|
17
18
|
- !ruby/object:Gem::Version
|
18
19
|
version: '2.2'
|
19
|
-
name: opener-daemons
|
20
|
-
prerelease: false
|
21
20
|
type: :runtime
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
name: opener-webservice
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- - ~>
|
31
|
+
- - "~>"
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '2.1'
|
33
|
-
name: opener-webservice
|
34
|
-
prerelease: false
|
35
34
|
type: :runtime
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
+
name: opener-core
|
42
43
|
requirement: !ruby/object:Gem::Requirement
|
43
44
|
requirements:
|
44
|
-
- - ~>
|
45
|
+
- - "~>"
|
45
46
|
- !ruby/object:Gem::Version
|
46
47
|
version: '2.2'
|
47
|
-
name: opener-core
|
48
|
-
prerelease: false
|
49
48
|
type: :runtime
|
49
|
+
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
+
name: nokogiri
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
|
-
- -
|
59
|
+
- - ">="
|
59
60
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
61
|
-
- - '>='
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: 1.3.1
|
64
|
-
name: oga
|
65
|
-
prerelease: false
|
61
|
+
version: '0'
|
66
62
|
type: :runtime
|
63
|
+
prerelease: false
|
67
64
|
version_requirements: !ruby/object:Gem::Requirement
|
68
65
|
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '1.0'
|
72
|
-
- - '>='
|
66
|
+
- - ">="
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
68
|
+
version: '0'
|
75
69
|
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
76
71
|
requirement: !ruby/object:Gem::Requirement
|
77
72
|
requirements:
|
78
|
-
- - ~>
|
73
|
+
- - "~>"
|
79
74
|
- !ruby/object:Gem::Version
|
80
75
|
version: '3.0'
|
81
|
-
name: rspec
|
82
|
-
prerelease: false
|
83
76
|
type: :development
|
77
|
+
prerelease: false
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
85
79
|
requirements:
|
86
|
-
- - ~>
|
80
|
+
- - "~>"
|
87
81
|
- !ruby/object:Gem::Version
|
88
82
|
version: '3.0'
|
89
83
|
- !ruby/object:Gem::Dependency
|
84
|
+
name: cucumber
|
90
85
|
requirement: !ruby/object:Gem::Requirement
|
91
86
|
requirements:
|
92
|
-
- -
|
87
|
+
- - ">="
|
93
88
|
- !ruby/object:Gem::Version
|
94
89
|
version: '0'
|
95
|
-
name: cucumber
|
96
|
-
prerelease: false
|
97
90
|
type: :development
|
91
|
+
prerelease: false
|
98
92
|
version_requirements: !ruby/object:Gem::Requirement
|
99
93
|
requirements:
|
100
|
-
- -
|
94
|
+
- - ">="
|
101
95
|
- !ruby/object:Gem::Version
|
102
96
|
version: '0'
|
103
97
|
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
104
99
|
requirement: !ruby/object:Gem::Requirement
|
105
100
|
requirements:
|
106
|
-
- -
|
101
|
+
- - ">="
|
107
102
|
- !ruby/object:Gem::Version
|
108
103
|
version: '0'
|
109
|
-
name: rake
|
110
|
-
prerelease: false
|
111
104
|
type: :development
|
105
|
+
prerelease: false
|
112
106
|
version_requirements: !ruby/object:Gem::Requirement
|
113
107
|
requirements:
|
114
|
-
- -
|
108
|
+
- - ">="
|
115
109
|
- !ruby/object:Gem::Version
|
116
110
|
version: '0'
|
117
111
|
- !ruby/object:Gem::Dependency
|
112
|
+
name: benchmark-ips
|
118
113
|
requirement: !ruby/object:Gem::Requirement
|
119
114
|
requirements:
|
120
|
-
- - ~>
|
115
|
+
- - "~>"
|
121
116
|
- !ruby/object:Gem::Version
|
122
117
|
version: '2.0'
|
123
|
-
name: benchmark-ips
|
124
|
-
prerelease: false
|
125
118
|
type: :development
|
119
|
+
prerelease: false
|
126
120
|
version_requirements: !ruby/object:Gem::Requirement
|
127
121
|
requirements:
|
128
|
-
- - ~>
|
122
|
+
- - "~>"
|
129
123
|
- !ruby/object:Gem::Version
|
130
124
|
version: '2.0'
|
131
125
|
description: Basic Opinion Detector.
|
132
126
|
email:
|
133
127
|
executables:
|
134
|
-
- opinion-detector-basic-server
|
135
128
|
- opinion-detector-basic
|
136
129
|
- opinion-detector-basic-daemon
|
130
|
+
- opinion-detector-basic-server
|
137
131
|
extensions: []
|
138
132
|
extra_rdoc_files: []
|
139
133
|
files:
|
134
|
+
- LICENSE.txt
|
135
|
+
- README.md
|
136
|
+
- bin/opinion-detector-basic
|
137
|
+
- bin/opinion-detector-basic-daemon
|
138
|
+
- bin/opinion-detector-basic-server
|
139
|
+
- config.ru
|
140
|
+
- exec/opinion-detector-basic.rb
|
140
141
|
- lib/opener/opinion_detector_basic.rb
|
141
|
-
- lib/opener/opinion_detector_basic/version.rb
|
142
|
-
- lib/opener/opinion_detector_basic/term.rb
|
143
|
-
- lib/opener/opinion_detector_basic/processor.rb
|
144
|
-
- lib/opener/opinion_detector_basic/server.rb
|
145
142
|
- lib/opener/opinion_detector_basic/cli.rb
|
146
143
|
- lib/opener/opinion_detector_basic/opinion.rb
|
144
|
+
- lib/opener/opinion_detector_basic/processor.rb
|
147
145
|
- lib/opener/opinion_detector_basic/public/markdown.css
|
146
|
+
- lib/opener/opinion_detector_basic/server.rb
|
147
|
+
- lib/opener/opinion_detector_basic/term.rb
|
148
|
+
- lib/opener/opinion_detector_basic/version.rb
|
148
149
|
- lib/opener/opinion_detector_basic/views/index.erb
|
149
|
-
- config.ru
|
150
150
|
- opener-opinion-detector-basic.gemspec
|
151
|
-
- README.md
|
152
|
-
- LICENSE.txt
|
153
|
-
- exec/opinion-detector-basic.rb
|
154
151
|
- task/test.rake
|
155
|
-
- bin/opinion-detector-basic-server
|
156
|
-
- bin/opinion-detector-basic
|
157
|
-
- bin/opinion-detector-basic-daemon
|
158
152
|
homepage: http://opener-project.github.com/
|
159
153
|
licenses:
|
160
154
|
- Apache 2.0
|
@@ -165,19 +159,18 @@ require_paths:
|
|
165
159
|
- lib
|
166
160
|
required_ruby_version: !ruby/object:Gem::Requirement
|
167
161
|
requirements:
|
168
|
-
- -
|
162
|
+
- - ">="
|
169
163
|
- !ruby/object:Gem::Version
|
170
164
|
version: 1.9.2
|
171
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
166
|
requirements:
|
173
|
-
- -
|
167
|
+
- - ">="
|
174
168
|
- !ruby/object:Gem::Version
|
175
169
|
version: '0'
|
176
170
|
requirements: []
|
177
171
|
rubyforge_project:
|
178
|
-
rubygems_version: 2.
|
172
|
+
rubygems_version: 2.7.6
|
179
173
|
signing_key:
|
180
174
|
specification_version: 4
|
181
175
|
summary: Basic Opinion Detector.
|
182
176
|
test_files: []
|
183
|
-
has_rdoc:
|