opener-polarity-tagger 3.0.1 → 3.1.0

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
- SHA1:
3
- metadata.gz: 4b7da413e3b3dccd744b0fdab117ed827055c2cd
4
- data.tar.gz: cfecf678253bad98f8f3a6e09350daf1d57deced
2
+ SHA256:
3
+ metadata.gz: 1407a3f9dab798e58f92e033a6255151545d225c03a5e056a2f2dbb6878832ed
4
+ data.tar.gz: 9c79bb5e40a5882effff686d11f180f7d0ababbd5e2c9d11c0a4bab1a835eb22
5
5
  SHA512:
6
- metadata.gz: 376581bc6d9a2e5864c66d943d817a1ee6596d5430b9be5966693fd3f6538fac5e9b9116089ec8ef4552142e121602bf9edcd37135b902319182b7acbf3160bb
7
- data.tar.gz: 0d212c6acf29b3f969c90359342c0b9d20abf9862e0999c12f131a461ca67a58a588ee41c9c85bfd5faea1e8c9dd77bc3220503edcf5302b86ef93e62fcb5575
6
+ metadata.gz: 53b7b5649087d0ab9728df51ccf67dd7c6ff48eeaa0c6f4c3f74a257f07b610f29dc05b0919b1d2c379becb5b31f36c5609bca49583a3eb1d0b085df256ad9e7
7
+ data.tar.gz: f510909ce50427bb126773dedb60b21f3998fb80f49b9e602254e3adf1de1a658ce5d5a3b8ba7a452a78d764fa3960e455ce89d3d495c82147440e17780237ea
data/README.md CHANGED
@@ -178,6 +178,7 @@ At least you need the following system setup:
178
178
  * lxml installed
179
179
  * libarchive, on Debian/Ubuntu based systems this can be installed using
180
180
  `sudo apt-get install libarchive-dev`
181
+ * VUKafParserPy, install with sudo pip install 'https://github.com/opener-project/VU-kaf-parser/archive/v1.1.zip#egg=VUKafParserPy'
181
182
 
182
183
  Domain Adaption
183
184
  ---------------
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require_relative '../lib/opener/polarity_tagger'
5
+
6
+ begin
7
+ require 'awesome_print'
8
+ require 'pry'
9
+ binding.pry
10
+ rescue LoadError
11
+ require 'irb'
12
+ IRB.start
13
+ end
@@ -61,7 +61,6 @@ def show_lexicons(language, path=None):
61
61
  print '#'*30
62
62
  print
63
63
 
64
-
65
64
  class LexiconSent:
66
65
 
67
66
  def __init__(self,language='nl',lexicon_id=None, path=None):
@@ -79,10 +78,8 @@ class LexiconSent:
79
78
 
80
79
  self.load_resources(language,lexicon_id, path)
81
80
 
82
-
83
81
  self.__load_lexicon_xml()
84
82
 
85
-
86
83
  def load_resources(self,language,my_id=None, path=None):
87
84
  if path is None:
88
85
  path = os.path.dirname(__file__)
@@ -100,14 +97,9 @@ class LexiconSent:
100
97
  self.filename = os.path.join(this_folder,folder_per_lang[language],lexicons[id_to_load][0])
101
98
  self.resource = lexicons[id_to_load][1]+" . "+lexicons[id_to_load][2]
102
99
 
103
-
104
-
105
-
106
-
107
100
  def getResource(self):
108
101
  return self.resource
109
102
 
110
-
111
103
  def convert_pos_to_kaf(self,pos):
112
104
  my_map = {}
113
105
  my_map['adj'] = 'G'
@@ -119,7 +111,6 @@ class LexiconSent:
119
111
  my_map['verb']= 'V'
120
112
  return my_map.get(pos.lower(),'O')
121
113
 
122
-
123
114
  def __load_lexicon_xml(self):
124
115
  logging.debug('Loading lexicon from the file'+self.filename)
125
116
  from collections import defaultdict
@@ -160,16 +151,12 @@ class LexiconSent:
160
151
  logging.debug('Loaded: '+str(len(self.intensifiers))+' intensifiers')
161
152
  logging.debug('Loaded: '+str(len(self.sentLex))+' elements with polarity')
162
153
 
163
-
164
-
165
154
  def isIntensifier(self,lemma):
166
155
  return lemma in self.intensifiers
167
156
 
168
-
169
157
  def isNegator(self,lemma):
170
158
  return lemma in self.negators
171
159
 
172
-
173
160
  def getPolarity(self,lemma,pos):
174
161
  if pos:
175
162
  return self.sentLex.get((lemma,pos),'unknown'),pos
@@ -1,106 +1,27 @@
1
1
  require 'open3'
2
2
  require 'opener/core'
3
+ require 'nokogiri'
4
+ require 'hashie'
3
5
 
4
6
  require_relative 'polarity_tagger/version'
5
7
  require_relative 'polarity_tagger/cli'
8
+ require_relative 'polarity_tagger/external'
9
+
10
+ require_relative 'polarity_tagger/internal'
6
11
 
7
12
  module Opener
8
- ##
9
- # Ruby wrapper around the Python based polarity tagger.
10
- #
11
- # @!attribute [r] options
12
- # @return [Hash]
13
- #
14
- # @!attribute [r] args
15
- # @return [Array]
16
- #
17
13
  class PolarityTagger
18
- attr_reader :options, :args
19
14
 
20
- ##
21
- # @param [Hash] options
22
- #
23
- # @option options [Array] :args Collection of arbitrary arguments to pass
24
- # to the underlying kernel.
25
- #
26
- # @option options [String] :resource_path Path to the lexicons to use.
27
- #
28
- def initialize(options = {})
15
+ def initialize options = {}
29
16
  @args = options.delete(:args) || []
30
17
  @options = options
18
+ @klass = if ENV['LEGACY'] then External else Internal end
19
+ @proc = @klass.new args: @args
31
20
  end
32
21
 
33
- ##
34
- # Returns a String containing the command to use for executing the kernel.
35
- #
36
- # @return [String]
37
- #
38
- def command
39
- return "#{adjust_python_path} python -E #{kernel} #{lexicon_path} #{args.join(" ")}"
22
+ def run input
23
+ @proc.run input
40
24
  end
41
25
 
42
- ##
43
- # @return [String]
44
- #
45
- def lexicon_path
46
- path = options[:resource_path] || ENV['RESOURCE_PATH'] ||
47
- ENV['POLARITY_LEXICON_PATH']
48
-
49
- return path ? "--lexicon-path #{path}" : nil
50
- end
51
-
52
- ##
53
- # Processes the input and returns an Array containing the output of STDOUT,
54
- # STDERR and an object containing process information.
55
- #
56
- # @param [String] input The text of which to detect the language.
57
- # @return [Array]
58
- #
59
- def run(input)
60
- stdout, stderr, process = capture(input)
61
-
62
- raise stderr unless process.success?
63
-
64
- return stdout
65
- end
66
-
67
- protected
68
-
69
- ##
70
- # @return [String]
71
- #
72
- def adjust_python_path
73
- site_packages = File.join(core_dir, 'site-packages')
74
-
75
- "env PYTHONPATH=#{site_packages}:$PYTHONPATH"
76
- end
77
-
78
- ##
79
- # capture3 method doesn't work properly with Jruby, so
80
- # this is a workaround
81
- #
82
- def capture(input)
83
- Open3.popen3(*command.split(" ")) {|i, o, e, t|
84
- out_reader = Thread.new { o.read }
85
- err_reader = Thread.new { e.read }
86
- i.write input
87
- i.close
88
- [out_reader.value, err_reader.value, t.value]
89
- }
90
- end
91
-
92
- ##
93
- # @return [String]
94
- #
95
- def core_dir
96
- return File.expand_path('../../../core', __FILE__)
97
- end
98
-
99
- ##
100
- # @return [String]
101
- #
102
- def kernel
103
- return File.join(core_dir, 'poltagger-basic-multi.py')
104
- end
105
- end # PolarityTagger
106
- end # Opener
26
+ end
27
+ end
@@ -26,7 +26,7 @@ module Opener
26
26
  # @return [Slop]
27
27
  #
28
28
  def configure_slop
