opener-chained-daemon 3.0.0 → 3.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4287798b4a525d431592e63bfd21821913a3322f5a2a2b3988d05bd7dfbb1346
4
- data.tar.gz: b428d6b760f4ba7ded0bb0077896163fbaedb72f7b1bc185c7c91c2fd1d270fa
3
+ metadata.gz: 92671af787870253fad869667e547f56aa24f29880c823ba67076d1d4ec3fb11
4
+ data.tar.gz: ee03e7f43f81f869552725ebcb3f9067338657042d33f6583f9cef0932f46ec1
5
5
  SHA512:
6
- metadata.gz: 69001e3bda29109b90ed330149932116ad57b7cf65378b0b4bf04fd84652ae28e5ddb71d196aa70f34cade6ee293ea6b4b32f8b5b0717d5fed9aaa9ad50be823
7
- data.tar.gz: '034082731fad0758e2cdef33e576a9ce2617e49f6f2493cf62c41153c4920eba38b6a0705b1620bdd12d673cb621b95f34f071774bf395a2eaa74bc0097977f3'
6
+ metadata.gz: 6d9ecd68a2aebcef5531d70a7334126b8995ce93da7963408b953b5901c092ff1c23df467ab99970d4cb53ff950bfc6e47cde47344403e02145e06e149c614ad
7
+ data.tar.gz: 8852fb0af7e6b17156ca28ba57abad4b0e5d03a9d13bd64836165749a761bb996a5f6a431954f04b7246ffddd080bbc9499599c50570eb29e3e6f1d9b26be81f
@@ -0,0 +1,11 @@
1
+ APP_NAME = 'opener'
2
+ deploy_to = "/var/www/#{APP_NAME}"
3
+ run_path = "/var/run/#{APP_NAME}"
4
+ log_path = "/var/log/#{APP_NAME}"
5
+
6
+ workers ENV['WORKERS']&.to_i || 1 unless RUBY_ENGINE == 'jruby'
7
+ threads 0, ENV['THREADS']&.to_i || 16
8
+
9
+ bind 'tcp://0.0.0.0:9292'
10
+ #bind "unix://#{run_path}/chained-daemon-server.sock"
11
+
@@ -3,18 +3,25 @@ require 'oga'
3
3
  require 'hashie'
4
4
  require 'google/cloud/translate'
5
5
 
6
+ require 'rexml/document'
7
+ require 'rexml/formatters/pretty'
8
+
6
9
  require 'opener/daemons'
7
10
 
11
+ require_relative 'chained_daemon/languages_cache'
8
12
  require 'opener/language_identifier'
9
13
  require 'opener/tokenizer'
10
- # require ner before pos_tagger for compatible opennlp
11
- require 'opener/pos_tagger'
14
+ require 'opener/pos_tagger' if RUBY_ENGINE == 'jruby'
12
15
  require 'opener/polarity_tagger'
13
16
  require 'opener/property_tagger'
14
17
  require 'opener/opinion_detector_basic'
18
+ require 'opener/stanza/tokenizer_pos'
15
19
 
16
20
  require_relative 'chained_daemon/chained_daemon'
17
21
  require_relative 'chained_daemon/cli'
18
22
  require_relative 'chained_daemon/microsoft_translator'
19
23
  require_relative 'chained_daemon/webservice'
20
24
 
25
+ require_relative 'kaf/document'
26
+ require_relative 'kaf/term'
27
+
@@ -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
@@ -46,6 +47,7 @@ module Opener
46
47
  output = xml.to_s
47
48
  end
48
49
 
50
+ output = pretty_print output if params[:cache_keys][:environment] == 'staging'
49
51
  output
50
52
 
51
53
  rescue Core::UnsupportedLanguageError
@@ -53,6 +55,17 @@ module Opener
53
55
  output
54
56
  end
55
57
 
