opener-polarity-tagger 2.5.0 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: