ibm-watson-ruby 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env.example +10 -0
- data/Gemfile +0 -11
- data/ibm-watson-ruby.gemspec +4 -0
- data/lib/ibm_watson.rb +13 -5
- data/lib/ibm_watson/base_model.rb +33 -0
- data/lib/ibm_watson/conversation.rb +8 -7
- data/lib/ibm_watson/conversation/intent.rb +1 -1
- data/lib/ibm_watson/conversation/message_response.rb +12 -0
- data/lib/ibm_watson/conversation/runtime_entity.rb +10 -0
- data/lib/ibm_watson/conversation/{intent_result.rb → runtime_intent.rb} +1 -1
- data/lib/ibm_watson/conversation/service.rb +2 -2
- data/lib/ibm_watson/conversation/workspace.rb +4 -6
- data/lib/ibm_watson/errors.rb +8 -3
- data/lib/ibm_watson/nlu.rb +8 -0
- data/lib/ibm_watson/nlu/analyze_result.rb +25 -0
- data/lib/ibm_watson/nlu/service.rb +49 -0
- data/lib/ibm_watson/version.rb +1 -1
- data/lib/ibm_watson_ruby.rb +3 -0
- data/spec/ibm_watson/conversation/service_spec.rb +3 -8
- data/spec/ibm_watson/nlu/service_spec.rb +18 -0
- data/spec/spec_helper.rb +2 -4
- data/spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_create_workspace_.yml +2 -2
- data/spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_delete_workspace_.yml +1 -1
- data/spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_message_.yml +3 -3
- data/spec/vcr_cassettes/ibm_watson/nlu/service/ibm_watson_nlu_service_keyword_extraction_.yml +66 -0
- metadata +70 -4
- data/lib/ibm_watson/conversation/result.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d3195bcccad976df212074781bf31e7fb7294f2
|
4
|
+
data.tar.gz: 53ae05cbe93970afd40ac57f370637c598c532bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09568b6872472b87bcbb9a397b0ba3ea08098f2e07cfe256168d29f434fb96d5dd5016ba96f8d9f7381d3f900d8f1b26cbc4769d141761df222b2d4194eda9cb'
|
7
|
+
data.tar.gz: 7784a1b32ca4976ed65def28915db96057b6f44c9f8cbb62daf5f2312ae0f35f0292b1bb9576119cdb86973197cc86a90740af7627724eab3ff7494e3c0aa029
|
data/.env.example
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# Use your own credentials
|
2
|
+
IBM_WATSON_CONVERSATION_USERNAME=xxx
|
3
|
+
IBM_WATSON_CONVERSATION_PASSWORD=yyy
|
4
|
+
|
5
|
+
# the VCR examples kinda need this workspace id to match
|
6
|
+
IBM_WATSON_WORKSPACE_ID=9c9b5bb9-9841-4c08-a69b-1af8797c74c8
|
7
|
+
IBM_WATSON_WORKSPACE_ID_TO_DELETE=c6f27505-bc6c-4914-bd8d-b570d8ff2720
|
8
|
+
|
9
|
+
IBM_WATSON_NLU_USERNAME=xxx
|
10
|
+
IBM_WATSON_NLU_PASSWORD=yyy
|
data/Gemfile
CHANGED
data/ibm-watson-ruby.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |gem|
|
|
21
21
|
gem.add_dependency "http", "~> 2.0"
|
22
22
|
gem.add_dependency "active_attr", '~> 0.10'
|
23
23
|
gem.add_dependency "active_attr_extended", "~> 0.9"
|
24
|
+
gem.add_dependency "activesupport"
|
24
25
|
|
25
26
|
gem.add_development_dependency 'bundler', '~> 1.0'
|
26
27
|
gem.add_development_dependency 'rake', '~> 0.8'
|
@@ -28,4 +29,7 @@ Gem::Specification.new do |gem|
|
|
28
29
|
gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
29
30
|
gem.add_development_dependency 'rspec-middlewares'
|
30
31
|
gem.add_development_dependency 'vcr'
|
32
|
+
gem.add_development_dependency 'webmock'
|
33
|
+
gem.add_development_dependency 'dotenv'
|
34
|
+
gem.add_development_dependency 'pry'
|
31
35
|
end
|
data/lib/ibm_watson.rb
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
require 'active_attr'
|
2
2
|
require 'active_attr_extended'
|
3
3
|
|
4
|
-
require '
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
require 'active_support'
|
5
|
+
|
6
|
+
module IBMWatson
|
7
|
+
extend ActiveSupport::Autoload
|
8
|
+
|
9
|
+
autoload :VERSION
|
10
|
+
autoload :BaseModel
|
11
|
+
autoload :BaseService
|
12
|
+
autoload :Errors
|
13
|
+
|
14
|
+
autoload :Conversation
|
15
|
+
autoload :NLU
|
16
|
+
end
|
@@ -2,5 +2,38 @@ module IBMWatson
|
|
2
2
|
class BaseModel
|
3
3
|
include ActiveAttr::Model
|
4
4
|
include ActiveAttr::AttributeDefaults
|
5
|
+
|
6
|
+
# Support "Collection" attributes, eg:
|
7
|
+
# attribute :foo, type: [String]
|
8
|
+
def typecaster_for(type)
|
9
|
+
if type.kind_of?(Array) && type.length == 1 && type.first.is_a?(Class)
|
10
|
+
item_type = type.first
|
11
|
+
lambda do |value|
|
12
|
+
value.map { |item|
|
13
|
+
unless item.is_a?(item_type)
|
14
|
+
item = item_type.new(item)
|
15
|
+
end
|
16
|
+
item
|
17
|
+
}
|
18
|
+
end
|
19
|
+
else
|
20
|
+
super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# By default add all collection attributes are considered as if they were associations
|
25
|
+
# this will make sure that `as_json` is called on them properly
|
26
|
+
def as_json(options = nil)
|
27
|
+
options ||= {}
|
28
|
+
options[:include] = self.class.collection_attribute_names
|
29
|
+
super(options)
|
30
|
+
end
|
31
|
+
|
32
|
+
# All [BaseModel] typed attributes are considered here
|
33
|
+
def self.collection_attribute_names
|
34
|
+
attributes.select { |name, attribute|
|
35
|
+
attribute[:type].present? && attribute[:type].is_a?(Array) && attribute[:type].first <= BaseModel
|
36
|
+
}.map { |name, attribute| name }
|
37
|
+
end
|
5
38
|
end
|
6
39
|
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module IBMWatson
|
2
2
|
module Conversation
|
3
|
+
extend ActiveSupport::Autoload
|
4
|
+
|
5
|
+
autoload :Service
|
6
|
+
autoload :MessageResponse
|
7
|
+
autoload :RuntimeIntent
|
8
|
+
autoload :Intent
|
9
|
+
autoload :DialogNode
|
10
|
+
autoload :Workspace
|
3
11
|
end
|
4
12
|
end
|
5
|
-
|
6
|
-
require_relative 'conversation/service'
|
7
|
-
require_relative 'conversation/intent_result'
|
8
|
-
require_relative 'conversation/result'
|
9
|
-
require_relative 'conversation/intent'
|
10
|
-
require_relative 'conversation/dialog_node'
|
11
|
-
require_relative 'conversation/workspace'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module IBMWatson
|
2
|
+
module Conversation
|
3
|
+
class MessageResponse < IBMWatson::BaseModel
|
4
|
+
attribute :entities, type: [RuntimeEntity]
|
5
|
+
attribute :input
|
6
|
+
attribute :output
|
7
|
+
attribute :context
|
8
|
+
attribute :alternate_intents
|
9
|
+
attribute :intents, type: [RuntimeIntent]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -30,7 +30,7 @@ module IBMWatson
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def delete_workspace(workspace_id:)
|
33
|
-
url = build_url('workspaces', workspace_id, query: { version: QUERY_VERSION})
|
33
|
+
url = build_url('workspaces', workspace_id, query: { version: QUERY_VERSION })
|
34
34
|
result = accept_json(basic_auth).delete(url)
|
35
35
|
verify_http_result(result)
|
36
36
|
end
|
@@ -49,7 +49,7 @@ module IBMWatson
|
|
49
49
|
}
|
50
50
|
result = accept_json(basic_auth).post(url, json: params)
|
51
51
|
verify_http_result(result)
|
52
|
-
IBMWatson::Conversation::
|
52
|
+
IBMWatson::Conversation::MessageResponse.new.tap do |result_object|
|
53
53
|
result_object.from_json(result)
|
54
54
|
end
|
55
55
|
end
|
@@ -9,12 +9,10 @@ module IBMWatson
|
|
9
9
|
attribute :updated, type: String
|
10
10
|
attribute :workspace_id, type: String
|
11
11
|
attribute :status, type: String
|
12
|
-
attribute :intents, type:
|
13
|
-
|
14
|
-
attribute :
|
15
|
-
attribute :
|
16
|
-
attribute :dialog_nodes, type: ::IBMWatson::Conversation::DialogNode,
|
17
|
-
typecaster: lambda { |values| values.map { |value| ::IBMWatson::Conversation::DialogNode.new(value)}}
|
12
|
+
attribute :intents, type: [Intent]
|
13
|
+
attribute :entities, type: [Hash]
|
14
|
+
attribute :counterexamples, type: [Hash]
|
15
|
+
attribute :dialog_nodes, type: [DialogNode]
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end
|
data/lib/ibm_watson/errors.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
module IBMWatson
|
2
2
|
module Errors
|
3
|
-
class WatsonError < StandardError
|
4
|
-
|
5
|
-
|
3
|
+
class WatsonError < StandardError
|
4
|
+
end
|
5
|
+
|
6
|
+
class WatsonRequestError < WatsonError
|
7
|
+
end
|
8
|
+
|
9
|
+
class WatsonServerError < WatsonError
|
10
|
+
end
|
6
11
|
end
|
7
12
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module IBMWatson
|
2
|
+
module NLU
|
3
|
+
class AnalyzeResult < IBMWatson::BaseModel
|
4
|
+
class Keyword < IBMWatson::BaseModel
|
5
|
+
attribute :text, type: String
|
6
|
+
attribute :relevance, type: Float
|
7
|
+
end
|
8
|
+
|
9
|
+
attribute :language, type: String
|
10
|
+
attribute :analyzed_text, type: String
|
11
|
+
attribute :retrieved_url, type: String
|
12
|
+
attribute :usage # no examples of this, so don't know type
|
13
|
+
|
14
|
+
attribute :concepts, type: [Hash]
|
15
|
+
attribute :categories, type: [Hash]
|
16
|
+
attribute :emotion, type: Hash
|
17
|
+
attribute :entities, type: [Hash]
|
18
|
+
attribute :keywords, type: [Keyword]
|
19
|
+
attribute :metadata, type: Hash
|
20
|
+
attribute :relations, type: [Hash]
|
21
|
+
attribute :semantic_roles, type: [Hash]
|
22
|
+
attribute :sentiment, type: Hash
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module IBMWatson
|
2
|
+
module NLU
|
3
|
+
class Service < IBMWatson::BaseService
|
4
|
+
version "v1"
|
5
|
+
url "https://gateway.watsonplatform.net/natural-language-understanding/api"
|
6
|
+
QUERY_VERSION = "2017-02-27"
|
7
|
+
|
8
|
+
class FeatureDefinition
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
def analyze_text(text, language: 'en', keywords: false)
|
13
|
+
# additional parameters not being implemented:
|
14
|
+
# - html (analyzing html)
|
15
|
+
# - url (analyzing urls)
|
16
|
+
# - clean (not sure what it does yet)
|
17
|
+
|
18
|
+
features = {}
|
19
|
+
features[:keywords] = {} if keywords
|
20
|
+
# Features not implemented yet:
|
21
|
+
# - concepts
|
22
|
+
# - categories
|
23
|
+
# - emotion
|
24
|
+
# - entities
|
25
|
+
# - metadata
|
26
|
+
# - relations
|
27
|
+
# - semantic_roles
|
28
|
+
# - sentiment
|
29
|
+
|
30
|
+
parameters = {
|
31
|
+
text: text,
|
32
|
+
language: language,
|
33
|
+
# return_analyzed_text: true,
|
34
|
+
features: features,
|
35
|
+
}
|
36
|
+
|
37
|
+
url = build_url('analyze', query: { version: QUERY_VERSION })
|
38
|
+
result = accept_json(basic_auth).post(url, json: parameters)
|
39
|
+
|
40
|
+
verify_http_result(result)
|
41
|
+
|
42
|
+
IBMWatson::NLU::AnalyzeResult.new.tap do |result_object|
|
43
|
+
result_object.from_json(result)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/ibm_watson/version.rb
CHANGED
@@ -2,14 +2,11 @@ require 'spec_helper'
|
|
2
2
|
require 'ibm_watson'
|
3
3
|
|
4
4
|
describe IBMWatson::Conversation::Service, record: :none do
|
5
|
-
subject(:service) { described_class.new(username: username, password: password) }
|
6
5
|
let(:username) { ENV['IBM_WATSON_CONVERSATION_USERNAME'] }
|
7
6
|
let(:password) { ENV['IBM_WATSON_CONVERSATION_PASSWORD'] }
|
8
7
|
let(:workspace_id) { ENV['IBM_WATSON_WORKSPACE_ID'] }
|
9
8
|
let(:delete_workspace_id) { ENV['IBM_WATSON_WORKSPACE_ID_TO_DELETE'] }
|
10
|
-
subject(:service)
|
11
|
-
described_class.new(username: username, password: password)
|
12
|
-
end
|
9
|
+
subject(:service) { described_class.new(username: username, password: password) }
|
13
10
|
|
14
11
|
describe "#message" do
|
15
12
|
before do
|
@@ -40,7 +37,7 @@ describe IBMWatson::Conversation::Service, record: :none do
|
|
40
37
|
|
41
38
|
example do
|
42
39
|
result = subject.message(workspace_id: workspace_id, input: "Awesome!", context: context)
|
43
|
-
expect(result.intents.first).to be_a_kind_of(IBMWatson::Conversation::
|
40
|
+
expect(result.intents.first).to be_a_kind_of(IBMWatson::Conversation::RuntimeIntent)
|
44
41
|
expect(result.intents.as_json).to eq expected_intents
|
45
42
|
expect(result.context).to be_a_kind_of(Hash)
|
46
43
|
expect(result.context.as_json).to eq(expected_context_json)
|
@@ -94,9 +91,7 @@ describe IBMWatson::Conversation::Service, record: :none do
|
|
94
91
|
|
95
92
|
describe "#delete_workspace" do
|
96
93
|
example do
|
97
|
-
|
98
|
-
subject.delete_workspace(workspace_id: delete_workspace_id)
|
99
|
-
}.not_to raise_error
|
94
|
+
subject.delete_workspace(workspace_id: delete_workspace_id)
|
100
95
|
end
|
101
96
|
end
|
102
97
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ibm_watson'
|
3
|
+
|
4
|
+
describe IBMWatson::NLU::Service, record: :once do
|
5
|
+
subject(:service) { described_class.new(username: username, password: password) }
|
6
|
+
let(:username) { ENV['IBM_WATSON_NLU_USERNAME'] }
|
7
|
+
let(:password) { ENV['IBM_WATSON_NLU_PASSWORD'] }
|
8
|
+
|
9
|
+
describe "keyword extraction" do
|
10
|
+
example do
|
11
|
+
result = service.analyze_text("sure, I'll bite. My name is Kieran", keywords: true)
|
12
|
+
|
13
|
+
expect(result.keywords).to be_a_kind_of(Array)
|
14
|
+
expect(result.keywords.length).to eq(1)
|
15
|
+
expect(result.keywords[0].as_json).to eq({ "relevance" => 0.970239, "text" => "Kieran" })
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://gateway.watsonplatform.net/conversation/api/v1/workspaces/
|
5
|
+
uri: https://gateway.watsonplatform.net/conversation/api/v1/workspaces/c6f27505-bc6c-4914-bd8d-b570d8ff27208?export=true&version=2017-02-03
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -68,7 +68,7 @@ http_interactions:
|
|
68
68
|
recorded_at: Thu, 06 Apr 2017 22:45:40 GMT
|
69
69
|
- request:
|
70
70
|
method: get
|
71
|
-
uri: https://gateway.watsonplatform.net/conversation/api/v1/workspaces/
|
71
|
+
uri: https://gateway.watsonplatform.net/conversation/api/v1/workspaces/c6f27505-bc6c-4914-bd8d-b570d8ff2720?export=true&version=2017-02-03
|
72
72
|
body:
|
73
73
|
encoding: US-ASCII
|
74
74
|
string: ''
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: delete
|
5
|
-
uri: https://gateway.watsonplatform.net/conversation/api/v1/workspaces/
|
5
|
+
uri: https://gateway.watsonplatform.net/conversation/api/v1/workspaces/c6f27505-bc6c-4914-bd8d-b570d8ff2720?version=2017-02-03
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
data/spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_message_.yml
CHANGED
@@ -242,7 +242,7 @@ http_interactions:
|
|
242
242
|
how I am","previous_sibling":"Say hello"},{"go_to":null,"output":{"text":{"values":["Sure.
|
243
243
|
Sounds good.","Okay. No problem.","Glad to hear it."],"selection_policy":"random"}},"parent":null,"context":null,"created":"2017-03-25T00:48:38.808Z","updated":"2017-03-25T00:48:38.808Z","metadata":null,"conditions":"#no_problem","description":null,"dialog_node":"Tell
|
244
244
|
me everything is okay","previous_sibling":"Asks a property question"},{"go_to":null,"output":{"choices":{"choices":[{"body":"Like
|
245
|
-
this?"}],"template":"realtor/intro_question_one"},"template":"realtor/intro"},"parent":null,"context":{"introduced":true,"initial_question":"
|
245
|
+
this?"}],"template":"realtor/intro_question_one"},"template":"realtor/intro"},"parent":null,"context":{"introduced":true,"initial_question":"<?input.text?>"},"created":"2017-03-25T00:48:38.808Z","updated":"2017-03-25T00:48:38.808Z","metadata":null,"conditions":"$introduced
|
246
246
|
== false","description":null,"dialog_node":"Introduce the Bot","previous_sibling":"Ask
|
247
247
|
who I am"},{"go_to":{"return":null,"selector":"body","dialog_node":"Clear
|
248
248
|
initial question"},"output":{"text":{"values":["Sure! You asked ''$initial_question'',
|
@@ -264,7 +264,7 @@ http_interactions:
|
|
264
264
|
approve. I''m ready for your questions now."],"selection_policy":"sequential"}},"parent":"Like
|
265
265
|
that.","context":null,"created":"2017-03-25T00:48:38.808Z","updated":"2017-03-25T00:48:38.808Z","metadata":null,"conditions":"#thumbs_down","description":null,"dialog_node":"Thumbs
|
266
266
|
Down","previous_sibling":"Thumbs Up"},{"go_to":{"return":null,"selector":"condition","dialog_node":"Talk
|
267
|
-
to my boss"},"output":{"message_template":"realtor/intro"},"parent":null,"context":{"listing":"none","introduced":false,"initial_question":"
|
267
|
+
to my boss"},"output":{"message_template":"realtor/intro"},"parent":null,"context":{"listing":"none","introduced":false,"initial_question":"<?input.text?>"},"created":"2017-03-25T00:48:38.808Z","updated":"2017-03-25T00:48:38.808Z","metadata":null,"conditions":"conversation_start","description":null,"dialog_node":"Conversation
|
268
268
|
Starts","previous_sibling":null},{"go_to":{"return":null,"selector":"condition","dialog_node":"Talk
|
269
269
|
to my boss"},"output":{"text":{"values":[],"selection_policy":"sequential"}},"parent":"Introduce
|
270
270
|
the Bot","context":null,"created":"2017-03-25T00:48:38.808Z","updated":"2017-03-25T00:48:38.808Z","metadata":null,"conditions":"#talk_to_my_boss","description":null,"dialog_node":"Talk
|
@@ -297,7 +297,7 @@ http_interactions:
|
|
297
297
|
I''ll search for @property-type less than than @sys-number for you. Might
|
298
298
|
be a few minutes."],"selection_policy":"sequential"}},"parent":"Ask about
|
299
299
|
homes","context":null,"created":"2017-03-25T00:48:38.808Z","updated":"2017-03-25T00:48:38.808Z","metadata":null,"conditions":"@property-type:home
|
300
|
-
|
300
|
+
&& @under-filter:under && @sys-number","description":null,"dialog_node":"node_4_1489443566378","previous_sibling":"node_8_1489424344276"},{"type":"response_condition","go_to":null,"output":{"text":{"values":["The
|
301
301
|
home I have for sale is 3520 willows road."],"selection_policy":"sequential"}},"parent":"Ask
|
302
302
|
about homes","context":null,"created":"2017-03-25T00:48:38.808Z","updated":"2017-03-25T00:48:38.808Z","metadata":null,"conditions":"
|
303
303
|
@property-type:home","description":null,"dialog_node":"node_9_1489424359166","previous_sibling":"node_4_1489443566378"},{"type":"response_condition","go_to":null,"output":{"text":{"values":["Yes,
|
@@ -0,0 +1,66 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://gateway.watsonplatform.net/natural-language-understanding/api/v1/analyze?version=2017-02-27
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"text":"sure, I''ll bite. My name is Kieran","language":"en","features":{"keywords":{}}}'
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
Connection:
|
13
|
+
- close
|
14
|
+
Content-Type:
|
15
|
+
- application/json; charset=UTF-8
|
16
|
+
Host:
|
17
|
+
- gateway.watsonplatform.net
|
18
|
+
User-Agent:
|
19
|
+
- http.rb/2.2.1
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
X-Backside-Transport:
|
26
|
+
- OK OK
|
27
|
+
Connection:
|
28
|
+
- close
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Date:
|
32
|
+
- Thu, 13 Apr 2017 19:45:28 GMT
|
33
|
+
X-Request-Id:
|
34
|
+
- n06mov7ud0bcnk7r66n8341l8ktt3skt
|
35
|
+
Cache-Control:
|
36
|
+
- max-age=0, private, must-revalidate
|
37
|
+
Content-Type:
|
38
|
+
- application/json;charset=utf-8
|
39
|
+
Server:
|
40
|
+
- "-"
|
41
|
+
Set-Cookie:
|
42
|
+
- Watson-DPAT=qzhOiFUiHa7cAHj4sTZsl1E7IgiZ2OJf30q9zfLpP8%2FwxM5Db9jOyL6qKc4VgIWphye%2FDOLsNeNUS5eVoQxx8tM%2BfI%2BLtMHl831DouJrmWKMEqFRUC0oYt8PrOtAp%2BhL2rBgIzb30egtL733g4WbzH7B5ZUuznEehmsPCHZO8G9UNT39dr7YtNcrmQAVaOKp4ZRuBlshu%2Fxrcp94hsKdc%2BsCe4hsNXFH64DM9HhPig4SbnYLy4EhfPQCpn9Of17LEJnl5LUOA%2FpJ43x72QjvcA%2F1qL%2BZvNGAp00oLvxHulOlCRw1LJHE%2FekQgehQTIZHzxYNcg7YVzcq9zak%2B4D63lZ0cBR3z8MMlrYnXTqpBQC16VVG%2F1PrPwP8uhl93VXwiyN%2FQtKbyifcAPKriOvXzKDX93e5agPp6sotply9X%2B%2Bry01teq4qO9rCtafOLJiXcwRzqfIbv4%2FMS7fTjkmWvrikwHlWSJlQup9mIVcuJMpkC6YKtuFvdLPRe9ANQ7jsplvLTdOyUL9hTwy8logTTEhflRwPNwkjZ%2BkQ2zvzxXneGu8HAAmyzl4u8XtzcWVdrG6X6Xs4rFdwyqKnPq2Tfl2iqHp7x5rVwPmO5SklqU5so%2BgAehpLM34uDm5CRviNHlMtBKKFLPpHxoiR85zQTlKez01gPf3AjX8pXJ2sU%2B4bcUfsILUXTY1SIFzz3boZaXZPlLsa%2BJJzb2NTWbbENiWN9nJPiMFUx1REVA1u%2BVxeegCaajUbCq2a85M%2B1RNMoGmCDrRNnU9jpiinmMEw%2BH5mYGheSZOqQm2PS2gfKrc%2BDIFtyX3RFtpBOEwSX78fuWwYgAf1uaevROkA7R17BGsCRwcyLMr1BmNLUzZvasBT8GdOwlHH15ErrCvDEyPiWb8HSGFPpmiqKk%2Bko3%2Ba67g8YZRGZImvnj8aHTeZLlZN%2FxBqQAh3eEIAaNAkSqyw1GIR1SpapgA%3D;
|
43
|
+
path=/natural-language-understanding/api; secure; HttpOnly
|
44
|
+
X-Client-Ip:
|
45
|
+
- 50.67.27.28
|
46
|
+
X-Global-Transaction-Id:
|
47
|
+
- '725228624'
|
48
|
+
Strict-Transport-Security:
|
49
|
+
- max-age=31536000;
|
50
|
+
X-Dp-Watson-Tran-Id:
|
51
|
+
- gateway-dp01-725228624
|
52
|
+
body:
|
53
|
+
encoding: UTF-8
|
54
|
+
string: |-
|
55
|
+
{
|
56
|
+
"language": "en",
|
57
|
+
"keywords": [
|
58
|
+
{
|
59
|
+
"text": "Kieran",
|
60
|
+
"relevance": 0.970239
|
61
|
+
}
|
62
|
+
]
|
63
|
+
}
|
64
|
+
http_version:
|
65
|
+
recorded_at: Thu, 13 Apr 2017 19:45:29 GMT
|
66
|
+
recorded_with: VCR 3.0.3
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibm-watson-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bram Whillock
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activesupport
|
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'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,12 +150,55 @@ dependencies:
|
|
136
150
|
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: webmock
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: dotenv
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: pry
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
139
195
|
description: "."
|
140
196
|
email: bramski@gmail.com
|
141
197
|
executables: []
|
142
198
|
extensions: []
|
143
199
|
extra_rdoc_files: []
|
144
200
|
files:
|
201
|
+
- ".env.example"
|
145
202
|
- ".gitignore"
|
146
203
|
- Gemfile
|
147
204
|
- README.md
|
@@ -153,14 +210,20 @@ files:
|
|
153
210
|
- lib/ibm_watson/conversation.rb
|
154
211
|
- lib/ibm_watson/conversation/dialog_node.rb
|
155
212
|
- lib/ibm_watson/conversation/intent.rb
|
156
|
-
- lib/ibm_watson/conversation/
|
157
|
-
- lib/ibm_watson/conversation/
|
213
|
+
- lib/ibm_watson/conversation/message_response.rb
|
214
|
+
- lib/ibm_watson/conversation/runtime_entity.rb
|
215
|
+
- lib/ibm_watson/conversation/runtime_intent.rb
|
158
216
|
- lib/ibm_watson/conversation/service.rb
|
159
217
|
- lib/ibm_watson/conversation/workspace.rb
|
160
218
|
- lib/ibm_watson/errors.rb
|
219
|
+
- lib/ibm_watson/nlu.rb
|
220
|
+
- lib/ibm_watson/nlu/analyze_result.rb
|
221
|
+
- lib/ibm_watson/nlu/service.rb
|
161
222
|
- lib/ibm_watson/version.rb
|
223
|
+
- lib/ibm_watson_ruby.rb
|
162
224
|
- spec/assets/poc_workspace.json
|
163
225
|
- spec/ibm_watson/conversation/service_spec.rb
|
226
|
+
- spec/ibm_watson/nlu/service_spec.rb
|
164
227
|
- spec/spec_helper.rb
|
165
228
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_create_workspace_.yml
|
166
229
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_delete_workspace_.yml
|
@@ -168,6 +231,7 @@ files:
|
|
168
231
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_message_.yml
|
169
232
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_update_workspace_.yml
|
170
233
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_workspace_.yml
|
234
|
+
- spec/vcr_cassettes/ibm_watson/nlu/service/ibm_watson_nlu_service_keyword_extraction_.yml
|
171
235
|
homepage: https://github.com/imrealtor/watson-ruby
|
172
236
|
licenses:
|
173
237
|
- MIT
|
@@ -195,6 +259,7 @@ summary: IBM Watson services in ruby
|
|
195
259
|
test_files:
|
196
260
|
- spec/assets/poc_workspace.json
|
197
261
|
- spec/ibm_watson/conversation/service_spec.rb
|
262
|
+
- spec/ibm_watson/nlu/service_spec.rb
|
198
263
|
- spec/spec_helper.rb
|
199
264
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_create_workspace_.yml
|
200
265
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_delete_workspace_.yml
|
@@ -202,3 +267,4 @@ test_files:
|
|
202
267
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_message_.yml
|
203
268
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_update_workspace_.yml
|
204
269
|
- spec/vcr_cassettes/ibm_watson/conversation/service/ibm_watson_conversation_service_workspace_.yml
|
270
|
+
- spec/vcr_cassettes/ibm_watson/nlu/service/ibm_watson_nlu_service_keyword_extraction_.yml
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module IBMWatson
|
2
|
-
module Conversation
|
3
|
-
class Result < IBMWatson::BaseModel
|
4
|
-
attribute :entities
|
5
|
-
attribute :input
|
6
|
-
attribute :output
|
7
|
-
attribute :context
|
8
|
-
attribute :alternate_intents
|
9
|
-
|
10
|
-
def intents=(values)
|
11
|
-
@intents = values.map do |value|
|
12
|
-
::IBMWatson::Conversation::IntentResult.new(value)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
attr_reader :intents
|
16
|
-
|
17
|
-
def as_json(*)
|
18
|
-
super.merge({
|
19
|
-
"intents" => intents.as_json
|
20
|
-
})
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|