opener-polarity-tagger 2.4.2 → 3.1.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.
@@ -0,0 +1,35 @@
1
+ module Opener
2
+ module KAF
3
+ class Term
4
+
5
+ attr_reader :document
6
+ attr_reader :node
7
+
8
+ def initialize document, node
9
+ @document = document
10
+ @node = node
11
+ end
12
+
13
+ def id
14
+ @id ||= @node.attr :tid
15
+ end
16
+
17
+ def lemma
18
+ @node.attr :lemma
19
+ end
20
+
21
+ def pos
22
+ @node.attr :pos
23
+ end
24
+
25
+ def setPolarity attrs, polarity_pos
26
+ #In case there is no pos info, we use the polarityPos
27
+ @node[:pos] = polarity_pos if !pos and polarity_pos
28
+
29
+ sentiment = @node.add_child('<sentiment/>')
30
+ sentiment.attr attrs
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,82 @@
1
+ module Opener
2
+ class PolarityTagger
3
+ class LexiconMap
4
+
5
+ attr_reader :resource
6
+ attr_reader :negators
7
+ attr_reader :intensifiers
8
+ attr_reader :with_polarity
9
+
10
+ POS_ORDER = 'NRVGAO'
11
+ UNKNOWN = Hashie::Mash.new polarity: 'unknown'
12
+
13
+ def initialize lang:, lexicons:
14
+ @lang = lang
15
+ @lexicons = lexicons
16
+
17
+ @negators = {}
18
+ @intensifiers = {}
19
+ @with_polarity = {}
20
+ map lexicons
21
+ end
22
+
23
+ DEFAULT_POS = 'O'
24
+
25
+ POS_SHORT_MAP = {
26
+ adj: 'G',
27
+ adv: 'A',
28
+ noun: 'N',
29
+ propernoun: 'N',
30
+ other: 'O',
31
+ prep: 'P',
32
+ verb: 'V',
33
+ nil => DEFAULT_POS,
34
+ multi_word_expression: 'O',
35
+ }
36
+
37
+ def by_negator lemma
38
+ @negators[lemma]
39
+ end
40
+
41
+ def by_intensifier lemma
42
+ @intensifiers[lemma]
43
+ end
44
+
45
+ def by_polarity lemma, short_pos
46
+ return [@with_polarity[lemma+short_pos] || UNKNOWN, short_pos] if short_pos
47
+
48
+ POS_ORDER.chars.each do |short_pos|
49
+ if l = @with_polarity[lemma+short_pos]
50
+ puts "Found polarify #{l.polarity} for #{lemma} with PoS #{short_pos}"
51
+ return [l, short_pos]
52
+ end
53
+ end
54
+
55
+ [UNKNOWN, 'unknown']
56
+ end
57
+
58
+ protected
59
+
60
+ def map lexicons
61
+ lexicons.each do |l|
62
+ next if l.lemma.nil?
63
+
64
+ case l.type
65
+ when 'polarityShifter' then @negators[l.lemma] = l
66
+ when 'intensifier' then @intensifiers[l.lemma] = l
67
+ else
68
+ if l.polarity
69
+ short_pos = POS_SHORT_MAP[l.pos&.to_sym] || DEFAULT_POS
70
+ @with_polarity[l.lemma+short_pos] = l
71
+ end
72
+ end
73
+ end
74
+
75
+ puts "#{@lang}: loaded #{@negators.size} negators"
76
+ puts "#{@lang}: loaded #{@intensifiers.size} intensifiers"
77
+ puts "#{@lang}: loaded #{@with_polarity.size} elements with polarity"
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,68 @@
1
+ module Opener
2
+ class PolarityTagger
3
+ class LexiconsCache
4
+
5
+ def initialize
6
+ extend MonitorMixin
7
+ super #MonitorMixin
8
+
9
+ @url = ENV['POLARITY_LEXICON_URL']
10
+ @path = ENV['POLARITY_LEXICON_PATH']
11
+ @cache = {}
12
+ end
13
+
14
+ def [] lang
15
+ synchronize do
16
+ @cache[lang] ||= load_lexicons lang
17
+ end
18
+ end
19
+ alias_method :get, :[]
20
+
21
+ def load_lexicons lang
22
+ lexicons = if @url then load_from_url lang else load_from_path lang end
23
+
24
+ LexiconMap.new lang: lang, lexicons: lexicons
25
+ end
26
+
27
+ def load_from_url lang
28
+ url = "#{@url}&language_code=#{lang}"
29
+ puts "#{lang}: loading lexicons from url #{url}"
30
+ lexicons = JSON.parse HTTPClient.new.get(url).body
31
+ lexicons = lexicons['data'].map{ |l| Hashie::Mash.new l }
32
+ lexicons
33
+ end
34
+
35
+ def load_from_path lang
36
+ @path ||= 'core/general-lexicons'
37
+ dir = "#{@path}/#{lang.upcase}-lexicon"
38
+ config = Nokogiri::XML File.read "#{dir}/config.xml"
39
+ lexicons = []
40
+
41
+ config.css(:lexicon).each do |cl|
42
+ filename = cl.at(:filename).text
43
+ resource = cl.at(:resource).text
44
+ xml = Nokogiri::XML File.read "#{dir}/#{filename}"
45
+ puts "#{lang}: loading lexicons from the file #{filename}"
46
+
47
+ lexicons.concat(xml.css(:LexicalEntry).map do |le|
48
+ Hashie::Mash.new(
49
+ resource: resource,
50
+ identifier: le.attr(:id),
51
+ type: le.attr(:type),
52
+ lemma: le.at(:Lemma).attr(:writtenForm).downcase,
53
+ pos: le.attr(:partOfSpeech)&.downcase,
54
+ aspect: le.at(:Domain)&.attr(:aspect)&.downcase,
55
+ polarity: le.at(:Sentiment).attr(:polarity),
56
+ strength: le.at(:Sentiment).attr(:strength),
57
+ confidence_level: le.at(:Confidence)&.attr(:level),
58
+ domain_conditional: le.at(:Domain)&.attr(:conditional) == 'yes',
59
+ )
60
+ end)
61
+ end
62
+
63
+ lexicons
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -1,5 +1,3 @@
1
- require 'sinatra/base'
2
- require 'httpclient'
3
1
  require 'opener/webservice'
