opener-polarity-tagger 3.1.2 → 3.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee937e14a2da85b39cc76765d221ac23f9df4d713953482cd58bee4acebd1f0d
4
- data.tar.gz: d86cd682deb902951b93a3c217a9ccfff677956c39adc4b21a29597483f4b28b
3
+ metadata.gz: 062fd54795d572d62bb63481dbce896c918f9b9e80a55df36b5e19f2a0be97ad
4
+ data.tar.gz: 6a4ff6d3ef761a22d044b7301064bc7eb0e2f75df8f806d6359aa5e5a01c42f4
5
5
  SHA512:
6
- metadata.gz: d400f873a98d0426b4090f4155339ab2e2bb6743218d65dde59ed40d3ae61a5f66c836fb2f4bd197058e12c1646f473bbc7fc460ba83c1accfc6b27778d2259d
7
- data.tar.gz: 5957d89cce03e50eb7d554aac1c39cd06c80d9f9381142ec7e0fc40931e3910b06a7298a9c9a3f1fcac58332edca175afe7fd2e26271f60b2c672471c05f2ebd
6
+ metadata.gz: f40d2703af5e936a3f2c747c2fc5938606ec4a8d8d65bfc8b7bd5aeaa2836de9090912c91d7f699b978d324be921128d743bfb69367539947e3202dca50abcb7
7
+ data.tar.gz: 884bbe39961248e5158f0b3b4c8c84ebc46bdce1fc7292a7b27eb4737fac7497a273f3a9fa91706aa283f2a814bf88b92439df3bd2dcfb8cfe0991461061b06d
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env python
1
+ #!/usr/bin/env python2
2
2
 
3
3
  ##############################
4
4
  #
@@ -2,6 +2,7 @@ require 'open3'
2
2
  require 'opener/core'
3
3
  require 'nokogiri'
4
4
  require 'hashie'
5
+ require 'active_support/all'
5
6
 
6
7
  require_relative 'polarity_tagger/version'
7
8
  require_relative 'polarity_tagger/cli'
@@ -19,8 +20,12 @@ module Opener
19
20
  @proc = @klass.new args: @args
20
21
  end
21
22
 
22
- def run input
23
- @proc.run input
23
+ def clear_cache params = {}
24
+ @proc.clear_cache(**params)
25
+ end
26
+
27
+ def run input, params = {}
28
+ @proc.run input, params
24
29
  end
25
30
 
26
31
  end
@@ -32,7 +32,7 @@ module Opener
32
32
  # @return [String]
33
33
  #
34
34
  def command
35
- return "#{adjust_python_path} python -E #{kernel} #{lexicon_path} #{args.join(" ")}"
35
+ "#{adjust_python_path} python2 -E #{kernel} #{lexicon_path} #{args.join(" ")}"
36
36
  end
37
37
 
38
38
  ##
@@ -52,7 +52,7 @@ module Opener
52
52
  # @param [String] input The text of which to detect the language.
53
53
  # @return [Array]
54
54
  #
55
- def run(input)
55
+ def run input, params
56
56
  stdout, stderr, process = capture(input)
57
57
 
58
58
  raise stderr unless process.success?
@@ -16,11 +16,16 @@ module Opener
16
16
  @ignore_pos = ignore_pos
17
17
  end
18
18
 
19
- def run input
19
+ def clear_cache lang: nil, environment:
20
+ end
21
+
22
+ def run input, params = {}
20
23
  @kaf = KAF::Document.from_xml input
21
- @map = @kaf.map = CACHE[@kaf.language]
22
24
 
23
- negators = 0
25
+ @cache_keys = params[:cache_keys] ||= {}
26
+ @cache_keys.merge! lang: @kaf.language
27
+ @map = @kaf.map = CACHE[**@cache_keys].lexicons
28
+
24
29
  @kaf.terms.each do |t|
25
30
  lemma = t.lemma&.downcase
26
31
  pos = if @ignore_pos then nil else t.pos end
@@ -32,7 +37,6 @@ module Opener
32
37
  attrs.polarity = lexicon.polarity
33
38
  end
34
39
  if l = @map.by_negator(lemma)
35
- negators += 1
36
40
  lexicon, polarity_pos = l, nil
37
41
  attrs.sentiment_modifier = 'shifter'
38
42
  end
@@ -26,9 +26,9 @@ module Opener
26
26
  end
27
27
 
28
28
  def add_linguistic_processor name, version, layer, timestamp: false
29
- header = @document.at('kafHeader') || @document.root.add_child('<kafHeader/>')
29
+ header = @document.at('kafHeader') || @document.root.add_child('<kafHeader/>').first
30
30
  procs = header.css('linguisticProcessors').find{ |l| l.attr(:layer) == layer }
31
- procs ||= header.add_child("<linguisticProcessors layer='#{layer}'/>")
31
+ procs ||= header.add_child("<linguisticProcessors layer='#{layer}'/>").first
32
32
  lp = procs.add_child('<lp/>')
33
33
  lp.attr(
34
34
  timestamp: if timestamp then Time.now.iso8601 else '*' end,
@@ -7,21 +7,10 @@ module Opener
7
7
  attr_reader :intensifiers
8
8
  attr_reader :with_polarity
9
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'
10
+ UNKNOWN = Hashie::Mash.new polarity: 'unknown'
24
11
 
12
+ POS_ORDER = 'NRVGAO'
13
+ DEFAULT_POS = 'O'
25
14
  POS_SHORT_MAP = {
26
15
  adj: 'G',
27
16
  adv: 'A',
@@ -34,6 +23,20 @@ module Opener
34
23
  multi_word_expression: 'O',
35
24
  }
36
25
 
26
+ def initialize lang:, lexicons:
27
+ @lang = lang
28
+ @lexicons = lexicons
29
+
30
+ @negators = {}
31
+ @intensifiers = {}
32
+ @with_polarity = {}
33
+ map lexicons
34
+ end
35
+
36
+ def blank?
37
+ @lexicons.blank?
38
+ end
39
+
37
40
  def by_negator lemma
38
41
  @negators[lemma]
39
42
  end
@@ -58,6 +61,8 @@ module Opener
58
61
  protected
59
62
 
60
63
  def map lexicons
64
+ return if blank?
65
+
61
66
  lexicons.each do |l|
62
67
  next if l.lemma.nil?
63
68
 
@@ -4,6 +4,8 @@ module Opener
4
4
 
5
5
  include MonitorMixin
6
6
 
7
+ UPDATE_INTERVAL = (ENV['CACHE_EXPIRE_MINS']&.to_i || 5).minutes
8
+
7
9
  def initialize
8
10
  super #MonitorMixin
9
11
 
@@ -12,28 +14,47 @@ module Opener
12
14
  @cache = {}
13
15
  end
14
16
 
15
- def [] lang
17
+ def [] **params
16
18
  synchronize do
17
- @cache[lang] ||= load_lexicons lang
19
+ existing = @cache[params]
20
+ break existing if existing and existing.from > UPDATE_INTERVAL.ago
21
+ @cache[params] = cache_update existing, **params
18
22
  end
19
23
  end
20
24
  alias_method :get, :[]
21
25
 
22
- def load_lexicons lang
23
- lexicons = if @url then load_from_url lang else load_from_path lang end
26
+ def cache_update existing = nil, **params
27
+ from = Time.now
28
+ lexicons = load_lexicons cache: existing, **params
29
+
30
+ if existing and lexicons.blank?
31
+ existing.from = from
32
+ return existing
33
+ end
34
+
35
+ Hashie::Mash.new(
36
+ lexicons: lexicons,
37
+ from: from,
38
+ )
39
+ end
40
+
41
+ def load_lexicons lang:, **params
42
+ lexicons = if @url then load_from_url lang: lang, **params else load_from_path lang: lang, **params end
24
43
 
25
44
  LexiconMap.new lang: lang, lexicons: lexicons
26
45
  end
27
46
 
28
- def load_from_url lang
29
- url = "#{@url}&language_code=#{lang}"
47
+ def load_from_url lang:, cache:, **params
48
+ url = "#{@url}&language_code=#{lang}&#{params.to_query}"
49
+ url += "&if_updated_since=#{cache.from.utc.iso8601}" if cache
30
50
  puts "#{lang}: loading lexicons from url #{url}"
31
- lexicons = JSON.parse HTTPClient.new.get(url).body
51
+
52
+ lexicons = JSON.parse http.get(url).body
32
53
  lexicons = lexicons['data'].map{ |l| Hashie::Mash.new l }
33
54
  lexicons
34
55
  end
35
56
 
36
- def load_from_path lang
57
+ def load_from_path lang:, **params
37
58
  @path ||= 'core/general-lexicons'
38
59
  dir = "#{@path}/#{lang.upcase}-lexicon"
39
60
  config = Nokogiri::XML File.read "#{dir}/config.xml"
@@ -64,6 +85,16 @@ module Opener
64
85
  lexicons
65
86
  end
66
87
 
88
+ def http
89
+ return @http if @http
90
+
91
+ @http = HTTPClient.new
92
+ @http.send_timeout = 120
93
+ @http.receive_timeout = 120
94
+ @http.connect_timeout = 120
95
+ @http
96
+ end
97
+
67
98
  end
68
99
  end
69
100
  end
@@ -1,7 +1,7 @@
1
1
  module Opener
2
2
  class PolarityTagger
3
3
 
4
- VERSION = '3.1.2'
4
+ VERSION = '3.2.4'
5
5
 
6
6
  end
7
7
  end
@@ -33,6 +33,7 @@ Gem::Specification.new do |gem|
33
33
  gem.add_dependency 'opener-webservice', '~> 2.1'
34
34
  gem.add_dependency 'opener-core', '~> 2.2'
35
35
 
36
+ gem.add_dependency 'activesupport'
36
37
  gem.add_dependency 'hashie'
37
38
  gem.add_dependency 'rake'
38
39
  gem.add_dependency 'nokogiri'
@@ -2,6 +2,6 @@ desc 'Verifies the requirements'
2
2
  task :requirements do
3
3
  require 'cliver'
4
4
 
5
- Cliver.detect!('python', '~> 2.6')
6
- Cliver.detect!('pip', '>= 1.3')
5
+ Cliver.detect! 'python2', '~> 2.6'
6
+ Cliver.detect! 'pip2', '>= 1.3'
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opener-polarity-tagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.2
4
+ version: 3.2.4
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: 2020-09-23 00:00:00.000000000 Z
11
+ date: 2020-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opener-daemons
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: hashie
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -167,10 +181,10 @@ dependencies:
167
181
  description: Polarity tagger for various languages.
168
182
  email:
169
183
  executables:
170
- - polarity-tagger
171
- - polarity-tagger-daemon
172
184
  - polarity-tagger-server
173
185
  - console
186
+ - polarity-tagger
187
+ - polarity-tagger-daemon
174
188
  extensions:
175
189
  - ext/hack/Rakefile
176
190
  extra_rdoc_files: []