29
- return Slop.new(:strict => false, :indent => 2, :help => true) do
29
+ Slop.new strict: false, indent: 2, help: true do
30
30
  banner 'Usage: polarity-tagger [OPTIONS] -- [PYTHON OPTIONS]'
31
31
 
32
32
  separator <<-EOF.chomp
@@ -62,6 +62,7 @@ Examples:
62
62
  end
63
63
  end
64
64
  end
65
- end # CLI
66
- end # PolarityTagger
67
- end # Opener
65
+
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,105 @@
1
+ module Opener
2
+ class PolarityTagger
3
+ ##
4
+ # Ruby wrapper around the Python based polarity tagger.
5
+ #
6
+ # @!attribute [r] options
7
+ # @return [Hash]
8
+ #
9
+ # @!attribute [r] args
10
+ # @return [Array]
11
+ #
12
+ class External
13
+
14
+ attr_reader :options, :args
15
+
16
+ ##
17
+ # @param [Hash] options
18
+ #
19
+ # @option options [Array] :args Collection of arbitrary arguments to pass
20
+ # to the underlying kernel.
21
+ #
22
+ # @option options [String] :resource_path Path to the lexicons to use.
23
+ #
24
+ def initialize options = {}
25
+ @args = options.delete(:args) || []
26
+ @options = options
27
+ end
28
+
29
+ ##
30
+ # Returns a String containing the command to use for executing the kernel.
31
+ #
32
+ # @return [String]
33
+ #
34
+ def command
35
+ return "#{adjust_python_path} python -E #{kernel} #{lexicon_path} #{args.join(" ")}"
36
+ end
37
+
38
+ ##
39
+ # @return [String]
40
+ #
41
+ def lexicon_path
42
+ path = options[:resource_path] || ENV['RESOURCE_PATH'] ||
43
+ ENV['POLARITY_LEXICON_PATH']
44
+
45
+ return path ? "--lexicon-path #{path}" : nil
46
+ end
47
+
48
+ ##
49
+ # Processes the input and returns an Array containing the output of STDOUT,
50
+ # STDERR and an object containing process information.
51
+ #
52
+ # @param [String] input The text of which to detect the language.
53
+ # @return [Array]
54
+ #
55
+ def run(input)
56
+ stdout, stderr, process = capture(input)
57
+
58
+ raise stderr unless process.success?
59
+ puts stderr if ENV['DEBUG']
60
+
61
+ return stdout
62
+ end
63
+
64
+ protected
65
+
66
+ ##
67
+ # @return [String]
68
+ #
69
+ def adjust_python_path
70
+ site_packages = File.join(core_dir, 'site-packages')
71
+
72
+ "env PYTHONPATH=#{site_packages}:$PYTHONPATH"
73
+ end
74
+
75
+ ##
76
+ # capture3 method doesn't work properly with Jruby, so
77
+ # this is a workaround
78
+ #
79
+ def capture(input)
80
+ Open3.popen3(*command.split(" ")) {|i, o, e, t|
81
+ out_reader = Thread.new { o.read }
82
+ err_reader = Thread.new { e.read }
83
+ i.write input
84
+ i.close
85
+ [out_reader.value, err_reader.value, t.value]
86
+ }
87
+ end
88
+
89
+ ##
90
+ # @return [String]
91
+ #
92
+ def core_dir
93
+ File.expand_path '../../../../core', __FILE__
94
+ end
95
+
96
+ ##
97
+ # @return [String]
98
+ #
99
+ def kernel
100
+ File.join core_dir, 'poltagger-basic-multi.py'
101
+ end
102
+
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,57 @@
1
+ require_relative 'lexicons_cache'
2
+ require_relative 'lexicon_map'
3
+ require_relative 'kaf/document'
4
+
5
+ module Opener
6
+ class PolarityTagger
7
+ class Internal
8
+
9
+ DESC = 'VUA polarity tagger multilanguage'
10
+ LAST_EDITED = '21may2014'
11
+ VERSION = '1.2'
12
+
13
+ def initialize ignore_pos: false, **params
14
+ @cache = LexiconsCache.new
15
+
16
+ @ignore_pos = ignore_pos
17
+ end
18
+
19
+ def run input
20
+ @kaf = KAF::Document.from_xml input
21
+ @map = @kaf.map = @cache[@kaf.language]
22
+
23
+ negators = 0
24
+ @kaf.terms.each do |t|
25
+ lemma = t.lemma&.downcase
26
+ pos = if @ignore_pos then nil else t.pos end
27
+ attrs = Hashie::Mash.new
28
+
29
+ lexicon, polarity_pos = @map.by_polarity lemma, pos
30
+
31
+ if lexicon.polarity != 'unknown'
32
+ attrs.polarity = lexicon.polarity
33
+ end
34
+ if l = @map.by_negator(lemma)
35
+ negators += 1
36
+ lexicon, polarity = l, nil
37
+ attrs.sentiment_modifier = 'shifter'
38
+ end
39
+ if l = @map.by_intensifier(lemma)
40
+ lexicon, polarity = l, nil
41
+ attrs.sentiment_modifier = 'intensifier'
42
+ end
43
+
44
+ if attrs.size > 0
45
+ attrs.resource = lexicon.resource if lexicon.resource
46
+ t.setPolarity attrs, polarity_pos
47
+ end
48
+ end
49
+
50
+ @kaf.add_linguistic_processor DESC, "#{LAST_EDITED}_#{VERSION}", 'terms'
51
+
52
+ @kaf.to_xml
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,53 @@
1
+ require_relative 'term'
2
+
3
+ module Opener
4
+ module KAF
5
+ class Document
6
+
7
+ attr_reader :document
8
+ attr_reader :lexicons
9
+
10
+ attr_accessor :map
11
+
12
+ def initialize xml
13
+ @document = xml
14
+ end
15
+
16
+ def self.from_xml xml
17
+ new Nokogiri::XML xml
18
+ end
19
+
20
+ def language
21
+ @language ||= @document.at_xpath('KAF').attr 'xml:lang'
22
+ end
23
+
24
+ def terms
25
+ @terms ||= collection 'KAF/terms/term', Term
26
+ end
27
+
28
+ def add_linguistic_processor name, version, layer, timestamp: false
29
+ header = @document.at('kafHeader') || @document.root.add_child('<kafHeader/>')
30
+ procs = header.css('linguisticProcessors').find{ |l| l.attr(:layer) == layer }
31
+ procs ||= header.add_child("<linguisticProcessors layer='#{layer}'/>")
32
+ lp = procs.add_child('<lp/>')
33
+ lp.attr(
34
+ timestamp: if timestamp then Time.now.iso8601 else '*' end,
35
+ version: version,
36
+ name: name,
37
+ )
38
+ lp
39
+ end
40
+
41
+ def to_xml
42
+ @document.to_xml indent: 2
43
+ end
44
+
45
+ protected
46
+
47
+ def collection query, wrapper
48
+ @document.xpath(query).map{ |node| wrapper.new self, node }
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -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,67 @@
1
+ module Opener
2
+ class PolarityTagger
3
+ class LexiconsCache
4
+
5
+ def initialize
6
+ extend MonitorMixin
7
+
8
+ @url = ENV['POLARITY_LEXICON_URL']
9
+ @path = ENV['POLARITY_LEXICON_PATH']
10
+ @cache = {}
11
+ end
12
+
13
+ def [] lang
14
+ synchronize do
15
+ @cache[lang] ||= load_lexicons lang
16
+ end
17
+ end
18
+ alias_method :get, :[]
19
+
20
+ def load_lexicons lang
21
+ lexicons = if @url then load_from_url lang else load_from_path lang end
22
+
23
+ LexiconMap.new lang: lang, lexicons: lexicons
24
+ end
25
+
26
+ def load_from_url lang
27
+ url = "#{@url}&language_code=#{lang}"
28
+ puts "#{lang}: loading lexicons from url #{url}"
29
+ lexicons = JSON.parse HTTPClient.new.get(url).body
30
+ lexicons = lexicons['data'].map{ |l| Hashie::Mash.new l }
31
+ lexicons
32
+ end
33
+
34
+ def load_from_path lang
35
+ @path ||= 'core/general-lexicons'
36
+ dir = "#{@path}/#{lang.upcase}-lexicon"
37
+ config = Nokogiri::XML File.read "#{dir}/config.xml"
38
+ lexicons = []
39
+
40
+ config.css(:lexicon).each do |cl|
41
+ filename = cl.at(:filename).text
42
+ resource = cl.at(:resource).text
43
+ xml = Nokogiri::XML File.read "#{dir}/#{filename}"
44
+ puts "#{lang}: loading lexicons from the file #{filename}"
45
+
46
+ lexicons.concat(xml.css(:LexicalEntry).map do |le|
47
+ Hashie::Mash.new(
48
+ resource: resource,
49
+ identifier: le.attr(:id),
50
+ type: le.attr(:type),
51
+ lemma: le.at(:Lemma).attr(:writtenForm).downcase,
52
+ pos: le.attr(:partOfSpeech)&.downcase,
53
+ aspect: le.at(:Domain)&.attr(:aspect)&.downcase,
54
+ polarity: le.at(:Sentiment).attr(:polarity),
55
+ strength: le.at(:Sentiment).attr(:strength),
56
+ confidence_level: le.at(:Confidence)&.attr(:level),
57
+ domain_conditional: le.at(:Domain)&.attr(:conditional) == 'yes',
58
+ )
59
+ end)
60
+ end
61
+
62
+ lexicons
63
+ end
64
+
65
+ end
66
+ end
67
+ end
@@ -1,5 +1,7 @@
1
1
  module Opener