58
+ def pretty_print(output)
59
+ doc = REXML::Document.new output
60
+ doc.context[:attribute_quote] = :quote
61
+ out = ""
62
+ formatter = REXML::Formatters::Pretty.new
63
+ formatter.compact = true
64
+ formatter.write(doc, out)
65
+
66
+ out.strip
67
+ end
68
+
56
69
  def translate xml, params
57
70
  raw = xml.at :raw
58
71
  case translate_service params
@@ -47,7 +47,14 @@ Example:
47
47
  run do |opts, args|
48
48
  daemon = ChainedDaemon.new args: args
49
49
  input = STDIN.tty? ? nil : STDIN.read
50
- params = JSON.parse ENV['PARAMS'] if ENV['PARAMS']
50
+
51
+ params = if ENV['PARAMS']
52
+ JSON.parse ENV['PARAMS']
53
+ else
54
+ {}
55
+ end
56
+ # Set environment as staging from console for testing purposes
57
+ params[:cache_keys] = { environment: 'staging', merged: true }
51
58
 
52
59
  puts daemon.run input, params || {}
53
60
  end
@@ -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}" if ENV['DEBUG']
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.0'
4
+ VERSION = '3.1.0'
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,99 @@
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
+ RTL_LANGUAGES = [ "ar", "ara", "arc", "ae", "ave", "egy", "he", "heb", "nqo", "pal", "phn", "sam",
12
+ "syc", "syr", "fa", "per", "fas", "ku", "kur", "ur", "urd" ]
13
+
14
+ POS = {
15
+ 'DET' => 'D',
16
+ 'ADJ' => 'G',
17
+ 'NOUN' => 'N',
18
+ 'VERB' => 'V',
19
+ 'AUX' => 'V',
20
+ 'ADV' => 'A',
21
+ 'CCONJ' => 'J',
22
+ 'PUNCT' => '.',
23
+ 'ADP' => 'P',
24
+ 'PRON' => 'Q',
25
+ 'PROPN' => 'R',
26
+ 'PART' => 'P',
27
+ 'NUM' => 'O',
28
+ 'X' => 'O',
29
+ 'SYM' => 'O',
30
+ 'SCONJ' => 'P',
31
+ 'INTJ' => 'O',
32
+ }
33
+
34
+ POS_OPEN = %w[N R G V A O]
35
+
36
+ def run input, params
37
+ raise 'missing Stanza server' if ENV['STANZA_SERVER'].blank?
38
+
39
+ kaf = KAF::Document.from_xml input
40
+
41
+ prod = params[:cache_keys][:environment] != 'staging'
42
+ if prod and !LANGUAGES_CACHE.get.include?(kaf.language)
43
+ raise Core::UnsupportedLanguageError.new kaf.language
44
+ end
45
+
46
+ response = Faraday.post BASE_URL, {lang: kaf.language, input: kaf.raw}.to_query
47
+ raise Core::UnsupportedLanguageError, kaf.language if response.status == 406
48
+ raise response.body if response.status >= 400
49
+ tokens = JSON.parse response.body
50
+
51
+ w_index = 0
52
+
53
+ tokens.map{ |t| t.reverse! } if RTL_LANGUAGES.include? kaf.language
54
+ tokens.each_with_index do |sentence, s_index|
55
+ text = nil
56
+ misc = nil
57
+ sentence.each_with_index do |word|
58
+ w_index += 1
59
+ # fallback to previous token due to MWT
60
+ text = word['text'] || text
61
+ misc = word['misc'] || misc
62
+ next if misc.nil?
63
+
64
+ offset = misc.match(/start_char=(\d+)|/)[1].to_i
65
+ length = misc.match(/end_char=(\d+)/)[1].to_i - offset
66
+
67
+ u_pos = word['upos']
68
+ next if u_pos.nil? # MWT
69
+ pos = POS[u_pos]
70
+ raise "Didn't find a map for #{u_pos}" if pos.nil?
71
+ type = if POS_OPEN.include? pos then 'open' else 'close' end
72
+
73
+ params = {
74
+ wid: w_index,
75
+ sid: s_index + 1,
76
+ tid: w_index,
77
+ para: 1,
78
+ offset: offset,
79
+ length: length,
80
+ text: text,
81
+ lemma: word['lemma'],
82
+ morphofeat: u_pos,
83
+ pos: pos,
84
+ type: type,
85
+ }
86
+
87
+ kaf.add_word_form params
88
+ kaf.add_term params
89
+ end
90
+ end
91
+
92
+ kaf.add_linguistic_processor DESC, "#{VERSION}", 'text', timestamp: true
93
+
94
+ kaf.to_xml
95
+ end
96
+
97
+ end
98
+ end
99
+ end
@@ -10,6 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.license = 'Apache 2.0'
11
11
 
12
12
  spec.files = Dir.glob([
13
+ 'config/**/*',
13
14
  'exec/**/*',
14
15
  'lib/**/*',
15
16
  '*.gemspec',
@@ -18,7 +19,7 @@ Gem::Specification.new do |spec|
18
19
  ]).select{ |file| File.file? file }
19
20
 
20
21
  spec.bindir = 'bin'
21
- spec.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
22
+ spec.executables = Dir.glob('bin/*').map{ |file| File.basename(file) }
22
23
 
23
24
  spec.add_dependency 'activesupport'
24
25
  spec.add_dependency 'google-cloud-translate', '~> 1.0'
@@ -26,15 +27,17 @@ Gem::Specification.new do |spec|
26
27
  spec.add_dependency 'hashie'
27
28
 
28
29
  spec.add_dependency 'roda'
29
- spec.add_dependency 'opener-daemons', '~> 2.7.1'
30
+ spec.add_dependency 'rack-timeout'
31
+ spec.add_dependency 'faraday'
32
+ spec.add_dependency 'opener-daemons', '~> 2.7.2'
30
33
  spec.add_dependency 'opener-callback-handler', '~> 1.0'
31
34
 
32
35
  spec.add_dependency 'opener-language-identifier', '>= 4.4.0'
33
36
  spec.add_dependency 'opener-tokenizer', '>= 2.2.0'
34
37
  spec.add_dependency 'opener-pos-tagger', '>= 3.2.0'
35
- spec.add_dependency 'opener-polarity-tagger', '>= 3.2.0'
36
- spec.add_dependency 'opener-property-tagger', '>= 3.3.0'
37
- 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.5'
40
+ spec.add_dependency 'opener-opinion-detector-basic', '>= 3.2.3'
38
41
 
39
42
  spec.add_development_dependency 'bundler', '~> 1.3'
40
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.0
4
+ version: 3.1.0
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-12 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
- version: 2.7.1
89
- name: opener-daemons
90
- prerelease: false
117
+ version: 2.7.2
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
- version: 2.7.1
124
+ version: 2.7.2
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.5
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.5
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
  - - ">="
@@ -290,13 +318,19 @@ files:
290
318
  - bin/chained-daemon-csv
291
319
  - bin/chained-daemon-daemon
292
320
  - bin/console
321
+ - config/puma.rb
293
322
  - exec/chained-daemon.rb
294
323
  - lib/opener/chained_daemon.rb
295
324
  - lib/opener/chained_daemon/chained_daemon.rb
296
325
  - lib/opener/chained_daemon/cli.rb
326
+ - lib/opener/chained_daemon/languages_cache.rb
297
327
  - lib/opener/chained_daemon/microsoft_translator.rb
298
328
  - lib/opener/chained_daemon/version.rb
299
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
300
334
  - opener-chained-daemon.gemspec
301
335
  homepage:
302
336
  licenses:
@@ -318,7 +352,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
318
352
  version: '0'
319
353
  requirements: []
320
354
  rubyforge_project:
321
- rubygems_version: 2.7.9
355
+ rubygems_version: 2.7.8
322
356
  signing_key:
323
357
  specification_version: 4
324
358
  summary: OpeNER daemon for processing multiple queues at once