opener-polarity-tagger 2.4.2 → 3.1.1
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 +5 -5
- data/LICENSE.txt +13 -0
- data/README.md +115 -93
- data/bin/console +13 -0
- data/bin/polarity-tagger +8 -2
- data/bin/polarity-tagger-daemon +9 -5
- data/bin/polarity-tagger-server +8 -48
- data/core/LexiconMod.py +0 -13
- data/exec/polarity-tagger.rb +1 -11
- data/lib/opener/polarity_tagger.rb +12 -86
- data/lib/opener/polarity_tagger/cli.rb +43 -52
- data/lib/opener/polarity_tagger/external.rb +105 -0
- data/lib/opener/polarity_tagger/internal.rb +57 -0
- data/lib/opener/polarity_tagger/kaf/document.rb +53 -0
- data/lib/opener/polarity_tagger/kaf/term.rb +35 -0
- data/lib/opener/polarity_tagger/lexicon_map.rb +82 -0
- data/lib/opener/polarity_tagger/lexicons_cache.rb +68 -0
- data/lib/opener/polarity_tagger/server.rb +4 -5
- data/lib/opener/polarity_tagger/version.rb +5 -3
- data/opener-polarity-tagger.gemspec +10 -6
- data/task/requirements.rake +1 -1
- metadata +85 -75
@@ -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,68 @@
|
|
1
|
+
module Opener
|
2
|
+
class PolarityTagger
|
3
|
+
class LexiconsCache
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
extend MonitorMixin
|
7
|
+
super #MonitorMixin
|
8
|
+
|
9
|
+
@url = ENV['POLARITY_LEXICON_URL']
|
10
|
+
@path = ENV['POLARITY_LEXICON_PATH']
|
11
|
+
@cache = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def [] lang
|
15
|
+
synchronize do
|
16
|
+
@cache[lang] ||= load_lexicons lang
|
17
|
+
end
|
18
|
+
end
|
19
|
+
alias_method :get, :[]
|
20
|
+
|
21
|
+
def load_lexicons lang
|
22
|
+
lexicons = if @url then load_from_url lang else load_from_path lang end
|
23
|
+
|
24
|
+
LexiconMap.new lang: lang, lexicons: lexicons
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_from_url lang
|
28
|
+
url = "#{@url}&language_code=#{lang}"
|
29
|
+
puts "#{lang}: loading lexicons from url #{url}"
|
30
|
+
lexicons = JSON.parse HTTPClient.new.get(url).body
|
31
|
+
lexicons = lexicons['data'].map{ |l| Hashie::Mash.new l }
|
32
|
+
lexicons
|
33
|
+
end
|
34
|
+
|
35
|
+
def load_from_path lang
|
36
|
+
@path ||= 'core/general-lexicons'
|
37
|
+
dir = "#{@path}/#{lang.upcase}-lexicon"
|
38
|
+
config = Nokogiri::XML File.read "#{dir}/config.xml"
|
39
|
+
lexicons = []
|
40
|
+
|
41
|
+
config.css(:lexicon).each do |cl|
|
42
|
+
filename = cl.at(:filename).text
|
43
|
+
resource = cl.at(:resource).text
|
44
|
+
xml = Nokogiri::XML File.read "#{dir}/#{filename}"
|
45
|
+
puts "#{lang}: loading lexicons from the file #{filename}"
|
46
|
+
|
47
|
+
lexicons.concat(xml.css(:LexicalEntry).map do |le|
|
48
|
+
Hashie::Mash.new(
|
49
|
+
resource: resource,
|
50
|
+
identifier: le.attr(:id),
|
51
|
+
type: le.attr(:type),
|
52
|
+
lemma: le.at(:Lemma).attr(:writtenForm).downcase,
|
53
|
+
pos: le.attr(:partOfSpeech)&.downcase,
|
54
|
+
aspect: le.at(:Domain)&.attr(:aspect)&.downcase,
|
55
|
+
polarity: le.at(:Sentiment).attr(:polarity),
|
56
|
+
strength: le.at(:Sentiment).attr(:strength),
|
57
|
+
confidence_level: le.at(:Confidence)&.attr(:level),
|
58
|
+
domain_conditional: le.at(:Domain)&.attr(:conditional) == 'yes',
|
59
|
+
)
|
60
|
+
end)
|
61
|
+
end
|
62
|
+
|
63
|
+
lexicons
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
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
|
-
|
13
|
-
|
10
|
+
|
11
|
+
self.text_processor = PolarityTagger
|
12
|
+
self.accepted_params = [:input]
|
14
13
|
end # Server
|
15
14
|
end # PolarityTagger
|
16
15
|
end # Opener
|
@@ -9,6 +9,8 @@ Gem::Specification.new do |gem|
|
|
9
9
|
gem.homepage = 'http://opener-project.github.com/'
|
10
10
|
gem.extensions = ['ext/hack/Rakefile']
|
11
11
|
|
12
|
+
gem.license = 'Apache 2.0'
|
13
|
+
|
12
14
|
gem.required_ruby_version = '>= 1.9.2'
|
13
15
|
|
14
16
|
gem.files = Dir.glob([
|
@@ -20,22 +22,24 @@ Gem::Specification.new do |gem|
|
|
20
22
|
'*.gemspec',
|
21
23
|
'*_requirements.txt',
|
22
24
|
'README.md',
|
25
|
+
'LICENSE.txt',
|
23
26
|
'exec/**/*',
|
24
27
|
'task/*'
|
25
28
|
]).select { |file| File.file?(file) }
|
26
29
|
|
27
30
|
gem.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
|
28
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'
|
29
37
|
gem.add_dependency 'rake'
|
30
|
-
gem.add_dependency 'sinatra'
|
31
|
-
gem.add_dependency 'httpclient'
|
32
|
-
gem.add_dependency 'puma'
|
33
|
-
gem.add_dependency 'opener-daemons'
|
34
|
-
gem.add_dependency 'opener-webservice'
|
35
|
-
gem.add_dependency 'opener-core', '~> 1.0'
|
36
38
|
gem.add_dependency 'nokogiri'
|
37
39
|
gem.add_dependency 'cliver'
|
40
|
+
gem.add_dependency 'slop', '~> 3.5'
|
38
41
|
|
42
|
+
gem.add_development_dependency 'pry'
|
39
43
|
gem.add_development_dependency 'rspec', '~> 3.0'
|
40
44
|
gem.add_development_dependency 'cucumber'
|
41
45
|
end
|
data/task/requirements.rake
CHANGED
metadata
CHANGED
@@ -1,180 +1,183 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opener-polarity-tagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.1.1
|
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:
|
11
|
+
date: 2020-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: opener-daemons
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
15
22
|
version_requirements: !ruby/object:Gem::Requirement
|
16
23
|
requirements:
|
17
|
-
- -
|
24
|
+
- - "~>"
|
18
25
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
26
|
+
version: '2.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: opener-webservice
|
20
29
|
requirement: !ruby/object:Gem::Requirement
|
21
30
|
requirements:
|
22
|
-
- -
|
31
|
+
- - "~>"
|
23
32
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
25
|
-
prerelease: false
|
33
|
+
version: '2.1'
|
26
34
|
type: :runtime
|
27
|
-
|
28
|
-
name: sinatra
|
35
|
+
prerelease: false
|
29
36
|
version_requirements: !ruby/object:Gem::Requirement
|
30
37
|
requirements:
|
31
|
-
- -
|
38
|
+
- - "~>"
|
32
39
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
40
|
+
version: '2.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: opener-core
|
34
43
|
requirement: !ruby/object:Gem::Requirement
|
35
44
|
requirements:
|
36
|
-
- -
|
45
|
+
- - "~>"
|
37
46
|
- !ruby/object:Gem::Version
|
38
|
-
version: '
|
39
|
-
prerelease: false
|
47
|
+
version: '2.2'
|
40
48
|
type: :runtime
|
41
|
-
|
42
|
-
name: httpclient
|
49
|
+
prerelease: false
|
43
50
|
version_requirements: !ruby/object:Gem::Requirement
|
44
51
|
requirements:
|
45
|
-
- -
|
52
|
+
- - "~>"
|
46
53
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
54
|
+
version: '2.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: hashie
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
58
|
requirements:
|
50
|
-
- -
|
59
|
+
- - ">="
|
51
60
|
- !ruby/object:Gem::Version
|
52
61
|
version: '0'
|
53
|
-
prerelease: false
|
54
62
|
type: :runtime
|
55
|
-
|
56
|
-
name: puma
|
63
|
+
prerelease: false
|
57
64
|
version_requirements: !ruby/object:Gem::Requirement
|
58
65
|
requirements:
|
59
|
-
- -
|
66
|
+
- - ">="
|
60
67
|
- !ruby/object:Gem::Version
|
61
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
62
71
|
requirement: !ruby/object:Gem::Requirement
|
63
72
|
requirements:
|
64
|
-
- -
|
73
|
+
- - ">="
|
65
74
|
- !ruby/object:Gem::Version
|
66
75
|
version: '0'
|
67
|
-
prerelease: false
|
68
76
|
type: :runtime
|
69
|
-
|
70
|
-
name: opener-daemons
|
77
|
+
prerelease: false
|
71
78
|
version_requirements: !ruby/object:Gem::Requirement
|
72
79
|
requirements:
|
73
|
-
- -
|
80
|
+
- - ">="
|
74
81
|
- !ruby/object:Gem::Version
|
75
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: nokogiri
|
76
85
|
requirement: !ruby/object:Gem::Requirement
|
77
86
|
requirements:
|
78
|
-
- -
|
87
|
+
- - ">="
|
79
88
|
- !ruby/object:Gem::Version
|
80
89
|
version: '0'
|
81
|
-
prerelease: false
|
82
90
|
type: :runtime
|
83
|
-
|
84
|
-
name: opener-webservice
|
91
|
+
prerelease: false
|
85
92
|
version_requirements: !ruby/object:Gem::Requirement
|
86
93
|
requirements:
|
87
|
-
- -
|
94
|
+
- - ">="
|
88
95
|
- !ruby/object:Gem::Version
|
89
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: cliver
|
90
99
|
requirement: !ruby/object:Gem::Requirement
|
91
100
|
requirements:
|
92
|
-
- -
|
101
|
+
- - ">="
|
93
102
|
- !ruby/object:Gem::Version
|
94
103
|
version: '0'
|
95
|
-
prerelease: false
|
96
104
|
type: :runtime
|
97
|
-
|
98
|
-
name: opener-core
|
105
|
+
prerelease: false
|
99
106
|
version_requirements: !ruby/object:Gem::Requirement
|
100
107
|
requirements:
|
101
|
-
- -
|
108
|
+
- - ">="
|
102
109
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: slop
|
104
113
|
requirement: !ruby/object:Gem::Requirement
|
105
114
|
requirements:
|
106
|
-
- - ~>
|
115
|
+
- - "~>"
|
107
116
|
- !ruby/object:Gem::Version
|
108
|
-
version: '
|
109
|
-
prerelease: false
|
117
|
+
version: '3.5'
|
110
118
|
type: :runtime
|
111
|
-
|
112
|
-
name: nokogiri
|
119
|
+
prerelease: false
|
113
120
|
version_requirements: !ruby/object:Gem::Requirement
|
114
121
|
requirements:
|
115
|
-
- -
|
122
|
+
- - "~>"
|
116
123
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
124
|
+
version: '3.5'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry
|
118
127
|
requirement: !ruby/object:Gem::Requirement
|
119
128
|
requirements:
|
120
|
-
- -
|
129
|
+
- - ">="
|
121
130
|
- !ruby/object:Gem::Version
|
122
131
|
version: '0'
|
132
|
+
type: :development
|
123
133
|
prerelease: false
|
124
|
-
type: :runtime
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: cliver
|
127
134
|
version_requirements: !ruby/object:Gem::Requirement
|
128
135
|
requirements:
|
129
|
-
- -
|
136
|
+
- - ">="
|
130
137
|
- !ruby/object:Gem::Version
|
131
138
|
version: '0'
|
132
|
-
requirement: !ruby/object:Gem::Requirement
|
133
|
-
requirements:
|
134
|
-
- - '>='
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
version: '0'
|
137
|
-
prerelease: false
|
138
|
-
type: :runtime
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rspec
|
141
|
-
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - ~>
|
143
|
+
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '3.0'
|
146
|
-
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
149
|
requirements:
|
148
|
-
- - ~>
|
150
|
+
- - "~>"
|
149
151
|
- !ruby/object:Gem::Version
|
150
152
|
version: '3.0'
|
151
|
-
prerelease: false
|
152
|
-
type: :development
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: cucumber
|
155
|
-
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
|
-
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
161
163
|
requirements:
|
162
|
-
- -
|
164
|
+
- - ">="
|
163
165
|
- !ruby/object:Gem::Version
|
164
166
|
version: '0'
|
165
|
-
prerelease: false
|
166
|
-
type: :development
|
167
167
|
description: Polarity tagger for various languages.
|
168
168
|
email:
|
169
169
|
executables:
|
170
170
|
- polarity-tagger
|
171
171
|
- polarity-tagger-daemon
|
172
172
|
- polarity-tagger-server
|
173
|
+
- console
|
173
174
|
extensions:
|
174
175
|
- ext/hack/Rakefile
|
175
176
|
extra_rdoc_files: []
|
176
177
|
files:
|
178
|
+
- LICENSE.txt
|
177
179
|
- README.md
|
180
|
+
- bin/console
|
178
181
|
- bin/polarity-tagger
|
179
182
|
- bin/polarity-tagger-daemon
|
180
183
|
- bin/polarity-tagger-server
|
@@ -197,6 +200,12 @@ files:
|
|
197
200
|
- ext/hack/Rakefile
|
198
201
|
- lib/opener/polarity_tagger.rb
|
199
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
|
200
209
|
- lib/opener/polarity_tagger/public/markdown.css
|
201
210
|
- lib/opener/polarity_tagger/server.rb
|
202
211
|
- lib/opener/polarity_tagger/version.rb
|
@@ -209,7 +218,8 @@ files:
|
|
209
218
|
- task/requirements.rake
|
210
219
|
- task/test.rake
|
211
220
|
homepage: http://opener-project.github.com/
|
212
|
-
licenses:
|
221
|
+
licenses:
|
222
|
+
- Apache 2.0
|
213
223
|
metadata: {}
|
214
224
|
post_install_message:
|
215
225
|
rdoc_options: []
|
@@ -217,17 +227,17 @@ require_paths:
|
|
217
227
|
- lib
|
218
228
|
required_ruby_version: !ruby/object:Gem::Requirement
|
219
229
|
requirements:
|
220
|
-
- -
|
230
|
+
- - ">="
|
221
231
|
- !ruby/object:Gem::Version
|
222
232
|
version: 1.9.2
|
223
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
234
|
requirements:
|
225
|
-
- -
|
235
|
+
- - ">="
|
226
236
|
- !ruby/object:Gem::Version
|
227
237
|
version: '0'
|
228
238
|
requirements: []
|
229
239
|
rubyforge_project:
|
230
|
-
rubygems_version: 2.
|
240
|
+
rubygems_version: 2.7.8
|
231
241
|
signing_key:
|
232
242
|
specification_version: 4
|
233
243
|
summary: Polarity tagger for various languages.
|