abstractor 4.2.2 → 4.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc9febbed935f0f307992edc4ea11cfae3dd3e3d
4
- data.tar.gz: a5abd51e3d8d048feef01ea1708f56c93d479818
3
+ metadata.gz: a3703df4ac762d87fe77f41a0d3109533896943b
4
+ data.tar.gz: 10fb7cb823fa9ef4b2b0ccddb481d461fe3d6cc1
5
5
  SHA512:
6
- metadata.gz: 2331782126cf971b7eba9da1f15ddef64b15244f56156dabe5df4a786b7431a19e29c69c1663a56f66736656a377c2f1581601750b1fbcebd457b95881a5f85a
7
- data.tar.gz: a296ae518045c01e43fbdea91ac751fa0dc9ca1bfb0c2336f2cf243a822a5c04a2a79159b1c6e2f97757c1a6cc28fede8a362201ab4f958341cfa7f991fa13dd
6
+ metadata.gz: c939fc27c31fc6fb653f0ad6a9ff6e0dc17b8ef9c386b27a7051c1142d0fb05efedb2f84f37e741f39e06d6fc9e0b0c6b3e2c9f1a662ff5b5800832965e55309
7
+ data.tar.gz: b510b62d7fd32f365590f34f793fb767a589b6e5194c4603d1bf8b3f99c203355c9277fcae274f646a029d1eaa726e303e7f670684fab29bbcc1f70940942f62
@@ -1,5 +1,5 @@
1
1
  .abstractor_abstractions_ungrouped
2
- - ungrouped_subjects = about.class.abstractor_subjects(grouped: false, namespace_type: namespace_type, namespace_id: namespace_id)
2
+ - ungrouped_subjects = about.class.abstractor_subjects(grouped: false, namespace_type: namespace_type, namespace_id: namespace_id).order('abstractor_subjects.id')
3
3
  - if ungrouped_subjects.any?
4
4
  %fieldset
5
5
  .abstractor_abstractions_header
@@ -9,6 +9,8 @@
9
9
  - case abstraction_schema.abstractor_object_type.value
10
10
  - when 'date'
11
11
  = f.text_field :value, class: 'abstractor_datepicker'
12
+ - when 'text'
13
+ = f.text_area :value
12
14
  - when 'string'
13
15
  = f.text_field :value
14
16
  - when 'number'
