opener-ner 2.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8bb73b77467d92bf3cabce1ebaa94ba05ef0838e
4
+ data.tar.gz: 9756f377742951dc077446ddfb189b160c3a5874
5
+ SHA512:
6
+ metadata.gz: 568efc611a6a4a11184ed6c7172658b370b858c58632894280b0544b5e5514d76ccd6cc3f2f2a416ef43bc9a41b545e876fb6efdaa842547f64065287c0a2da3
7
+ data.tar.gz: 2263ffdcebf1b5f91240ea595901baf6ad368040adde94dc3e200bbf74859f30e1b172ffa3c02950be7ac46ee972a9acf4a4f33962a4a7c4cf4af403152e8c0c
@@ -0,0 +1,29 @@
1
+ # NER
2
+
3
+ This repository contains the source code for the primary NER component of the
4
+ OpeNER project. This component provides a CLI interface for the various kernels
5
+ as well as providing a Sinatra based web service.
6
+
7
+ ## Requirements
8
+
9
+ * Ruby 1.9.2 or newer
10
+ * Bundler
11
+
12
+ ## Installation
13
+
14
+ As a regular Ruby Gem:
15
+
16
+ gem install opener-ner
17
+
18
+
19
+ Using Bundler:
20
+
21
+ gem 'opener-ner',
22
+ :git => 'git@github.com:opener-project/ner.git',
23
+ :branch => 'master'
24
+
25
+ Using specific install:
26
+
27
+ gem install specific_install
28
+ gem specific_install opener-ner \
29
+ -l https://github.com/opener-project/ner.git
data/bin/ner ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/opener/ner'
4
+
5
+ cli = Opener::Ner::CLI.new(:args => ARGV)
6
+
7
+ puts cli.run(STDIN.tty? ? nil : STDIN.read)
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rack'
4
+
5
+ # Without calling `Rack::Server#options` manually the CLI arguments will never
6
+ # be passed, thus the application can't be specified as a constructor argument.
7
+ server = Rack::Server.new
8
+ server.options[:config] = File.expand_path('../../config.ru', __FILE__)
9
+
10
+ server.start
@@ -0,0 +1,4 @@
1
+ require File.expand_path('../lib/opener/ner', __FILE__)
2
+ require File.expand_path('../lib/opener/ner/server', __FILE__)
3
+
4
+ run Opener::Ner::Server
@@ -0,0 +1,95 @@
1
+ require 'optparse'
2
+ require 'opener/ners/base'
3
+ require 'nokogiri'
4
+
5
+ require_relative 'ner/version'
6
+ require_relative 'ner/cli'
7
+
8
+ module Opener
9
+ ##
10
+ # Primary NER class that takes care of delegating NER actions to the language
11
+ # specific kernels.
12
+ #
13
+ # @!attribute [r] options
14
+ # @return [Hash]
15
+ #
16
+ class Ner
17
+ attr_reader :options
18
+
19
+ ##
20
+ # The default language to use when no custom one is specified.
21
+ #
22
+ # @return [String]
23
+ #
24
+ DEFAULT_LANGUAGE = 'en'.freeze
25
+
26
+ ##
27
+ # Hash containing the default options to use.
28
+ #
29
+ # @return [Hash]
30
+ #
31
+ DEFAULT_OPTIONS = {
32
+ :args => [],
33
+ :language => DEFAULT_LANGUAGE
34
+ }.freeze
35
+
36
+ ##
37
+ # @param [Hash] options
38
+ #
39
+ # @option options [Array] :args Collection of arbitrary arguments to pass
40
+ # to the underlying kernels.
41
+ # @option options [String] :language The language to use.
42
+ #
43
+ def initialize(options = {})
44
+ @options = DEFAULT_OPTIONS.merge(options)
45
+ end
46
+
47
+ ##
48
+ # Processes the input and returns an array containing the output of STDOUT,
49
+ # STDERR and an object containing process information.
50
+ #
51
+ # @param [String] input
52
+ # @return [Array]
53
+ #
54
+ def run(input)
55
+ language = language_from_kaf(input) || DEFAULT_LANGUAGE
56
+ args = options[:args].dup
57
+
58
+ if language_constant_defined?(language)
59
+ kernel = language_constant(language).new(:args => args)
60
+ else
61
+ kernel = Ners::Base.new(:args => args, :language => language)
62
+ end
63
+
64
+ return kernel.run(input)
65
+ end
66
+
67
+ protected
68
+
69
+ ##
70
+ # Returns `true` if the current language has a dedicated kernel class.
71
+ #
72
+ # @return [TrueClass|FalseClass]
73
+ #
74
+ def language_constant_defined?(language)
75
+ return language && Ners.const_defined?(language.upcase)
76
+ end
77
+
78
+ ##
79
+ # @return [Class]
80
+ #
81
+ def language_constant(language)
82
+ return Ners.const_get(language.upcase)
83
+ end
84
+
85
+ ##
86
+ # @param [String] input
87
+ # @return [String]
88
+ #
89
+ def language_from_kaf(input)
90
+ reader = Nokogiri::XML::Reader(input)
91
+
92
+ return reader.read.lang
93
+ end
94
+ end # Ner
95
+ end # Opener
@@ -0,0 +1,88 @@
1
+ module Opener
2
+ class Ner
3
+ ##
4
+ # CLI wrapper around {Opener::Ner} using OptionParser.
5
+ #
6
+ # @!attribute [r] options
7
+ # @return [Hash]
8
+ # @!attribute [r] option_parser
9
+ # @return [OptionParser]
10
+ #
11
+ class CLI
12
+ attr_reader :options, :option_parser
13
+
14
+ ##
15
+ # @param [Hash] options
16
+ #
17
+ def initialize(options = {})
18
+ @options = DEFAULT_OPTIONS.merge(options)
19
+
20
+ @option_parser = OptionParser.new do |opts|
21
+ opts.program_name = 'ner'
22
+ opts.summary_indent = ' '
23
+
24
+ opts.on('-h', '--help', 'Shows this help message') do
25
+ show_help
26
+ end
27
+
28
+ opts.on('-v', '--version', 'Shows the current version') do
29
+ show_version
30
+ end
31
+
32
+ opts.on(
33
+ '-l',
34
+ '--language [VALUE]',
35
+ 'Uses this specific language'
36
+ ) do |value|
37
+ @options[:language] = value
38
+ end
39
+
40
+ opts.separator <<-EOF
41
+
42
+ Examples:
43
+
44
+ cat example.kaf | #{opts.program_name} -l en
45
+
46
+ Languages:
47
+
48
+ Ner will try to detect the language of the KAF file if no language is given.
49
+
50
+ * Dutch (nl)
51
+ * English (en)
52
+ * French (fr)
53
+ * German (de)
54
+ * Italian (it)
55
+ * Spanish (es)
56
+ EOF
57
+ end
58
+ end
59
+
60
+ ##
61
+ # @param [String] input
62
+ #
63
+ def run(input)
64
+ option_parser.parse!(options[:args])
65
+
66
+ ner = Ner.new(options)
67
+
68
+ return ner.run(input)
69
+ end
70
+
71
+ private
72
+
73
+ ##
74
+ # Shows the help message and exits the program.
75
+ #
76
+ def show_help
77
+ abort option_parser.to_s
78
+ end
79
+
80
+ ##
81
+ # Shows the version and exits the program.
82
+ #
83
+ def show_version
84
+ abort "#{option_parser.program_name} v#{VERSION} on #{RUBY_DESCRIPTION}"
85
+ end
86
+ end # CLI
87
+ end # Ner
88
+ end # Opener
@@ -0,0 +1,283 @@
1
+ input[type="text"], textarea
2
+ {
3
+ width: 500px;
4
+ }
5
+
6
+ body {
7
+ font-family: Helvetica, arial, sans-serif;
8
+ font-size: 14px;
9
+ line-height: 1.6;
10
+ padding-top: 10px;
11
+ padding-bottom: 10px;
12
+ background-color: white;
13
+ padding: 30px; }
14
+
15
+ body > *:first-child {
16
+ margin-top: 0 !important; }
17
+ body > *:last-child {
18
+ margin-bottom: 0 !important; }
19
+
20
+ a {
21
+ color: #4183C4; }
22
+ a.absent {
23
+ color: #cc0000; }
24
+ a.anchor {
25
+ display: block;
26
+ padding-left: 30px;
27
+ margin-left: -30px;
28
+ cursor: pointer;
29
+ position: absolute;
30
+ top: 0;
31
+ left: 0;
32
+ bottom: 0; }
33
+
34
+ h1, h2, h3, h4, h5, h6 {
35
+ margin: 20px 0 10px;
36
+ padding: 0;
37
+ font-weight: bold;
38
+ -webkit-font-smoothing: antialiased;
39
+ cursor: text;
40
+ position: relative; }
41
+
42
+ h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
43
+ background: url("../../images/modules/styleguide/para.png") no-repeat 10px center;
44
+ text-decoration: none; }
45
+
46
+ h1 tt, h1 code {
47
+ font-size: inherit; }
48
+
49
+ h2 tt, h2 code {
50
+ font-size: inherit; }
51
+
52
+ h3 tt, h3 code {
53
+ font-size: inherit; }
54
+
55
+ h4 tt, h4 code {
56
+ font-size: inherit; }
57
+
58
+ h5 tt, h5 code {
59
+ font-size: inherit; }
60
+
61
+ h6 tt, h6 code {
62
+ font-size: inherit; }
63
+
64
+ h1 {
65
+ font-size: 28px;
66
+ color: black; }
67
+
68
+ h2 {
69
+ font-size: 24px;
70
+ border-bottom: 1px solid #cccccc;
71
+ color: black; }
72
+
73
+ h3 {
74
+ font-size: 18px; }
75
+
76
+ h4 {
77
+ font-size: 16px; }
78
+
79
+ h5 {
80
+ font-size: 14px; }
81
+
82
+ h6 {
83
+ color: #777777;
84
+ font-size: 14px; }
85
+
86
+ p, blockquote, ul, ol, dl, li, table, pre {
87
+ margin: 15px 0; }
88
+
89
+ hr {
90
+ background: transparent url("../../images/modules/pulls/dirty-shade.png") repeat-x 0 0;
91
+ border: 0 none;
92
+ color: #cccccc;
93
+ height: 4px;
94
+ padding: 0; }
95
+
96
+ body > h2:first-child {
97
+ margin-top: 0;
98
+ padding-top: 0; }
99
+ body > h1:first-child {
100
+ margin-top: 0;
101
+ padding-top: 0; }
102
+ body > h1:first-child + h2 {
103
+ margin-top: 0;
104
+ padding-top: 0; }
105
+ body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
106
+ margin-top: 0;
107
+ padding-top: 0; }
108
+
109
+ a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
110
+ margin-top: 0;
111
+ padding-top: 0; }
112
+
113
+ h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
114
+ margin-top: 0; }
115
+
116
+ li p.first {
117
+ display: inline-block; }
118
+
119
+ ul, ol {
120
+ padding-left: 30px; }
121
+
122
+ ul :first-child, ol :first-child {
123
+ margin-top: 0; }
124
+
125
+ ul :last-child, ol :last-child {
126
+ margin-bottom: 0; }
127
+
128
+ dl {
129
+ padding: 0; }
130
+ dl dt {
131
+ font-size: 14px;
132
+ font-weight: bold;
133
+ font-style: italic;
134
+ padding: 0;
135
+ margin: 15px 0 5px; }
136
+ dl dt:first-child {
137
+ padding: 0; }
138
+ dl dt > :first-child {
139
+ margin-top: 0; }
140
+ dl dt > :last-child {
141
+ margin-bottom: 0; }
142
+ dl dd {
143
+ margin: 0 0 15px;
144
+ padding: 0 15px; }
145
+ dl dd > :first-child {
146
+ margin-top: 0; }
147
+ dl dd > :last-child {
148
+ margin-bottom: 0; }
149
+
150
+ blockquote {
151
+ border-left: 4px solid #dddddd;
152
+ padding: 0 15px;
153
+ color: #777777; }
154
+ blockquote > :first-child {
155
+ margin-top: 0; }
156
+ blockquote > :last-child {
157
+ margin-bottom: 0; }
158
+
159
+ table {
160
+ padding: 0; }
161
+ table tr {
162
+ border-top: 1px solid #cccccc;
163
+ background-color: white;
164
+ margin: 0;
165
+ padding: 0; }
166
+ table tr:nth-child(2n) {
167
+ background-color: #f8f8f8; }
168
+ table tr th {
169
+ font-weight: bold;
170
+ border: 1px solid #cccccc;
171
+ text-align: left;
172
+ margin: 0;
173
+ padding: 6px 13px; }
174
+ table tr td {
175
+ border: 1px solid #cccccc;
176
+ text-align: left;
177
+ margin: 0;
178
+ padding: 6px 13px; }
179
+ table tr th :first-child, table tr td :first-child {
180
+ margin-top: 0; }
181
+ table tr th :last-child, table tr td :last-child {
182
+ margin-bottom: 0; }
183
+
184
+ img {
185
+ max-width: 100%; }
186
+
187
+ span.frame {
188
+ display: block;
189
+ overflow: hidden; }
190
+ span.frame > span {
191
+ border: 1px solid #dddddd;
192
+ display: block;
193
+ float: left;
194
+ overflow: hidden;
195
+ margin: 13px 0 0;
196
+ padding: 7px;
197
+ width: auto; }
198
+ span.frame span img {
199
+ display: block;
200
+ float: left; }
201
+ span.frame span span {
202
+ clear: both;
203
+ color: #333333;
204
+ display: block;
205
+ padding: 5px 0 0; }
206
+ span.align-center {
207
+ display: block;
208
+ overflow: hidden;
209
+ clear: both; }
210
+ span.align-center > span {
211
+ display: block;
212
+ overflow: hidden;
213
+ margin: 13px auto 0;
214
+ text-align: center; }
215
+ span.align-center span img {
216
+ margin: 0 auto;
217
+ text-align: center; }
218
+ span.align-right {
219
+ display: block;
220
+ overflow: hidden;
221
+ clear: both; }
222
+ span.align-right > span {
223
+ display: block;
224
+ overflow: hidden;
225
+ margin: 13px 0 0;
226
+ text-align: right; }
227
+ span.align-right span img {
228
+ margin: 0;
229
+ text-align: right; }
230
+ span.float-left {
231
+ display: block;
232
+ margin-right: 13px;
233
+ overflow: hidden;
234
+ float: left; }
235
+ span.float-left span {
236
+ margin: 13px 0 0; }
237
+ span.float-right {
238
+ display: block;
239
+ margin-left: 13px;
240
+ overflow: hidden;
241
+ float: right; }
242
+ span.float-right > span {
243
+ display: block;
244
+ overflow: hidden;
245
+ margin: 13px auto 0;
246
+ text-align: right; }
247
+
248
+ code, tt {
249
+ margin: 0 2px;
250
+ padding: 0 5px;
251
+ white-space: nowrap;
252
+ border: 1px solid #eaeaea;
253
+ background-color: #f8f8f8;
254
+ border-radius: 3px; }
255
+
256
+ pre code {
257
+ margin: 0;
258
+ padding: 0;
259
+ white-space: pre;
260
+ border: none;
261
+ background: transparent; }
262
+
263
+ .highlight pre {
264
+ background-color: #f8f8f8;
265
+ border: 1px solid #cccccc;
266
+ font-size: 13px;
267
+ line-height: 19px;
268
+ overflow: auto;
269
+ padding: 6px 10px;
270
+ border-radius: 3px; }
271
+
272
+ pre {
273
+ background-color: #f8f8f8;
274
+ border: 1px solid #cccccc;
275
+ font-size: 13px;
276
+ line-height: 19px;
277
+ overflow: auto;
278
+ padding: 6px 10px;
279
+ border-radius: 3px; }
280
+ pre code, pre tt {
281
+ background-color: transparent;
282
+ border: none; }
283
+
@@ -0,0 +1,16 @@
1
+ require 'sinatra/base'
2
+ require 'opener/webservice'
3
+ require 'httpclient'
4
+
5
+ module Opener
6
+ class Ner
7
+ ##
8
+ # NER server powered by Sinatra.
9
+ #
10
+ class Server < Webservice
11
+ set :views, File.expand_path('../views', __FILE__)
12
+ text_processor Ner
13
+ accepted_params :input
14
+ end # Server
15
+ end # Ner
16
+ end # Opener
@@ -0,0 +1,5 @@
1
+ module Opener
2
+ class Ner
3
+ VERSION = '2.0.0'
4
+ end # NER
5
+ end # Opener
@@ -0,0 +1,71 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <link type="text/css" rel="stylesheet" href="markdown.css" />
5
+
6
+ <title>NER Webservice</title>
7
+ </head>
8
+ <body>
9
+ <h1>NER Webservice</h1>
10
+
11
+ <p>
12
+ * required
13
+
14
+ <br />
15
+
16
+ ** When entering a value no response will be displayed in the browser.
17
+ </p>
18
+
19
+ <form action="<%=url("/")%>" method="POST">
20
+ <div>
21
+ <label for="input">KAF input *</label>
22
+ <br />
23
+
24
+ <textarea id="input" name="input" cols="50" rows="10"></textarea>
25
+ </div>
26
+ <% 10.times do |t| %>
27
+ <div>
28
+ <label for="callbacks">Callback URL <%=t+1%>(**)</label>
29
+ <br />
30
+
31
+ <input id="callbacks" type="text" name="callbacks[]" />
32
+ </div>
33
+ <% end %>
34
+
35
+ <div>
36
+ <label for="error_callback">Error Callback</label>
37
+ <br />
38
+
39
+ <input id="error_callback" type="text" name="error_callback" />
40
+ </div>
41
+
42
+ <input type="submit" value="Submit" />
43
+ </form>
44
+
45
+ <h2>Actions</h2>
46
+
47
+ <dl>
48
+ <dt>GET /</dt>
49
+ <dd>Shows this page</dd>
50
+
51
+ <dt>POST /</dt>
52
+ <dd>Submits a KAF document</dd>
53
+ </dl>
54
+
55
+ <h2>Parameters</h2>
56
+
57
+ <dl>
58
+ <dt>text *</dt>
59
+ <dd>The KAF document to tag.</dd>
60
+
61
+ <dt>language</dt>
62
+ <dd>The language (code) to use, e.g. "en" or "fr".</dd>
63
+
64
+ <dt>callbacks</dt>
65
+ <dd>A collection of callback URLs that are processed as a chain.</dd>
66
+
67
+ <dt>error_callback</dt>
68
+ <dd>Errors are submitted to this URL in the "error" field.</dd>
69
+ </dl>
70
+ </body>
71
+ </html>
@@ -0,0 +1,29 @@
1
+ require File.expand_path('../lib/opener/ner/version', __FILE__)
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = 'opener-ner'
5
+ gem.version = Opener::Ner::VERSION
6
+ gem.authors = ['development@olery.com']
7
+ gem.summary = 'Primary NER component that wraps the various NER kernels.'
8
+ gem.description = gem.summary
9
+ gem.has_rdoc = 'yard'
10
+
11
+ gem.required_ruby_version = '>= 1.9.2'
12
+
13
+ gem.files = Dir.glob([
14
+ 'lib/**/*',
15
+ 'config.ru',
16
+ '*.gemspec',
17
+ 'README.md'
18
+ ]).select { |file| File.file?(file) }
19
+
20
+ gem.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
21
+
22
+ gem.add_dependency 'sinatra', '~> 1.4'
23
+ gem.add_dependency 'httpclient'
24
+ gem.add_dependency 'nokogiri'
25
+ gem.add_dependency 'opener-ner-base'
26
+ gem.add_dependency 'opener-webservice'
27
+
28
+ gem.add_development_dependency 'rake'
29
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opener-ner
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - development@olery.com
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sinatra
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: httpclient
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: nokogiri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: opener-ner-base
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'
69
+ - !ruby/object:Gem::Dependency
70
+ name: opener-webservice
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Primary NER component that wraps the various NER kernels.
98
+ email:
99
+ executables:
100
+ - ner
101
+ - ner-server
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - README.md
106
+ - bin/ner
107
+ - bin/ner-server
108
+ - config.ru
109
+ - lib/opener/ner.rb
110
+ - lib/opener/ner/cli.rb
111
+ - lib/opener/ner/public/markdown.css
112
+ - lib/opener/ner/server.rb
113
+ - lib/opener/ner/version.rb
114
+ - lib/opener/ner/views/index.erb
115
+ - opener-ner.gemspec
116
+ homepage:
117
+ licenses: []
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 1.9.2
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubyforge_project:
135
+ rubygems_version: 2.2.2
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: Primary NER component that wraps the various NER kernels.
139
+ test_files: []
140
+ has_rdoc: yard