opener-polarity-tagger 3.1.3 → 3.2.5
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.
- checksums.yaml +4 -4
- data/core/LexiconMod.py +3 -1
- 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 +10 -4
- data/lib/opener/polarity_tagger/lexicon_map.rb +20 -15
- 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 +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a00842dc62bfbc1a0a931ff6a6ebfc547d7beee4ef1b6fda17d7b55448bf480
|
4
|
+
data.tar.gz: f3104f7ad025703773ba242e85718ae5a1a69c825884e7603ce757d22158fa7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea222d26e37687dd4cba7b6a99990501f282650261aa61ea2d1ca9fe9d77f11331b4b2f8d9db4daa566393a6154c8ba63320373e2d62611619c81242a26a6476
|
7
|
+
data.tar.gz: 30fed6d4308d3ee100b017dcd8eff05a04a797bc7c553bd624400e4f8908de42624641fe15475189783033a9fe9d14505d9ce2c0716d006587d7d1deae70200b
|
data/core/LexiconMod.py
CHANGED
@@ -45,7 +45,9 @@ def load_lexicons(language, path=None):
|
|
45
45
|
def show_lexicons(language, path=None):
|
46
46
|
if path is None:
|
47
47
|
path = __module_dir
|
48
|
-
lexicons, default_id, this_folder, folder_per_lang = load_lexicons(language, path)
|
48
|
+
#lexicons, default_id, this_folder, folder_per_lang = load_lexicons(language, path)
|
49
|
+
LexiconSent(language,None,path)
|
50
|
+
|
49
51
|
print
|
50
52
|
print '#'*30
|
51
53
|
print 'Available lexicons for',language
|
@@ -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,18 @@ 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
|
+
|
29
|
+
raise Opener::Core::UnsupportedLanguageError, kaf.language if @map.blank?
|
30
|
+
|
24
31
|
@kaf.terms.each do |t|
|
25
32
|
lemma = t.lemma&.downcase
|
26
33
|
pos = if @ignore_pos then nil else t.pos end
|
@@ -32,7 +39,6 @@ module Opener
|
|
32
39
|
attrs.polarity = lexicon.polarity
|
33
40
|
end
|
34
41
|
if l = @map.by_negator(lemma)
|
35
|
-
negators += 1
|
36
42
|
lexicon, polarity_pos = l, nil
|
37
43
|
attrs.sentiment_modifier = 'shifter'
|
38
44
|
end
|
@@ -7,8 +7,21 @@ module Opener
|
|
7
7
|
attr_reader :intensifiers
|
8
8
|
attr_reader :with_polarity
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
UNKNOWN = Hashie::Mash.new polarity: 'unknown'
|
11
|
+
|
12
|
+
POS_ORDER = 'NRVGAO'
|
13
|
+
DEFAULT_POS = 'O'
|
14
|
+
POS_SHORT_MAP = {
|
15
|
+
adj: 'G',
|
16
|
+
adv: 'A',
|
17
|
+
noun: 'N',
|
18
|
+
propernoun: 'N',
|
19
|
+
prep: 'P',
|
20
|
+
verb: 'V',
|
21
|
+
other: DEFAULT_POS,
|
22
|
+
nil => DEFAULT_POS,
|
23
|
+
multi_word_expression: DEFAULT_POS,
|
24
|
+
}
|
12
25
|
|
13
26
|
def initialize lang:, lexicons:
|
14
27
|
@lang = lang
|
@@ -20,19 +33,9 @@ module Opener
|
|
20
33
|
map lexicons
|
21
34
|
end
|
22
35
|
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
+
def blank?
|
37
|
+
@lexicons.blank?
|
38
|
+
end
|
36
39
|
|
37
40
|
def by_negator lemma
|
38
41
|
@negators[lemma]
|
@@ -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.5
|
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-04 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
|