2
2
  class PolarityTagger
3
- VERSION = '3.0.1'
4
- end # PolarityTagger
5
- end # Opener
3
+
4
+ VERSION = '3.1.0'
5
+
6
+ end
7
+ end
@@ -33,11 +33,13 @@ 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 'hashie'
36
37
  gem.add_dependency 'rake'
37
38
  gem.add_dependency 'nokogiri'
38
39
  gem.add_dependency 'cliver'
39
40
  gem.add_dependency 'slop', '~> 3.5'
40
41
 
42
+ gem.add_development_dependency 'pry'
41
43
  gem.add_development_dependency 'rspec', '~> 3.0'
42
44
  gem.add_development_dependency 'cucumber'
43
45
  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.0.1
4
+ version: 3.1.0
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: 2015-01-12 00:00:00.000000000 Z
11
+ date: 2020-09-22 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: hashie
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: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '3.5'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: rspec
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -137,17 +165,19 @@ dependencies:
137
165
  - !ruby/object:Gem::Version
138
166
  version: '0'
139
167
  description: Polarity tagger for various languages.
140
- email:
168
+ email:
141
169
  executables:
142
- - polarity-tagger-server
143
- - polarity-tagger-daemon
144
170
  - polarity-tagger
171
+ - polarity-tagger-daemon
172
+ - polarity-tagger-server
173
+ - console
145
174
  extensions:
