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 +4 -4
- data/core/poltagger-basic-multi.py +1 -1
- data/lib/opener/polarity_tagger.rb +7 -2
- data/lib/opener/polarity_tagger/external.rb +2 -2
- data/lib/opener/polarity_tagger/internal.rb +8 -4
- data/lib/opener/polarity_tagger/kaf/document.rb +2 -2
- data/lib/opener/polarity_tagger/lexicon_map.rb +19 -14
- data/lib/opener/polarity_tagger/lexicons_cache.rb +39 -8
- data/lib/opener/polarity_tagger/version.rb +1 -1
- data/opener-polarity-tagger.gemspec +1 -0
- data/task/requirements.rake +2 -2
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 062fd54795d572d62bb63481dbce896c918f9b9e80a55df36b5e19f2a0be97ad
|
4
|
+
data.tar.gz: 6a4ff6d3ef761a22d044b7301064bc7eb0e2f75df8f806d6359aa5e5a01c42f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f40d2703af5e936a3f2c747c2fc5938606ec4a8d8d65bfc8b7bd5aeaa2836de9090912c91d7f699b978d324be921128d743bfb69367539947e3202dca50abcb7
|
7
|
+
data.tar.gz: 884bbe39961248e5158f0b3b4c8c84ebc46bdce1fc7292a7b27eb4737fac7497a273f3a9fa91706aa283f2a814bf88b92439df3bd2dcfb8cfe0991461061b06d
|
@@ -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
|
23
|
-
@proc.
|
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
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
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 []
|
17
|
+
def [] **params
|
16
18
|
synchronize do
|
17
|
-
@cache[
|
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
|
23
|
-
|
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
|
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
|
-
|
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
|
@@ -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'
|
data/task/requirements.rake
CHANGED
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.
|
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-
|
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: []
|