@@ -0,0 +1,5 @@
1
+ class AddCustomNlpProviderToAbstractorAbstractionSources < ActiveRecord::Migration
2
+ def change
3
+ add_column :abstractor_abstraction_sources, :custom_nlp_provider, :string
4
+ end
5
+ end
@@ -0,0 +1,112 @@
1
+ module Abstractor
2
+ module CustomNlpProvider
3
+ ##
4
+ # Determines the suggestion endpoint for the passed in custom NLP provider.
5
+ #
6
+ # The endpoint is assumed to be configured in config/abstractor/custom_nlp_providers.yml.
7
+ # A template configratuon file can be generated in the host application by
8
+ # calling the rake task abstractor:custom_nlp_provider.
9
+ # @param [String] custom_nlp_provider The name of the custom NLP provider whose endpoint should be determined.
10
+ # @return [String] The endpoint.
11
+ def self.determine_suggestion_endpoint(custom_nlp_provider)
12
+ suggestion_endpoint = YAML.load_file("#{Rails.root}/config/abstractor/custom_nlp_providers.yml")[custom_nlp_provider]['suggestion_endpoint'][Rails.env]
13
+ end
14
+
15
+ ##
16
+ # Formats the object values and object value variants for the passed in Abstractor::AbstractorSubject.
17
+ #
18
+ # Preperation for submision to a custom NLP provider endpoint.
19
+ #
20
+ # @example Example of body prepared by Abstractor to submit to an custom NLP provider
21
+ # {
22
+ # "abstractor_abstraction_schema_id":1,
23
+ # "abstractor_abstraction_id":1,
24
+ # "abstractor_abstraction_source_id":1,
25
+ # "source_type": "PathologyCase",
26
+ # "source_method": "note_text",
27
+ # "text": "The patient has a diagnosis of glioblastoma. GBM does not have a good prognosis. But I can't rule out meningioma.",
28
+ # "object_values": [
29
+ # { "value": "glioblastoma, nos",
30
+ # "object_value_variants":[
31
+ # { "value": "glioblastoma" },
32
+ # { "value": "gbm" },
33
+ # { "value": "spongioblastoma multiforme"}
34
+ # ]
35
+ # },
36
+ # { "value": "meningioma, nos",
37
+ # "object_value_variants":[
38
+ # { "value": "meningioma" },
39
+ # { "value": "leptomeningioma" },
40
+ # { "value": "meningeal fibroblastoma" }
41
+ # ]
42
+ # }
43
+ # ]
44
+ # }
45
+ #
46
+ #
47
+ # @param [Abstractor::AbstractorSubject] abstractor_subject The abstractor subject having the desired object values.
48
+ # @return [Hash]
49
+ def self.abstractor_object_values(abstractor_subject)
50
+ object_values = []
51
+ abstractor_subject.abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
52
+ object_value = {}
53
+ object_value[:value] = abstractor_object_value.value
54
+ object_value[:object_value_variants] = []
55
+ abstractor_object_value.abstractor_object_value_variants.each do |abstractor_object_value_variant|
56
+ object_value[:object_value_variants] << { value: abstractor_object_value_variant.value }
57
+ end
58
+ object_values << object_value
59
+ end
60
+ object_values
61
+ end
62
+
63
+ ##
64
+ # Formats the JSON body in preparation for submision to a custom NLP provider endpoint.
65
+ #
66
+ # @example Example of body prepared by Abstractor to submit to an custom NLP provider
67
+ # {
68
+ # "abstractor_abstraction_schema_id":1,
69
+ # "abstractor_abstraction_id":1,
70
+ # "abstractor_abstraction_source_id":1,
71
+ # "source_type": "PathologyCase",
72
+ # "source_method": "note_text",
73
+ # "text": "The patient has a diagnosis of glioblastoma. GBM does not have a good prognosis. But I can't rule out meningioma.",
74
+ # "object_values": [
75
+ # { "value": "glioblastoma, nos",
76
+ # "object_value_variants":[
77
+ # { "value": "glioblastoma" },
78
+ # { "value": "gbm" },
79
+ # { "value": "spongioblastoma multiforme"}
80
+ # ]
81
+ # },
82
+ # { "value": "meningioma, nos",
83
+ # "object_value_variants":[
84
+ # { "value": "meningioma" },
85
+ # { "value": "leptomeningioma" },
86
+ # { "value": "meningeal fibroblastoma" }
87
+ # ]
88
+ # }
89
+ # ]
90
+ # }
91
+ #
92
+ #
93
+ # @param [Abstractor::AbstractorAbstraction] abstractor_abstraction The abstractor abstraction to be formated for submission to a custom nlp provider endpoint.
94
+ # @param [Abstractor::AbstractorAbstractionSource] abstractor_abstraction_source The abstractor abstraction source to be formated for submission to a custom nlp provider endpoint.
95
+ # @param [String] abstractor_text The text be formated for submission to a custom nlp provider endpoint.
96
+ # @param [Hash] source The hash of values representing the source for submission to a custom nlp provider endpoint.
97
+ # @return [Hash] The formatted body.
98
+ def self.format_body_for_suggestion_endpoint(abstractor_abstraction, abstractor_abstraction_source, abstractor_text, source)
99
+ object_values = CustomNlpProvider.abstractor_object_values(abstractor_abstraction.abstractor_subject)
100
+ {
101
+ abstractor_abstraction_schema_id: abstractor_abstraction.abstractor_subject.abstractor_abstraction_schema.id,
102
+ abstractor_abstraction_id: abstractor_abstraction.id,
103
+ abstractor_abstraction_source_id: abstractor_abstraction_source.id,
104
+ source_id: source[:source_id],
105
+ source_type: source[:source_type].to_s,
106
+ source_method: source[:source_method],
107
+ text: abstractor_text,
108
+ object_values: object_values
109
+ }
110
+ end
111
+ end
112
+ end
@@ -10,5 +10,10 @@ module Abstractor
10
10
 
11
11
  ABSTRACTOR_SECTION_TYPE_CUSTOM = 'custom'
12
12
  ABSTRACTOR_SECTION_TYPE_NAME_VALUE = 'name/value'
13
+
14
+ ABSTRACTOR_SUGGESTION_STATUS_NEEDS_REVIEW = 'Needs review'
15
+ ABSTRACTOR_SUGGESTION_STATUS_ACCEPTED = 'Accepted'
16
+ ABSTRACTOR_SUGGESTION_STATUS_REJECTED = 'Rejected'
17
+ ABSTRACTOR_SUGGESTION_STATUSES = [ABSTRACTOR_SUGGESTION_STATUS_NEEDS_REVIEW, ABSTRACTOR_SUGGESTION_STATUS_ACCEPTED, ABSTRACTOR_SUGGESTION_STATUS_REJECTED]
13
18
  end
14
19
  end
@@ -4,6 +4,25 @@ module Abstractor
4
4
  module AbstractorSuggestionsController
5
5
  def self.included(base)
6
6
  base.send :before_filter, :set_abstractor_suggestion, :only => [:update]
7
+ base.send :before_filter, :set_abstractor_abstraction
8
+ end
9
+
10
+ def create
11
+ respond_to do |format|
12
+ begin
13
+ suggestion = params[:abstractor_suggestion]
14
+ abstractor_abstraction_source = Abstractor::AbstractorAbstractionSource.find(suggestion[:abstractor_abstraction_source_id])
15
+ abstractor_suggestion = nil
16
+ Abstractor::AbstractorSuggestion.transaction do
17
+ suggestion[:suggestion_sources].each do |suggestion_source|
18
+ abstractor_suggestion = @abstractor_abstraction.abstractor_subject.suggest(@abstractor_abstraction, abstractor_abstraction_source, suggestion_source[:match_value], suggestion_source[:sentence_match_value], suggestion[:source_id], suggestion[:source_type], suggestion[:source_method], nil, suggestion[:value], suggestion[:unknown], suggestion[:not_applicable], nil, nil)
19
+ end
20
+ end
21
+ format.json { render json: abstractor_suggestion, status: :created }
22
+ rescue => e
23
+ format.json { render json: "Error processing request to create abstractor suggestions: #{e}", status: :unprocessable_entity }
24
+ end
25
+ end
7
26
  end
8
27
 
9
28
  def update
@@ -17,12 +36,15 @@ module Abstractor
17
36
  end
18
37
 
19
38
  private
20
- def set_abstractor_suggestion
39
+ def set_abstractor_abstraction
21
40
  @abstractor_abstraction = Abstractor::AbstractorAbstraction.find(params[:abstractor_abstraction_id])
22
- @abstractor_suggestion = Abstractor::AbstractorSuggestion.find(params[:id])
23
41
  @about = @abstractor_abstraction.about
24
42
  end
25
43
 
44
+ def set_abstractor_suggestion
45
+ @abstractor_suggestion = Abstractor::AbstractorSuggestion.find(params[:id])
46
+ end
47
+
26
48
  def abstractor_suggestion_params
27
49
  params.require(:abstractor_suggestion).permit(:id, :abstractor_abstraction_id, :abstractor_suggestion_status_id, :suggested_value, :unknown, :not_applicable, :deleted_at, :_destroy)
28
50
  end
@@ -90,6 +90,28 @@ module Abstractor
90
90
  ais.abstractor_abstraction_source == abstractor_abstraction_source
91
91
  end
92
92
  end
93
+
94
+ ##
95
+ # Returns all the suggestions for the abstraction with a suggestion status of 'needs review'
96
+ #
97
+ # @return [ActiveRecord::Relation] List of [Abstractor::AbstractorSuggestion].
98
+ def unreviewed_abstractor_suggestions
99
+ abstractor_suggestions.select { |abstractor_suggestion| abstractor_suggestion.abstractor_suggestion_status.name == Abstractor::Enum::ABSTRACTOR_SUGGESTION_STATUS_NEEDS_REVIEW }
100
+ end
101
+
102
+ ##
103
+ # Remove suggestions on the abstraction with a suggestion status of 'needs review' that are not present in the array of hashes representing suggestions passed in.
104
+ #
105
+ # @param [Array<Hash>] suggestions
106
+ # @return [void]
107
+ def remove_unreviewed_suggestions_not_matching_suggestions(suggestions)
108
+ unreviewed_abstractor_suggestions.each do |abstractor_suggestion|
109
+ not_detritus = suggestions.detect { |suggestion| suggestion[:suggestion] == abstractor_suggestion.suggested_value }
110
+ unless not_detritus
111
+ abstractor_suggestion.destroy
112
+ end
113
+ end
114
+ end
93
115
  end
94
116
 
95
117
  module ClassMethods
@@ -1,3 +1,4 @@
1
+ require 'rest_client'
1
2
  module Abstractor
2
3
  module Methods
3
4
  module Models
@@ -37,6 +38,7 @@ module Abstractor
37
38
  # * 'nlp suggestion': creates instances of Abstractor::AbstractorSuggestion based on natural language processing (nlp) logic searching the text provided by the Abstractor::AbstractorSubject#from_methd attribute.