146
175
  - ext/hack/Rakefile
147
176
  extra_rdoc_files: []
148
177
  files:
149
178
  - LICENSE.txt
150
179
  - README.md
180
+ - bin/console
151
181
  - bin/polarity-tagger
152
182
  - bin/polarity-tagger-daemon
153
183
  - bin/polarity-tagger-server
@@ -170,6 +200,12 @@ files:
170
200
  - ext/hack/Rakefile
171
201
  - lib/opener/polarity_tagger.rb
172
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
173
209
  - lib/opener/polarity_tagger/public/markdown.css
174
210
  - lib/opener/polarity_tagger/server.rb
175
211
  - lib/opener/polarity_tagger/version.rb
@@ -185,7 +221,7 @@ homepage: http://opener-project.github.com/
185
221
  licenses:
186
222
  - Apache 2.0
187
223
  metadata: {}
188
- post_install_message:
224
+ post_install_message:
189
225
  rdoc_options: []
190
226
  require_paths:
191
227
  - lib
@@ -200,10 +236,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
236
  - !ruby/object:Gem::Version
201
237
  version: '0'
202
238
  requirements: []
203
- rubyforge_project:
204
- rubygems_version: 2.2.2
205
- signing_key:
239
+ rubyforge_project:
240
+ rubygems_version: 2.7.8
241
+ signing_key:
206
242
  specification_version: 4
207
243
  summary: Polarity tagger for various languages.
208
244
  test_files: []
209
- has_rdoc: