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 +4 -4
- data/config/puma.rb +11 -0
- data/lib/opener/chained_daemon.rb +9 -2
- data/lib/opener/chained_daemon/chained_daemon.rb +16 -3
- data/lib/opener/chained_daemon/cli.rb +8 -1
- data/lib/opener/chained_daemon/languages_cache.rb +45 -0
- data/lib/opener/chained_daemon/version.rb +1 -1
- data/lib/opener/chained_daemon/webservice.rb +5 -6
- data/lib/opener/kaf/document.rb +89 -0
- data/lib/opener/kaf/term.rb +35 -0
- data/lib/opener/kaf/text.rb +30 -0
- data/lib/opener/stanza/tokenizer_pos.rb +99 -0
- data/opener-chained-daemon.gemspec +8 -5
- metadata +81 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92671af787870253fad869667e547f56aa24f29880c823ba67076d1d4ec3fb11
|
4
|
+
data.tar.gz: ee03e7f43f81f869552725ebcb3f9067338657042d33f6583f9cef0932f46ec1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d9ecd68a2aebcef5531d70a7334126b8995ce93da7963408b953b5901c092ff1c23df467ab99970d4cb53ff950bfc6e47cde47344403e02145e06e149c614ad
|
7
|
+
data.tar.gz: 8852fb0af7e6b17156ca28ba57abad4b0e5d03a9d13bd64836165749a761bb996a5f6a431954f04b7246ffddd080bbc9499599c50570eb29e3e6f1d9b26be81f
|
data/config/puma.rb
ADDED
@@ -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
|
-
|
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
|
-
'
|
12
|
-
'opener-
|
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
|
-
|
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
|
@@ -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
|
-
|
16
|
-
|
17
|
-
params.
|
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
|
-
|
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
|
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 '
|
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.
|
36
|
-
spec.add_dependency 'opener-property-tagger', '>= 3.3.
|
37
|
-
spec.add_dependency 'opener-opinion-detector-basic', '>= 3.2.
|
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.
|
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-
|
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
|
-
|
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
|
-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|