opener-ner 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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