4
2
 
5
3
  module Opener
@@ -7,10 +5,11 @@ module Opener
7
5
  ##
8
6
  # Polarity tagger server powered by Sinatra.
9
7
  #
10
- class Server < Webservice
8
+ class Server < Webservice::Server
11
9
  set :views, File.expand_path('../views', __FILE__)
12
- text_processor PolarityTagger
13
- accepted_params :input
10
+
11
+ self.text_processor = PolarityTagger
12
+ self.accepted_params = [:input]
14
13
  end # Server
15
14
  end # PolarityTagger
16
15
  end # Opener
@@ -1,5 +1,7 @@
1
1
  module Opener
2
2
  class PolarityTagger
3
- VERSION = '2.4.2'
4
- end # PolarityTagger
5
- end # Opener
3
+
4
+ VERSION = '3.1.1'
5
+
6
+ end
7
+ end
@@ -9,6 +9,8 @@ Gem::Specification.new do |gem|
9
9
  gem.homepage = 'http://opener-project.github.com/'
10
10
  gem.extensions = ['ext/hack/Rakefile']
11
11
 
12
+ gem.license = 'Apache 2.0'
13
+
12
14
  gem.required_ruby_version = '>= 1.9.2'
13
15
 
14
16
  gem.files = Dir.glob([
@@ -20,22 +22,24 @@ Gem::Specification.new do |gem|
20
22
  '*.gemspec',
21
23
  '*_requirements.txt',
22
24
  'README.md',
25
+ 'LICENSE.txt',
23
26
  'exec/**/*',
24
27
  'task/*'
25
28
  ]).select { |file| File.file?(file) }
26
29
 
27
30
  gem.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
28
31
 
32
+ gem.add_dependency 'opener-daemons', '~> 2.2'
33
+ gem.add_dependency 'opener-webservice', '~> 2.1'
34
+ gem.add_dependency 'opener-core', '~> 2.2'
35
+
36
+ gem.add_dependency 'hashie'
29
37
  gem.add_dependency 'rake'
30
- gem.add_dependency 'sinatra'
31
- gem.add_dependency 'httpclient'
32
- gem.add_dependency 'puma'
33
- gem.add_dependency 'opener-daemons'
34
- gem.add_dependency 'opener-webservice'
35
- gem.add_dependency 'opener-core', '~> 1.0'
36
38
  gem.add_dependency 'nokogiri'
37
39
  gem.add_dependency 'cliver'
40
+ gem.add_dependency 'slop', '~> 3.5'
38
41
 
42
+ gem.add_development_dependency 'pry'
39
43
  gem.add_development_dependency 'rspec', '~> 3.0'
40
44
  gem.add_development_dependency 'cucumber'
41
45
  end
@@ -3,5 +3,5 @@ task :requirements do
3
3
  require 'cliver'
4
4
 
5
5
  Cliver.detect!('python', '~> 2.6')
6
- Cliver.detect!('pip', '~> 1.3')
6
+ Cliver.detect!('pip', '>= 1.3')
7
7
  end
metadata CHANGED
@@ -1,180 +1,183 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opener-polarity-tagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.2
4
+ version: 3.1.1
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: 2014-06-19 00:00:00.000000000 Z
11
+ date: 2020-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
14
+ name: opener-daemons
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :runtime
21
+ prerelease: false
15
22
  version_requirements: !ruby/object:Gem::Requirement
16
23
  requirements:
17
- - - '>='
24
+ - - "~>"
18
25
  - !ruby/object:Gem::Version
19
- version: '0'
26
+ version: '2.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: opener-webservice
20
29
  requirement: !ruby/object:Gem::Requirement
21
30
  requirements:
22
- - - '>='
31
+ - - "~>"
23
32
  - !ruby/object:Gem::Version
24
- version: '0'
25
- prerelease: false
33
+ version: '2.1'
26
34
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: sinatra
35
+ prerelease: false
29
36
  version_requirements: !ruby/object:Gem::Requirement
30
37
  requirements:
31
- - - '>='
38
+ - - "~>"
32
39
  - !ruby/object:Gem::Version
33
- version: '0'
40
+ version: '2.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: opener-core
34
43
  requirement: !ruby/object:Gem::Requirement
35
44
  requirements:
36
- - - '>='
45
+ - - "~>"
37
46
  - !ruby/object:Gem::Version
38
- version: '0'
39
- prerelease: false
47
+ version: '2.2'
40
48
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: httpclient
49
+ prerelease: false
43
50
  version_requirements: !ruby/object:Gem::Requirement
44
51
  requirements:
45
- - - '>='
52
+ - - "~>"
46
53
  - !ruby/object:Gem::Version
47
- version: '0'
54
+ version: '2.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: hashie
48
57
  requirement: !ruby/object:Gem::Requirement
49
58
  requirements:
50
- - - '>='
59
+ - - ">="
51
60
  - !ruby/object:Gem::Version
52
61
  version: '0'
53
- prerelease: false
54
62
  type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: puma
63
+ prerelease: false
57
64
  version_requirements: !ruby/object:Gem::Requirement
58
65
  requirements:
59
- - - '>='
66
+ - - ">="
60
67
  - !ruby/object:Gem::Version
61
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
62
71
  requirement: !ruby/object:Gem::Requirement
63
72
  requirements:
64
- - - '>='
73
+ - - ">="
65
74
  - !ruby/object:Gem::Version
66
75
  version: '0'
67
- prerelease: false
68
76
  type: :runtime
69
- - !ruby/object:Gem::Dependency
70
- name: opener-daemons
77
+ prerelease: false
71
78
  version_requirements: !ruby/object:Gem::Requirement
72
79
  requirements:
73
- - - '>='
80
+ - - ">="
74
81
  - !ruby/object:Gem::Version
75
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: nokogiri
76
85
  requirement: !ruby/object:Gem::Requirement
77
86
  requirements:
78
- - - '>='
87
+ - - ">="
79
88
  - !ruby/object:Gem::Version
80
89
  version: '0'
81
- prerelease: false
82
90
  type: :runtime
83
- - !ruby/object:Gem::Dependency
84
- name: opener-webservice
91
+ prerelease: false
85
92
  version_requirements: !ruby/object:Gem::Requirement
86
93
  requirements:
87
- - - '>='
94
+ - - ">="
88
95
  - !ruby/object:Gem::Version
89
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: cliver
90
99
  requirement: !ruby/object:Gem::Requirement
91
100
  requirements:
92
- - - '>='
101
+ - - ">="
93
102
  - !ruby/object:Gem::Version
94
103
  version: '0'
95
- prerelease: false
96
104
  type: :runtime
97
- - !ruby/object:Gem::Dependency
98
- name: opener-core
105
+ prerelease: false
99
106
  version_requirements: !ruby/object:Gem::Requirement
100
107
  requirements:
101
- - - ~>
108
+ - - ">="
102
109
  - !ruby/object:Gem::Version
103
- version: '1.0'
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: slop
104
113
  requirement: !ruby/object:Gem::Requirement
105
114
  requirements:
106
- - - ~>
115
+ - - "~>"
107
116
  - !ruby/object:Gem::Version
108
- version: '1.0'
109
- prerelease: false
117
+ version: '3.5'
110
118
  type: :runtime
111
- - !ruby/object:Gem::Dependency
112
- name: nokogiri
119
+ prerelease: false
113
120
  version_requirements: !ruby/object:Gem::Requirement
114
121
  requirements:
115
- - - '>='
122
+ - - "~>"
116
123
  - !ruby/object:Gem::Version
117
- version: '0'
124
+ version: '3.5'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
118
127
  requirement: !ruby/object:Gem::Requirement
119
128
  requirements:
120
- - - '>='
129
+ - - ">="
121
130
  - !ruby/object:Gem::Version
122
131
  version: '0'
132
+ type: :development
123
133
  prerelease: false
124
- type: :runtime
125
- - !ruby/object:Gem::Dependency
126
- name: cliver
127
134
  version_requirements: !ruby/object:Gem::Requirement
128
135
  requirements:
129
- - - '>='
136
+ - - ">="
130
137
  - !ruby/object:Gem::Version
131
138
  version: '0'
132
- requirement: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - '>='
135
- - !ruby/object:Gem::Version
136
- version: '0'
137
- prerelease: false
138
- type: :runtime
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rspec
141
- version_requirements: !ruby/object:Gem::Requirement
141
+ requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ~>
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
145
  version: '3.0'
146
- requirement: !ruby/object:Gem::Requirement
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
147
149
  requirements:
148
- - - ~>
150
+ - - "~>"
149
151
  - !ruby/object:Gem::Version
150
152
  version: '3.0'
151
- prerelease: false
152
- type: :development
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: cucumber
155
- version_requirements: !ruby/object:Gem::Requirement
155
+ requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
- requirement: !ruby/object:Gem::Requirement
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
161
163
  requirements:
162
- - - '>='
164
+ - - ">="
163
165
  - !ruby/object:Gem::Version
164
166
  version: '0'
165
- prerelease: false
166
- type: :development
167
167
  description: Polarity tagger for various languages.
168
168
  email:
169
169
  executables:
170
170
  - polarity-tagger
171
171
  - polarity-tagger-daemon
172
172
  - polarity-tagger-server
173
+ - console
173
174
  extensions:
174
175
  - ext/hack/Rakefile
175
176
  extra_rdoc_files: []
176
177
  files:
178
+ - LICENSE.txt
177
179
  - README.md
180
+ - bin/console
178
181
  - bin/polarity-tagger
179
182
  - bin/polarity-tagger-daemon
180
183
  - bin/polarity-tagger-server
@@ -197,6 +200,12 @@ files:
197
200
  - ext/hack/Rakefile
198
201
  - lib/opener/polarity_tagger.rb
199
202
  - lib/opener/polarity_tagger/cli.rb
203
+ - lib/opener/polarity_tagger/external.rb
204
+ - lib/opener/polarity_tagger/internal.rb
205
+ - lib/opener/polarity_tagger/kaf/document.rb
206
+ - lib/opener/polarity_tagger/kaf/term.rb
207
+ - lib/opener/polarity_tagger/lexicon_map.rb
208
+ - lib/opener/polarity_tagger/lexicons_cache.rb
200
209
  - lib/opener/polarity_tagger/public/markdown.css
201
210
  - lib/opener/polarity_tagger/server.rb
202
211
  - lib/opener/polarity_tagger/version.rb
@@ -209,7 +218,8 @@ files:
209
218
  - task/requirements.rake
210
219
  - task/test.rake
211
220
  homepage: http://opener-project.github.com/
212
- licenses: []
221
+ licenses:
222
+ - Apache 2.0
213
223
  metadata: {}
214
224
  post_install_message:
215
225
  rdoc_options: []
@@ -217,17 +227,17 @@ require_paths:
217
227
  - lib
218
228
  required_ruby_version: !ruby/object:Gem::Requirement
219
229
  requirements:
220
- - - '>='
230
+ - - ">="
221
231
  - !ruby/object:Gem::Version
222
232
  version: 1.9.2
223
233
  required_rubygems_version: !ruby/object:Gem::Requirement
224
234
  requirements:
225
- - - '>='
235
+ - - ">="
226
236
  - !ruby/object:Gem::Version
227
237
  version: '0'
228
238
  requirements: []
229
239
  rubyforge_project:
230
- rubygems_version: 2.2.2
240
+ rubygems_version: 2.7.8
231
241
  signing_key:
232
242
  specification_version: 4
233
243
  summary: Polarity tagger for various languages.