opener-polarity-tagger 2.5.0 → 3.1.2

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,69 @@
1
+ module Opener
2
+ class PolarityTagger
3
+ class LexiconsCache
4
+
5
+ include MonitorMixin
6
+
7
+ def initialize
8
+ super #MonitorMixin
9
+
10
+ @url = ENV['POLARITY_LEXICON_URL']
11
+ @path = ENV['POLARITY_LEXICON_PATH']
12
+ @cache = {}
13
+ end
14
+
15
+ def [] lang
16
+ synchronize do
17
+ @cache[lang] ||= load_lexicons lang
18
+ end
19
+ end
20
+ alias_method :get, :[]
21
+
22
+ def load_lexicons lang
23
+ lexicons = if @url then load_from_url lang else load_from_path lang end
24
+
25
+ LexiconMap.new lang: lang, lexicons: lexicons
26
+ end
27
+
28
+ def load_from_url lang
29
+ url = "#{@url}&language_code=#{lang}"
30
+ puts "#{lang}: loading lexicons from url #{url}"
31
+ lexicons = JSON.parse HTTPClient.new.get(url).body
32
+ lexicons = lexicons['data'].map{ |l| Hashie::Mash.new l }
33
+ lexicons
34
+ end
35
+
36
+ def load_from_path lang
37
+ @path ||= 'core/general-lexicons'
38
+ dir = "#{@path}/#{lang.upcase}-lexicon"
39
+ config = Nokogiri::XML File.read "#{dir}/config.xml"
40
+ lexicons = []
41
+
42
+ config.css(:lexicon).each do |cl|
43
+ filename = cl.at(:filename).text
44
+ resource = cl.at(:resource).text
45
+ xml = Nokogiri::XML File.read "#{dir}/#{filename}"
46
+ puts "#{lang}: loading lexicons from the file #{filename}"
47
+
48
+ lexicons.concat(xml.css(:LexicalEntry).map do |le|
49
+ Hashie::Mash.new(
50
+ resource: resource,
51
+ identifier: le.attr(:id),
52
+ type: le.attr(:type),
53
+ lemma: le.at(:Lemma).attr(:writtenForm).downcase,
54
+ pos: le.attr(:partOfSpeech)&.downcase,
55
+ aspect: le.at(:Domain)&.attr(:aspect)&.downcase,
56
+ polarity: le.at(:Sentiment).attr(:polarity),
57
+ strength: le.at(:Sentiment).attr(:strength),
58
+ confidence_level: le.at(:Confidence)&.attr(:level),
59
+ domain_conditional: le.at(:Domain)&.attr(:conditional) == 'yes',
60
+ )
61
+ end)
62
+ end
63
+
64
+ lexicons
65
+ end
66
+
67
+ end
68
+ end
69
+ 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.5.0'
4
- end # PolarityTagger
5
- end # Opener
3
+
4
+ VERSION = '3.1.2'
5
+
6
+ end
7
+ end
@@ -29,16 +29,17 @@ Gem::Specification.new do |gem|
29
29
 
30
30
  gem.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
31
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'
32
37
  gem.add_dependency 'rake'
33
- gem.add_dependency 'sinatra'
34
- gem.add_dependency 'httpclient'
35
- gem.add_dependency 'puma'
36
- gem.add_dependency 'opener-daemons'
37
- gem.add_dependency 'opener-webservice'
38
- gem.add_dependency 'opener-core', '~> 1.0'
39
38
  gem.add_dependency 'nokogiri'
40
39
  gem.add_dependency 'cliver'
40
+ gem.add_dependency 'slop', '~> 3.5'
41
41
 
42
+ gem.add_development_dependency 'pry'
42
43
  gem.add_development_dependency 'rspec', '~> 3.0'
43
44
  gem.add_development_dependency 'cucumber'
44
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,59 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opener-polarity-tagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 3.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - development@olery.com
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-25 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
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '2.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: sinatra
28
+ name: opener-webservice
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: httpclient
42
+ name: opener-core
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '2.2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '2.2'
55
55
  - !ruby/object:Gem::Dependency
56
- name: puma
56
+ name: hashie
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: opener-daemons
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: opener-webservice
84
+ name: nokogiri
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,41 +95,41 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: opener-core
98
+ name: cliver
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '1.0'
103
+ version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '1.0'
110
+ version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: nokogiri
112
+ name: slop
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '3.5'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '3.5'
125
125
  - !ruby/object:Gem::Dependency
126
- name: cliver
126
+ name: pry
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
- type: :runtime
132
+ type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
@@ -165,17 +165,19 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  description: Polarity tagger for various languages.
168
- email:
168
+ email:
169
169
  executables:
170
- - polarity-tagger-server
171
- - polarity-tagger-daemon
172
170
  - polarity-tagger
171
+ - polarity-tagger-daemon
172
+ - polarity-tagger-server
173
+ - console
173
174
  extensions:
174
175
  - ext/hack/Rakefile
175
176
  extra_rdoc_files: []
176
177
  files:
177
178
  - LICENSE.txt
178
179
  - README.md
180
+ - bin/console
179
181
  - bin/polarity-tagger
180
182
  - bin/polarity-tagger-daemon
181
183
  - bin/polarity-tagger-server
@@ -198,6 +200,12 @@ files:
198
200
  - ext/hack/Rakefile
199
201
  - lib/opener/polarity_tagger.rb
200
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
201
209
  - lib/opener/polarity_tagger/public/markdown.css
202
210
  - lib/opener/polarity_tagger/server.rb
203
211
  - lib/opener/polarity_tagger/version.rb
@@ -213,7 +221,7 @@ homepage: http://opener-project.github.com/
213
221
  licenses:
214
222
  - Apache 2.0
215
223
  metadata: {}
216
- post_install_message:
224
+ post_install_message:
217
225
  rdoc_options: []
218
226
  require_paths:
219
227
  - lib
@@ -228,10 +236,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
236
  - !ruby/object:Gem::Version
229
237
  version: '0'
230
238
  requirements: []
231
- rubyforge_project:
232
- rubygems_version: 2.2.2
233
- signing_key:
239
+ rubyforge_project:
240
+ rubygems_version: 2.7.8
241
+ signing_key:
234
242
  specification_version: 4
235
243
  summary: Polarity tagger for various languages.
236
244
  test_files: []
237
- has_rdoc: