opener-chained-daemon 3.0.1 → 3.0.5

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: ccb24c093fd076d1def041d0a55cc688ba0116d1c1e5304a4b6a3b69de620de5
4
- data.tar.gz: bfbfa252adcdb9681a3cf0f9dc7d9e545c62e16fcde69a002544c5e0e85c1a68
3
+ metadata.gz: 3d0b1b563afb30110fd2592c79c196622df4388aa370b98356e951cef818db73
4
+ data.tar.gz: bd223a5042e3ccf8fa04b736cb6d8403f20173f45d7bbd306a96fc254c5a77a8
5
5
  SHA512:
6
- metadata.gz: 24f27e30dc5247f443139c316c33d5ffb68ba473cad229b338b705ed6ad2b50ecf9ec41f64cf459e3cec859b53a0aaac12b28e2fb22a8e84ea344f9ec2eee2f3
7
- data.tar.gz: e0119364024b687b412b7f0a4dd1fa591960ca5028bbdd261fb10069bda1c5575e3c38d4fb187dff9df31de276a46b2c0fd3f277ddfb4371f570fcdad34c90b2
6
+ metadata.gz: 0ab381cdb194d8d189478f775749d2e18c9ab62105ae731a86217f588d5e7164569845ea7bb919b7d5f7761209b5e53ae47959a6facc2706bee461f96081b00a
7
+ data.tar.gz: 9ca55c537ce234fc74748d116a328f82da37fb7815ac6cb6bf0af9172e0839eb677e7fe30e84370fc8230e472dd5cc5d211e41899e3ba63a5acd0e1191b8efc3
@@ -3,8 +3,9 @@ deploy_to = "/var/www/#{APP_NAME}"
3
3
  run_path = "/var/run/#{APP_NAME}"
4
4
  log_path = "/var/log/#{APP_NAME}"
5
5
 
6
- threads 0,1
6
+ workers ENV['WORKERS']&.to_i || 1 unless RUBY_ENGINE == 'jruby'
7
+ threads 0, ENV['THREADS']&.to_i || 16
7
8
 
8
9
  bind 'tcp://0.0.0.0:9292'
9
- bind "unix://#{run_path}/chained-daemon-server.sock"
10
+ #bind "unix://#{run_path}/chained-daemon-server.sock"
10
11
 
@@ -5,16 +5,20 @@ require 'google/cloud/translate'
5
5
 
6
6
  require 'opener/daemons'
7
7
 
8
+ require_relative 'chained_daemon/languages_cache'
8
9
  require 'opener/language_identifier'
9
10
  require 'opener/tokenizer'
10
- # require ner before pos_tagger for compatible opennlp
11
- require 'opener/pos_tagger'
11
+ require 'opener/pos_tagger' if RUBY_ENGINE == 'jruby'
12
12
  require 'opener/polarity_tagger'
13
13
  require 'opener/property_tagger'
14
14
  require 'opener/opinion_detector_basic'
15
+ require 'opener/stanza/tokenizer_pos'
15
16
 
16
17
  require_relative 'chained_daemon/chained_daemon'
17
18
  require_relative 'chained_daemon/cli'
18
19
  require_relative 'chained_daemon/microsoft_translator'
19
20
  require_relative 'chained_daemon/webservice'
20
21
 
22
+ require_relative 'kaf/document'
23
+ require_relative 'kaf/term'
24
+
@@ -8,8 +8,9 @@ module Opener
8
8
  @options = DEFAULT_OPTIONS.merge options
9
9
  @queue_map = {
10
10
  'opener-language-identifier': Opener::LanguageIdentifier.new,
11
- 'opener-tokenizer': Opener::Tokenizer.new,
12
- 'opener-pos-tagger': Opener::POSTagger.new,
11
+ 'stanza-tokenizer-pos': Stanza::TokenizerPos.new, # replace this tokenizer-pos with both below with you dont have a stanza server
12
+ #'opener-tokenizer': Opener::Tokenizer.new,
13
+ #'opener-pos-tagger': Opener::POSTagger.new,
13
14
  'opener-polarity-tagger': Opener::PolarityTagger.new,
14
15
  'opener-property-tagger': Opener::PropertyTagger.new,
15
16
  'opener-opinion-detector-basic': Opener::OpinionDetectorBasic.new,
@@ -20,7 +21,7 @@ module Opener
20
21
  params ||= {}
21
22
  params.deep_symbolize_keys!
22
23
  params[:translate_languages] ||= []
23
- params[:cache_keys] ||= {}
24
+ params[:cache_keys] = params[:cache_keys]&.sort&.to_h || {}
24
25
 
25
26
  lang = nil
26
27
  output = nil
@@ -0,0 +1,45 @@
1
+ module Opener
2
+ class ChainedDaemon
3
+ class LanguagesCache
4
+
5
+ include MonitorMixin
6
+
7
+ UPDATE_INTERVAL = (ENV['CACHE_EXPIRE_MINS']&.to_i || 5).minutes
8
+
9
+ def initialize
10
+ super #MonitorMixin
11
+
12
+ @url = ENV['SUPPORTED_LANGUAGES_URL']
13
+ @cache = []
14
+ @last_updated = nil
15
+ end
16
+
17
+ def get
18
+ synchronize do
19
+ break @cache if @last_updated and @last_updated > UPDATE_INTERVAL.ago
20
+ cache_update
21
+ end
22
+ @cache
23
+ end
24
+
25
+ def cache_update
26
+ puts "loading supported languages from url #{@url}"
27
+
28
+ languages = JSON.parse http.get(@url).body
29
+ @cache = languages['data'].map { |l| l['code'] }
30
+ @last_updated = Time.now
31
+ end
32
+
33
+ def http
34
+ return @http if @http
35
+
36
+ @http = HTTPClient.new
37
+ @http.send_timeout = 120
38
+ @http.receive_timeout = 120
39
+ @http.connect_timeout = 120
40
+ @http
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -1,7 +1,7 @@
1
1
  module Opener
2
2
  class ChainedDaemon
3
3
 
4
- VERSION = '3.0.1'
4
+ VERSION = '3.0.5'
5
5
 
6
6
  end
7
7
  end
@@ -12,17 +12,16 @@ module Opener
12
12
  route do |r|
13
13
  response.status = 403 and r.halt if r.params['auth_token'] != TOKEN
14
14
 
15
- r.get 'sentiment.kaf' do
16
- params = r.params.except 'input'
17
- params.deep_symbolize_keys!
18
- kaf = processor.run r.params['input'], **params
15
+ sentiment = -> do
16
+ r.params.deep_symbolize_keys!
17
+ kaf = processor.run r.params[:input], **r.params.except(:input)
19
18
 
20
19
  response['Content-Type'] = 'text/xml'
21
20
  kaf
22
21
  end
23
- end
24
22
 
25
- def clear_cache
23
+ r.get 'sentiment.kaf', &sentiment
24
+ r.post 'sentiment.kaf', &sentiment
26
25
  end
27
26
 
28
27
  end
@@ -0,0 +1,89 @@
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 texts
29
+ @texts ||= collection 'KAF/texts/wf', Text
30
+ end
31
+
32
+ def raw
33
+ @document.at('raw').text
34
+ end
35
+
36
+ def add_linguistic_processor name, version, layer, timestamp: false
37
+ header = @document.at('kafHeader') || @document.root.add_child('<kafHeader/>').first
38
+ procs = header.css('linguisticProcessors').find{ |l| l.attr(:layer) == layer }
39
+ procs ||= header.add_child("<linguisticProcessors layer='#{layer}'/>").first
40
+ lp = procs.add_child('<lp/>')
41
+ lp.attr(
42
+ timestamp: if timestamp then Time.now.iso8601 else '*' end,
43
+ version: version,
44
+ name: name,
45
+ )
46
+ lp
47
+ end
48
+
49
+ def add_word_form params
50
+ text = @document.at('text') || @document.root.add_child('<text/>').first
51
+ wf = text.add_child("<wf>#{params[:text]}</wf>")
52
+ attrs = {
53
+ wid: "w#{params[:wid]}",
54
+ sent: params[:sid],
55
+ para: params[:para],
56
+ offset: params[:offset],
57
+ length: params[:length],
58
+ }
59
+ wf.attr attrs
60
+ end
61
+
62
+ def add_term params
63
+ text = @document.at('terms') || @document.root.add_child('<terms/>').first
64
+ term = text.add_child("<term/>")
65
+ attrs = {
66
+ tid: "t#{params[:tid]}",
67
+ type: params[:type],
68
+ lemma: params[:lemma],
69
+ text: params[:text],
70
+ pos: params[:pos],
71
+ morphofeat: params[:morphofeat],
72
+ }
73
+ term.attr attrs
74
+ term.first.add_child("<span><target id='w#{params[:wid]}' /></span>")
75
+ end
76
+
77
+ def to_xml
78
+ @document.to_xml indent: 2
79
+ end
80
+
81
+ protected
82
+
83
+ def collection query, wrapper
84
+ @document.xpath(query).map{ |node| wrapper.new self, node }
85
+ end
86
+
87
+ end
88
+ end
89
+ 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,30 @@
1
+ module Opener
2
+ module KAF
3
+ class WordForm
4
+ def initialize(document, xml_node)
5
+ @document = document
6
+ @xml_node = xml_node
7
+ end
8
+
9
+ def id
10
+ return @id ||= @xml_node.attr('wid')
11
+ end
12
+
13
+ def text
14
+ return @text ||= @xml_node.text
15
+ end
16
+
17
+ def length
18
+ return @length ||= @xml_node.attr('length').to_i
19
+ end
20
+
21
+ def offset
22
+ return @offset ||= @xml_node.attr('offset').to_i
23
+ end
24
+
25
+ def paragraph
26
+ return @paragraph ||= @xml_node.attr('para').to_i
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,86 @@
1
+ module Opener
2
+ module Stanza
3
+ class TokenizerPos
4
+
5
+ DESC = 'Tokenizer / POS by Stanza'
6
+ VERSION = '1.0'
7
+
8
+ BASE_URL = ENV['STANZA_SERVER']
9
+ LANGUAGES_CACHE = Opener::ChainedDaemon::LanguagesCache.new
10
+
11
+ POS = {
12
+ 'DET' => 'D',
13
+ 'ADJ' => 'G',
14
+ 'NOUN' => 'N',
15
+ 'VERB' => 'V',
16
+ 'AUX' => 'V',
17
+ 'ADV' => 'A',
18
+ 'CCONJ' => 'J',
19
+ 'PUNCT' => '.',
20
+ 'ADP' => 'P',
21
+ 'PRON' => 'Q',
22
+ 'PROPN' => 'R',
23
+ 'PART' => 'P',
24
+ 'NUM' => 'O',
25
+ 'X' => 'O',
26
+ 'SYM' => 'O',
27
+ 'SCONJ' => 'P',
28
+ 'INTJ' => 'O',
29
+ }
30
+
31
+ POS_OPEN = %w[N R G V A O]
32
+
33
+ def run input, params
34
+ raise 'missing Stanza server' if ENV['STANZA_SERVER'].blank?
35
+
36
+ kaf = KAF::Document.from_xml input
37
+
38
+ unless LANGUAGES_CACHE.get.include? kaf.language
39
+ raise Core::UnsupportedLanguageError.new kaf.language
40
+ end
41
+
42
+ response = Faraday.post BASE_URL, {lang: kaf.language, input: kaf.raw}.to_query
43
+ raise Core::UnsupportedLanguageError, kaf.language if response.status == 406
44
+ raise response.body if response.status >= 400
45
+ tokens = JSON.parse response.body
46
+
47
+ w_index = 0
48
+ tokens.each_with_index do |sentence, s_index|
49
+ sentence.each_with_index do |word|
50
+ w_index += 1
51
+ misc = word['misc']
52
+ offset = misc.match(/start_char=(\d+)|/)[1].to_i
53
+ length = misc.match(/end_char=(\d+)/)[1].to_i - offset
54
+
55
+ u_pos = word['upos']
56
+ pos = POS[u_pos]
57
+ raise "Didn't find a map for #{u_pos}" if pos.nil?
58
+ type = if POS_OPEN.include? pos then 'open' else 'close' end
59
+
60
+ params = {
61
+ wid: w_index,
62
+ sid: s_index + 1,
63
+ tid: w_index,
64
+ para: 1,
65
+ offset: offset,
66
+ length: length,
67
+ text: word['text'],
68
+ lemma: word['lemma'],
69
+ morphofeat: u_pos,
70
+ pos: pos,
71
+ type: type,
72
+ }
73
+
74
+ kaf.add_word_form params
75
+ kaf.add_term params
76
+ end
77
+ end
78
+
79
+ kaf.add_linguistic_processor DESC, "#{VERSION}", 'text', timestamp: true
80
+
81
+ kaf.to_xml
82
+ end
83
+
84
+ end
85
+ end
86
+ end
@@ -27,15 +27,17 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency 'hashie'
28
28
 
29
29
  spec.add_dependency 'roda'
30
+ spec.add_dependency 'rack-timeout'
31
+ spec.add_dependency 'faraday'
30
32
  spec.add_dependency 'opener-daemons', '~> 2.7.1'
31
33
  spec.add_dependency 'opener-callback-handler', '~> 1.0'
32
34
 
33
35
  spec.add_dependency 'opener-language-identifier', '>= 4.4.0'
34
36
  spec.add_dependency 'opener-tokenizer', '>= 2.2.0'
35
37
  spec.add_dependency 'opener-pos-tagger', '>= 3.2.0'
36
- spec.add_dependency 'opener-polarity-tagger', '>= 3.2.0'
37
- spec.add_dependency 'opener-property-tagger', '>= 3.3.0'
38
- spec.add_dependency 'opener-opinion-detector-basic', '>= 3.2.0'
38
+ spec.add_dependency 'opener-polarity-tagger', '>= 3.2.7'
39
+ spec.add_dependency 'opener-property-tagger', '>= 3.3.4'
40
+ spec.add_dependency 'opener-opinion-detector-basic', '>= 3.2.3'
39
41
 
40
42
  spec.add_development_dependency 'bundler', '~> 1.3'
41
43
  spec.add_development_dependency 'rake'
metadata CHANGED
@@ -1,276 +1,304 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opener-chained-daemon
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.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-10-07 00:00:00.000000000 Z
11
+ date: 2020-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: activesupport
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - ">="
17
18
  - !ruby/object:Gem::Version
18
19
  version: '0'
19
- name: activesupport
20
- prerelease: false
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
+ name: google-cloud-translate
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - "~>"
31
32
  - !ruby/object:Gem::Version
32
33
  version: '1.0'
33
- name: google-cloud-translate
34
- prerelease: false
35
34
  type: :runtime
35
+ prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
+ name: httpclient
42
43
  requirement: !ruby/object:Gem::Requirement
43
44
  requirements:
44
45
  - - ">="
45
46
  - !ruby/object:Gem::Version
46
47
  version: '0'
47
- name: httpclient
48
- prerelease: false
49
48
  type: :runtime
49
+ prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
+ name: hashie
56
57
  requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
59
  - - ">="
59
60
  - !ruby/object:Gem::Version
60
61
  version: '0'
61
- name: hashie
62
+ type: :runtime
62
63
  prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: roda
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
63
76
  type: :runtime
77
+ prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
84
+ name: rack-timeout
70
85
  requirement: !ruby/object:Gem::Requirement
71
86
  requirements:
72
87
  - - ">="
73
88
  - !ruby/object:Gem::Version
74
89
  version: '0'
75
- name: roda
90
+ type: :runtime
76
91
  prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: faraday
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
77
104
  type: :runtime
105
+ prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - ">="
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
83
111
  - !ruby/object:Gem::Dependency
112
+ name: opener-daemons
84
113
  requirement: !ruby/object:Gem::Requirement
85
114
  requirements:
86
115
  - - "~>"
87
116
  - !ruby/object:Gem::Version
88
117
  version: 2.7.1
89
- name: opener-daemons
90
- prerelease: false
91
118
  type: :runtime
119
+ prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
124
  version: 2.7.1
97
125
  - !ruby/object:Gem::Dependency
126
+ name: opener-callback-handler
98
127
  requirement: !ruby/object:Gem::Requirement
99
128
  requirements:
100
129
  - - "~>"
101
130
  - !ruby/object:Gem::Version
102
131
  version: '1.0'
103
- name: opener-callback-handler
104
- prerelease: false
105
132
  type: :runtime
133
+ prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
138
  version: '1.0'
111
139
  - !ruby/object:Gem::Dependency
140
+ name: opener-language-identifier
112
141
  requirement: !ruby/object:Gem::Requirement
113
142
  requirements:
114
143
  - - ">="
115
144
  - !ruby/object:Gem::Version
116
145
  version: 4.4.0
117
- name: opener-language-identifier
118
- prerelease: false
119
146
  type: :runtime
147
+ prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - ">="
123
151
  - !ruby/object:Gem::Version
124
152
  version: 4.4.0
125
153
  - !ruby/object:Gem::Dependency
154
+ name: opener-tokenizer
126
155
  requirement: !ruby/object:Gem::Requirement
127
156
  requirements:
128
157
  - - ">="
129
158
  - !ruby/object:Gem::Version
130
159
  version: 2.2.0
131
- name: opener-tokenizer
132
- prerelease: false
133
160
  type: :runtime
161
+ prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - ">="
137
165
  - !ruby/object:Gem::Version
138
166
  version: 2.2.0
139
167
  - !ruby/object:Gem::Dependency
168
+ name: opener-pos-tagger
140
169
  requirement: !ruby/object:Gem::Requirement
141
170
  requirements:
142
171
  - - ">="
143
172
  - !ruby/object:Gem::Version
144
173
  version: 3.2.0
145
- name: opener-pos-tagger
146
- prerelease: false
147
174
  type: :runtime
175
+ prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
178
  - - ">="
151
179
  - !ruby/object:Gem::Version
152
180
  version: 3.2.0
153
181
  - !ruby/object:Gem::Dependency
182
+ name: opener-polarity-tagger
154
183
  requirement: !ruby/object:Gem::Requirement
155
184
  requirements:
156
185
  - - ">="
157
186
  - !ruby/object:Gem::Version
158
- version: 3.2.0
159
- name: opener-polarity-tagger
160
- prerelease: false
187
+ version: 3.2.7
161
188
  type: :runtime
189
+ prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
192
  - - ">="
165
193
  - !ruby/object:Gem::Version
166
- version: 3.2.0
194
+ version: 3.2.7
167
195
  - !ruby/object:Gem::Dependency
196
+ name: opener-property-tagger
168
197
  requirement: !ruby/object:Gem::Requirement
169
198
  requirements:
170
199
  - - ">="
171
200
  - !ruby/object:Gem::Version
172
- version: 3.3.0
173
- name: opener-property-tagger
174
- prerelease: false
201
+ version: 3.3.4
175
202
  type: :runtime
203
+ prerelease: false
176
204
  version_requirements: !ruby/object:Gem::Requirement
177
205
  requirements:
178
206
  - - ">="
179
207
  - !ruby/object:Gem::Version
180
- version: 3.3.0
208
+ version: 3.3.4
181
209
  - !ruby/object:Gem::Dependency
210
+ name: opener-opinion-detector-basic
182
211
  requirement: !ruby/object:Gem::Requirement
183
212
  requirements:
184
213
  - - ">="
185
214
  - !ruby/object:Gem::Version
186
- version: 3.2.0
187
- name: opener-opinion-detector-basic
188
- prerelease: false
215
+ version: 3.2.3
189
216
  type: :runtime
217
+ prerelease: false
190
218
  version_requirements: !ruby/object:Gem::Requirement
191
219
  requirements:
192
220
  - - ">="
193
221
  - !ruby/object:Gem::Version
194
- version: 3.2.0
222
+ version: 3.2.3
195
223
  - !ruby/object:Gem::Dependency
224
+ name: bundler
196
225
  requirement: !ruby/object:Gem::Requirement
197
226
  requirements:
198
227
  - - "~>"
199
228
  - !ruby/object:Gem::Version
200
229
  version: '1.3'
201
- name: bundler
202
- prerelease: false
203
230
  type: :development
231
+ prerelease: false
204
232
  version_requirements: !ruby/object:Gem::Requirement
205
233
  requirements:
206
234
  - - "~>"
207
235
  - !ruby/object:Gem::Version
208
236
  version: '1.3'
209
237
  - !ruby/object:Gem::Dependency
238
+ name: rake
210
239
  requirement: !ruby/object:Gem::Requirement
211
240
  requirements:
212
241
  - - ">="
213
242
  - !ruby/object:Gem::Version
214
243
  version: '0'
215
- name: rake
216
- prerelease: false
217
244
  type: :development
245
+ prerelease: false
218
246
  version_requirements: !ruby/object:Gem::Requirement
219
247
  requirements:
220
248
  - - ">="
221
249
  - !ruby/object:Gem::Version
222
250
  version: '0'
223
251
  - !ruby/object:Gem::Dependency
252
+ name: pry
224
253
  requirement: !ruby/object:Gem::Requirement
225
254
  requirements:
226
255
  - - ">="
227
256
  - !ruby/object:Gem::Version
228
257
  version: '0'
229
- name: pry
230
- prerelease: false
231
258
  type: :development
259
+ prerelease: false
232
260
  version_requirements: !ruby/object:Gem::Requirement
233
261
  requirements:
234
262
  - - ">="
235
263
  - !ruby/object:Gem::Version
236
264
  version: '0'
237
265
  - !ruby/object:Gem::Dependency
266
+ name: awesome_print
238
267
  requirement: !ruby/object:Gem::Requirement
239
268
  requirements:
240
269
  - - ">="
241
270
  - !ruby/object:Gem::Version
242
271
  version: '0'
243
- name: awesome_print
244
- prerelease: false
245
272
  type: :development
273
+ prerelease: false
246
274
  version_requirements: !ruby/object:Gem::Requirement
247
275
  requirements:
248
276
  - - ">="
249
277
  - !ruby/object:Gem::Version
250
278
  version: '0'
251
279
  - !ruby/object:Gem::Dependency
280
+ name: rspec
252
281
  requirement: !ruby/object:Gem::Requirement
253
282
  requirements:
254
283
  - - ">="
255
284
  - !ruby/object:Gem::Version
256
285
  version: '0'
257
- name: rspec
258
- prerelease: false
259
286
  type: :development
287
+ prerelease: false
260
288
  version_requirements: !ruby/object:Gem::Requirement
261
289
  requirements:
262
290
  - - ">="
263
291
  - !ruby/object:Gem::Version
264
292
  version: '0'
265
293
  - !ruby/object:Gem::Dependency
294
+ name: rack-test
266
295
  requirement: !ruby/object:Gem::Requirement
267
296
  requirements:
268
297
  - - ">="
269
298
  - !ruby/object:Gem::Version
270
299
  version: '0'
271
- name: rack-test
272
- prerelease: false
273
300
  type: :development
301
+ prerelease: false
274
302
  version_requirements: !ruby/object:Gem::Requirement
275
303
  requirements:
276
304
  - - ">="
@@ -280,9 +308,9 @@ description: OpeNER daemon for processing multiple queues at once
280
308
  email:
281
309
  executables:
282
310
  - chained-daemon
311
+ - chained-daemon-daemon
283
312
  - chained-daemon-csv
284
313
  - console
285
- - chained-daemon-daemon
286
314
  extensions: []
287
315
  extra_rdoc_files: []
288
316
  files:
@@ -295,9 +323,14 @@ files:
295
323
  - lib/opener/chained_daemon.rb
296
324
  - lib/opener/chained_daemon/chained_daemon.rb
297
325
  - lib/opener/chained_daemon/cli.rb
326
+ - lib/opener/chained_daemon/languages_cache.rb
298
327
  - lib/opener/chained_daemon/microsoft_translator.rb
299
328
  - lib/opener/chained_daemon/version.rb
300
329
  - lib/opener/chained_daemon/webservice.rb
330
+ - lib/opener/kaf/document.rb
331
+ - lib/opener/kaf/term.rb
332
+ - lib/opener/kaf/text.rb
333
+ - lib/opener/stanza/tokenizer_pos.rb
301
334
  - opener-chained-daemon.gemspec
302
335
  homepage:
303
336
  licenses:
@@ -319,7 +352,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
319
352
  version: '0'
320
353
  requirements: []
321
354
  rubyforge_project:
322
- rubygems_version: 2.7.9
355
+ rubygems_version: 2.7.6.2
323
356
  signing_key:
324
357
  specification_version: 4
325
358
  summary: OpeNER daemon for processing multiple queues at once