38
39
  # * 'custom suggestion': creates instances of Abstractor::AbstractorSuggestion based on custom logic delegated to the method configured in AbstractorAbstractionSource#custom_method.
39
40
  # * 'indirect': creates an instance of Abstractor::AbstractorIndirectSource wih null source_type, source_id, source_method attributes -- all waiting to be set upon selection of an indirect source.
41
+ # * 'custom nlp suggestion': looks up a suggestion endpoint to submit text, object values and object value variants to an external, custom NLP provider for the delegation of suggestion generation.
40
42
  #
41
43
  # @param [ActiveRecord::Base] about The entity to abstract. An instance of the class specified in the Abstractor::AbstractorSubject#subject_type attribute.
42
44
  # @return [void]
@@ -51,6 +53,8 @@ module Abstractor
51
53
  abstract_custom_suggestion(about, abstractor_abstraction, abstractor_abstraction_source)
52
54
  when 'indirect'
53
55
  abstract_indirect_source(about, abstractor_abstraction, abstractor_abstraction_source)
56
+ when 'custom nlp suggestion'
57
+ abstract_custom_nlp_suggestion(about, abstractor_abstraction, abstractor_abstraction_source)
54
58
  end
55
59
  end
56
60
  end
@@ -127,13 +131,66 @@ module Abstractor
127
131
  # @param [Abstractor::AbstractorAbstractionSource] abstractor_abstraction_source The instance of the Abstractor::AbstractorAbstractionSource that provides the custom method to invoke on the abstractable entity to make custom suggestions.
128
132
  # @return [void]
129
133
  def abstract_custom_suggestion(about, abstractor_abstraction, abstractor_abstraction_source)
130
- suggestions = about.send(abstractor_abstraction_source.custom_method)
134
+ suggestions = about.send(abstractor_abstraction_source.custom_method, abstractor_abstraction)
131
135
  suggestions.each do |suggestion|
132
136
  suggest(abstractor_abstraction, abstractor_abstraction_source, nil, nil, about.id, about.class.to_s, abstractor_abstraction_source.from_method, abstractor_abstraction_source.section_name, suggestion[:suggestion], nil, nil, abstractor_abstraction_source.custom_method, suggestion[:explanation])
133
137
  end
134
138
  create_unknown_abstractor_suggestion(about, abstractor_abstraction, abstractor_abstraction_source)
135
139
  end
136
140
 
141
+ # Looks up a suggestion endpoint to submit text, object values and object value variants
142
+ # to an external, custom NLP provider for the delegation of suggestion generation.
143
+ #
144
+ # The method will determine an endpoint by looking in
145
+ # config/abstractor/custom_nlp_providers.yml based on the current environment
146
+ # and the value of the AbstractorAbstractionSource#custom_nlp_provider attribute.
147
+ #
148
+ # A template configratuon file can be generated in the the host application by
149
+ # calling the rake task abstractor:custom_nlp_provider. The configuration
150
+ # is expected to provide different endpoints per environment, per provider.
151
+ # Abstractor will format a JSON body to post to the discovered endpoint.
152
+ # The custom NLP provider will be expected to generate suggestions
153
+ # and post them back to /abstractor_abstractions/:abstractor_abstraction_id/abstractor_suggestions/
154
+ # @example Example of body prepared by Abstractor to submit to an custom NLP provider
155
+ # {
156
+ # "abstractor_abstraction_schema_id":1,
157
+ # "abstractor_abstraction_id":1,
158
+ # "abstractor_abstraction_source_id":1,
159
+ # "source_type": "PathologyCase",
160
+ # "source_method": "note_text",
161
+ # "text": "The patient has a diagnosis of glioblastoma. GBM does not have a good prognosis. But I can't rule out meningioma.",
162
+ # "object_values": [
163
+ # { "value": "glioblastoma, nos",
164
+ # "object_value_variants":[
165
+ # { "value": "glioblastoma" },
166
+ # { "value": "gbm" },
167
+ # { "value": "spongioblastoma multiforme"}
168
+ # ]
169
+ # },
170
+ # { "value": "meningioma, nos",
171
+ # "object_value_variants":[
172
+ # { "value": "meningioma" },
173
+ # { "value": "leptomeningioma" },
174
+ # { "value": "meningeal fibroblastoma" }
175
+ # ]
176
+ # }
177
+ # ]
178
+ # }
179
+ #
180
+ # @param [ActiveRecord::Base] about The entity to abstract. An instance of the class specified in the Abstractor::AbstractorSubject#subject_type attribute.
181
+ # @param [Abstractor::AbstractorAbstraction] abstractor_abstraction The instance of Abstractor::AbstractorAbstraction to make suggestions against.
182
+ # @param [Abstractor::AbstractorAbstractionSource] abstractor_abstraction_source The instance of the Abstractor::AbstractorAbstractionSource that provides the name of the custom NLP provider.
183
+ # @return [void]
184
+ def abstract_custom_nlp_suggestion(about, abstractor_abstraction, abstractor_abstraction_source)
185
+ suggestion_endpoint = CustomNlpProvider.determine_suggestion_endpoint(abstractor_abstraction_source.custom_nlp_provider)
186
+ object_values = CustomNlpProvider.abstractor_object_values(self)
187
+ abstractor_abstraction_source.normalize_from_method_to_sources(about).each do |source|
188
+ abstractor_text = Abstractor::AbstractorAbstractionSource.abstractor_text(source)
189
+ body = Abstractor::CustomNlpProvider.format_body_for_suggestion_endpoint(abstractor_abstraction, abstractor_abstraction_source, abstractor_text, source)
190
+ RestClient.post(suggestion_endpoint, body.to_json, content_type: :json)
191
+ end
192
+ end
193
+
137
194
  def abstract_unknown(about, abstractor_abstraction, abstractor_abstraction_source)
138
195
  create_unknown_abstractor_suggestion(about, abstractor_abstraction, abstractor_abstraction_source)
139
196
  end
@@ -9,10 +9,10 @@ module Abstractor
9
9
  base.send :belongs_to, :abstractor_abstraction
10
10
  base.send :belongs_to, :abstractor_suggestion_status
11
11
 
12
- base.send :has_one, :abstractor_suggestion_object_value
13
- base.send :has_one, :abstractor_object_value, :through => :abstractor_suggestion_object_value
12
+ base.send :has_one, :abstractor_suggestion_object_value, dependent: :destroy
13
+ base.send :has_one, :abstractor_object_value, through: :abstractor_suggestion_object_value
14
14
 
15
- base.send :has_many, :abstractor_suggestion_sources
15
+ base.send :has_many, :abstractor_suggestion_sources, dependent: :destroy
16
16
 
17
17
  # base.send :attr_accessible, :abstractor_abstraction, :abstractor_abstraction_id, :abstractor_suggestion_sources, :abstractor_suggestion_source_id, :abstractor_suggestion_status, :abstractor_suggestion_status_id, :suggested_value, :deleted_at, :unknown, :not_applicable
18
18
 
@@ -9,6 +9,7 @@ module Abstractor
9
9
  Abstractor::AbstractorObjectType.where(value: 'radio button list').first_or_create
10
10
  Abstractor::AbstractorObjectType.where(value: 'date').first_or_create
11
11
  Abstractor::AbstractorObjectType.where(value: 'dynamic list').first_or_create
12
+ Abstractor::AbstractorObjectType.where(value: 'text').first_or_create
12
13
 
13
14
  puts 'Setting up Abstractor::AbstractorRuleType'
14
15
  Abstractor::AbstractorRuleType.where(name: 'name/value', description:'search for value associated with name').first_or_create
@@ -28,6 +29,7 @@ module Abstractor
28
29
  Abstractor::AbstractorAbstractionSourceType.where(name: 'nlp suggestion').first_or_create
29
30
  Abstractor::AbstractorAbstractionSourceType.where(name: 'custom suggestion').first_or_create
30
31
  Abstractor::AbstractorAbstractionSourceType.where(name: 'indirect').first_or_create
32
+ Abstractor::AbstractorAbstractionSourceType.where(name: 'custom nlp suggestion').first_or_create
31
33
 
32
34
  puts 'Setting up Abstractor::AbstractorSectionType'
33
35
  Abstractor::AbstractorSectionType.where(name: Abstractor::Enum::ABSTRACTOR_SECTION_TYPE_CUSTOM).first_or_create
@@ -1,3 +1,3 @@
1
1
  module Abstractor
2
- VERSION = '4.2.2'
2
+ VERSION = '4.2.3'
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require 'open-uri'
2
2
  require 'zip'
3
+ require 'fileutils'
3
4
 
4
5
  namespace :abstractor do
5
6
  namespace :setup do
@@ -26,6 +27,28 @@ namespace :abstractor do
26
27
  fo.print open('https://github.com/louismullie/stanford-core-nlp/blob/master/bin/bridge.jar?raw=true').read
27
28
  end
28
29
  end
30
+
31
+ desc "Custom NLP provider"
32
+ task(custom_nlp_provider: :environment) do
33
+ FileUtils.mkdir_p 'config/abstractor'
34
+
35
+ template = <<EOS
36
+ # Add the actual name of your custom nlp provider.
37
+ # Specify the sugestion endpoint per environemnt.
38
+ custom_nlp_provider_name:
39
+ suggestion_endpoint:
40
+ development: http://custom-nlp-provider.dev/suggest
41
+ test: http://custom-nlp-provider.test/suggest
42
+ staging: http://custom-nlp-provider-staging.org/suggest
43
+ production: http://custom-nlp-provider.org/suggest
44
+ EOS
45
+
46
+ if !File.exist?('config/abstractor/custom_nlp_providers.yml')
47
+ File.open('config/abstractor/custom_nlp_providers.yml', 'w+'){ |f|
48
+ f << template
49
+ }
50
+ end
51
+ end
29
52
  end
30
53
 
31
54
  private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abstractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.2
4
+ version: 4.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Gurley, Yulia Bushmanova
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-21 00:00:00.000000000 Z
11
+ date: 2015-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -119,25 +119,25 @@ dependencies:
119
119
  - !ruby/object:Gem::Version
120
120
  version: 3.0.0
121
121
  - !ruby/object:Gem::Dependency
122
- name: stanford-core-nlp
122
+ name: stanford-core-nlp-abstractor
123
123
  requirement: !ruby/object:Gem::Requirement
124
124
  requirements:
125
125
  - - "~>"
126
126
  - !ruby/object:Gem::Version
127
- version: 0.5.1
127
+ version: 0.5.3
128
128
  - - ">="
129
129
  - !ruby/object:Gem::Version
130
- version: 0.5.1
130
+ version: 0.5.3
131
131
  type: :runtime
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: 0.5.1
137
+ version: 0.5.3
138
138
  - - ">="
139
139
  - !ruby/object:Gem::Version
140
- version: 0.5.1
140
+ version: 0.5.3
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: rubyzip
143
143
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +178,26 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: 4.0.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: rest-client
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.7'
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: 1.7.0
191
+ type: :runtime
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: '1.7'
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: 1.7.0
181
201
  - !ruby/object:Gem::Dependency
182
202
  name: sqlite3
183
203
  requirement: !ruby/object:Gem::Requirement
@@ -398,6 +418,26 @@ dependencies:
398
418
  - - ">="
399
419
  - !ruby/object:Gem::Version
400
420
  version: 3.1.1
421
+ - !ruby/object:Gem::Dependency
422
+ name: webmock
423
+ requirement: !ruby/object:Gem::Requirement
424
+ requirements:
425
+ - - "~>"
426
+ - !ruby/object:Gem::Version
427
+ version: '1.2'
428
+ - - ">="
429
+ - !ruby/object:Gem::Version
430
+ version: 1.2.0
431
+ type: :development
432
+ prerelease: false
433
+ version_requirements: !ruby/object:Gem::Requirement
434
+ requirements:
435
+ - - "~>"
436
+ - !ruby/object:Gem::Version
437
+ version: '1.2'
438
+ - - ">="
439
+ - !ruby/object:Gem::Version
440
+ version: 1.2.0
401
441
  description: A Rails engine gem for deriving discrete data points from narrative text
402
442
  via natural language processing (NLP). The gem includes a user interface to present
403
443
  the abstracted data points for confirmation/revision by curator.
@@ -513,10 +553,12 @@ files:
513
553
  - db/migrate/20141107171413_add_sectioning.rb
514
554
  - db/migrate/20141120044606_add_system_generated_to_abstractor_abstraction_groups.rb
515
555
  - db/migrate/20150110002921_create_indexes_for_performance.rb
556
+ - db/migrate/20150223033848_add_custom_nlp_provider_to_abstractor_abstraction_sources.rb
516
557
  - db/seeds.rb
517
558
  - lib/abstractor.rb
518
559
  - lib/abstractor/abstractable.rb
519
560
  - lib/abstractor/core_ext/string.rb
561
+ - lib/abstractor/custom_nlp_provider.rb
520
562
  - lib/abstractor/engine.rb
521
563
  - lib/abstractor/enum.rb
522
564
  - lib/abstractor/methods/controllers/abstractor_abstraction_groups_controller.rb