RecastAI 1.1.1 → 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.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -2
- data/Gemfile.lock +2 -2
- data/README.md +55 -71
- data/lib/recastai.rb +3 -1
- data/lib/recastai/client.rb +12 -8
- data/lib/recastai/entity.rb +4 -0
- data/lib/recastai/errors.rb +2 -0
- data/lib/recastai/intent.rb +13 -0
- data/lib/recastai/response.rb +160 -35
- data/lib/recastai/utils.rb +28 -5
- data/recastai.gemspec +2 -2
- metadata +3 -3
- data/lib/recastai/sentence.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb697ada3b68765c4aaa58a74aecb84b4abd6ce1
|
4
|
+
data.tar.gz: aea0d30db62c6f16036f5bfb05d4192fabb79586
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c8345542618e865f9fe864661f68ffc1e0b5ba482cc7bc367ae50c2d055fc1c2c85dcf2ed04de031c46574d0de1b6f5adee8c489797a5a991183c91db4a6a0a
|
7
|
+
data.tar.gz: 39b7610d272e106875fa4feb59b25db4db1e802d461e2adb8e3a871ba0fe5d55744220fe798caf22fb01bcbdc1f335a1bed5318bc79fdaeae6b62581a89088b3
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -31,12 +31,8 @@ require 'recastai'
|
|
31
31
|
client = RecastAI::Client.new(YOUR_TOKEN, YOUR_LANGUAGE)
|
32
32
|
|
33
33
|
# text request
|
34
|
-
|
35
|
-
|
36
|
-
# file request
|
37
|
-
responseFromFile = client.file_request(File.new(File.join(File.dirname(__FILE__), YOUR_FILE)))
|
38
|
-
|
39
|
-
if responseFromText.intent == YOUR_EXPECTED_INTENT
|
34
|
+
response = client.text_request(YOUR_TEXT)
|
35
|
+
if response.intent.slug == YOUR_EXPECTED_INTENT
|
40
36
|
# Do your code...
|
41
37
|
end
|
42
38
|
```
|
@@ -49,11 +45,11 @@ This gem contains 5 main classes, as follows:
|
|
49
45
|
|
50
46
|
* RecastAI::Client is the client allowing you to make requests.
|
51
47
|
* RecastAI::Response contains the response from [Recast.AI](https://recast.ai).
|
52
|
-
* RecastAI::
|
48
|
+
* RecastAI::Intent represents an intent of the response.
|
53
49
|
* RecastAI::Entity represents an entity found by Recast.AI in your user's input.
|
54
50
|
* RecastAI::RecastError is the error thrown by the gem.
|
55
51
|
|
56
|
-
Don't hesitate to dive into the code, it's commented
|
52
|
+
Don't hesitate to dive into the code, it's commented :)
|
57
53
|
|
58
54
|
## RecastAI::Client
|
59
55
|
|
@@ -112,7 +108,7 @@ __file format: .wav__
|
|
112
108
|
```ruby
|
113
109
|
response = client.file_request(File.new(File.join(File.dirname(__FILE__),YOUR_FILE)))
|
114
110
|
|
115
|
-
if response.intent == YOUR_EXPECTED_INTENT
|
111
|
+
if response.intent.slug == YOUR_EXPECTED_INTENT
|
116
112
|
# Do your code...
|
117
113
|
end
|
118
114
|
```
|
@@ -140,23 +136,11 @@ The Response is generated after a call to either file_request or text_request.
|
|
140
136
|
```ruby
|
141
137
|
response = client.text_request(YOUR_TEXT)
|
142
138
|
|
143
|
-
if response.intent == YOUR_EXPECTED_INTENT
|
139
|
+
if response.intent.slug == YOUR_EXPECTED_INTENT
|
144
140
|
# Do your code...
|
145
141
|
end
|
146
142
|
```
|
147
143
|
|
148
|
-
### Get the first sentence
|
149
|
-
|
150
|
-
| Method | Params | Return |
|
151
|
-
| --------------- |:------:| :------------------|
|
152
|
-
| sentence() | | the first sentence |
|
153
|
-
|
154
|
-
```ruby
|
155
|
-
response = client.text_request(YOUR_TEXT)
|
156
|
-
|
157
|
-
first_sentence = response.sentence
|
158
|
-
```
|
159
|
-
|
160
144
|
### Get the first entity matching name
|
161
145
|
|
162
146
|
| Method | Params | Return |
|
@@ -181,6 +165,38 @@ response = client.text_request(YOUR_TEXT)
|
|
181
165
|
locations = response.all('location')
|
182
166
|
```
|
183
167
|
|
168
|
+
|
169
|
+
|
170
|
+
### Act helpers
|
171
|
+
|
172
|
+
| Method | Params | Return |
|
173
|
+
| ------------- |:------:| :----------------------------------------------------- |
|
174
|
+
| assert? | | Bool: whether or not the sentence is an assertion |
|
175
|
+
| command? | | Bool: whether or not the sentence is a command |
|
176
|
+
| wh\_query? | | Bool: whether or not the sentence is a question |
|
177
|
+
| yn\_query? | | Bool: whether or not the sentence is a query |
|
178
|
+
|
179
|
+
### Type helpers
|
180
|
+
|
181
|
+
| Method | Params | Return |
|
182
|
+
| ------------- |:------:| :----------------------------------------------------- |
|
183
|
+
| abbreviation? | | Bool: is the answer of the sentence an abbreviation? |
|
184
|
+
| entity? | | Bool: is the answer of the sentence an entity? |
|
185
|
+
| description? | | Bool: is the answer of the sentence an description? |
|
186
|
+
| human? | | Bool: is the answer of the sentence an human? |
|
187
|
+
| location? | | Bool: is the answer of the sentence a location? |
|
188
|
+
| number? | | Bool: is the answer of the sentence an number? |
|
189
|
+
|
190
|
+
### Sentiment helpers
|
191
|
+
|
192
|
+
| Method | Params | Return |
|
193
|
+
| ------------- |:------:| :----------------------------------------------------- |
|
194
|
+
| vpositive? | | Bool: is the sentence very positive? |
|
195
|
+
| positive? | | Bool: is the sentence positive? |
|
196
|
+
| neutral? | | Bool: is the sentence neutral? |
|
197
|
+
| negative? | | Bool: is the sentence negative? |
|
198
|
+
| vnegative? | | Bool: is the sentence very negative? |
|
199
|
+
|
184
200
|
### Getters
|
185
201
|
|
186
202
|
Each of the following methods corresponds to a Response attribute
|
@@ -188,68 +204,36 @@ Each of the following methods corresponds to a Response attribute
|
|
188
204
|
| Method | Params | Return |
|
189
205
|
| ------------- |:------:| :---------------------------------------------------|
|
190
206
|
| raw() | | String: the raw unparsed json response |
|
207
|
+
| uuid() | | String: the universal unique id of the request |
|
191
208
|
| source() | | String: the user input |
|
192
|
-
| intents() | | Array[
|
193
|
-
|
|
209
|
+
| intents() | | Array[Intent]: all the matched intents |
|
210
|
+
| act() | | String: the act of the sentence |
|
211
|
+
| type() | | String: the type of the sentence |
|
212
|
+
| sentiment() | | String: the sentiment of the sentence |
|
213
|
+
| entities() | | Array[Entity]: all the detected entities |
|
214
|
+
| language() | | String: the language of the sentence |
|
194
215
|
| version() | | String: the version of the json |
|
195
216
|
| timestamp() | | String: the timestamp at the end of the processing |
|
196
217
|
| status() | | String: the status of the response |
|
197
|
-
| type() | | String: the type of the response |
|
198
|
-
|
199
|
-
|
200
|
-
## RecastAI::Sentence
|
201
|
-
|
202
|
-
The Sentence is generated by the Recast.AI Response initializer
|
203
|
-
|
204
|
-
### Get the first entity matching name
|
205
|
-
|
206
|
-
| Method | Params | Return |
|
207
|
-
| ---------- |:-------------:| :------------------------|
|
208
|
-
| get(name) | name: String | the first Entity matched |
|
209
|
-
|
210
|
-
```ruby
|
211
|
-
response = client.text_request(YOUR_TEXT)
|
212
|
-
|
213
|
-
sentence = response.sentence
|
214
|
-
|
215
|
-
location = sentence.get('location')
|
216
|
-
```
|
217
|
-
|
218
|
-
### Get all entities matching name
|
219
|
-
|
220
|
-
| Method | Params | Return |
|
221
|
-
| ---------- |:-------------:| :------------------------|
|
222
|
-
| all(name) | name: String | all the Entities matched |
|
223
218
|
|
224
|
-
|
225
|
-
response = client.text_request(YOUR_TEXT)
|
219
|
+
## RecastAI::Intent
|
226
220
|
|
227
|
-
|
221
|
+
Each of the following methods corresponds to an Intent attribute
|
228
222
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
Each of the following methods corresponds to a Response attribute
|
235
|
-
|
236
|
-
| Method | Params | Return |
|
237
|
-
| ----------- |:------:| :----------------------------------------------------|
|
238
|
-
| source | | String: the source of the sentence |
|
239
|
-
| type | | String: the type of the sentence |
|
240
|
-
| action | | String: The action of the sentence |
|
241
|
-
| agent | | String: the agent of the sentence |
|
242
|
-
| polarity | | String: the polarity of the sentence |
|
243
|
-
| entities | | Array[Entity]: the entities detected in the sentence |
|
223
|
+
| Attributes | Description |
|
224
|
+
| ----------- |:--------------------------------------------------------------|
|
225
|
+
| slug | String: the slug of the intent |
|
226
|
+
| confidence | Float: the unparsed json value of the intent |
|
244
227
|
|
245
228
|
## RecastAI::Entity
|
246
229
|
|
247
|
-
Each of the following methods corresponds to
|
230
|
+
Each of the following methods corresponds to an Entity attribute
|
248
231
|
|
249
232
|
| Attributes | Description |
|
250
233
|
| ----------- |:--------------------------------------------------------------|
|
251
234
|
| name | String: the name of the entity |
|
252
|
-
| raw | String: the
|
235
|
+
| raw | String: the raw value extracted from the sentence |
|
236
|
+
| confidence | Float: the detection score between 0 and 1 excluded |
|
253
237
|
|
254
238
|
In addition to those methods, more attributes are generated depending of the nature of the entity.
|
255
239
|
The full list can be found there: [man.recast.ai](https://man.recast.ai/#list-of-entities)
|
@@ -288,7 +272,7 @@ Copyright (c) [2016] [Recast.AI](https://recast.ai)
|
|
288
272
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
289
273
|
of this software and associated documentation files (the "Software"), to deal
|
290
274
|
in the Software without restriction, including without limitation the rights
|
291
|
-
to
|
275
|
+
to tsuse, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
292
276
|
copies of the Software, and to permit persons to whom the Software is
|
293
277
|
furnished to do so, subject to the following conditions:
|
294
278
|
|
data/lib/recastai.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
4
|
|
3
5
|
require 'httparty'
|
@@ -8,5 +10,5 @@ require 'recastai/utils'
|
|
8
10
|
require 'recastai/errors'
|
9
11
|
require 'recastai/client'
|
10
12
|
require 'recastai/response'
|
11
|
-
require 'recastai/
|
13
|
+
require 'recastai/intent'
|
12
14
|
require 'recastai/entity'
|
data/lib/recastai/client.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module RecastAI
|
2
4
|
class Client
|
3
5
|
attr_accessor :token
|
@@ -25,10 +27,11 @@ module RecastAI
|
|
25
27
|
|
26
28
|
body = { 'text' => text }
|
27
29
|
body['language'] = language unless language.nil?
|
28
|
-
response = HTTParty.post(
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
response = HTTParty.post(
|
31
|
+
Utils::API_ENDPOINT,
|
32
|
+
body: body,
|
33
|
+
headers: { 'Authorization' => "Token #{token}" }
|
34
|
+
)
|
32
35
|
raise(RecastError.new(response.message)) if response.code != 200
|
33
36
|
|
34
37
|
Response.new(response.body)
|
@@ -52,10 +55,11 @@ module RecastAI
|
|
52
55
|
|
53
56
|
body = { 'voice' => File.new(file) }
|
54
57
|
body['language'] = language unless language.nil?
|
55
|
-
response = HTTMultiParty.post(
|
56
|
-
|
57
|
-
|
58
|
-
|
58
|
+
response = HTTMultiParty.post(
|
59
|
+
Utils::API_ENDPOINT,
|
60
|
+
body: body,
|
61
|
+
headers: { 'Authorization' => "Token #{token}" }
|
62
|
+
)
|
59
63
|
raise(RecastError.new(response.message)) if response.code != 200
|
60
64
|
|
61
65
|
Response.new(response.body)
|
data/lib/recastai/entity.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module RecastAI
|
2
4
|
class Entity
|
3
5
|
attr_reader :name
|
@@ -5,6 +7,8 @@ module RecastAI
|
|
5
7
|
def initialize(name, data)
|
6
8
|
@name = name
|
7
9
|
|
10
|
+
# For each pair key, value, set a instance variable
|
11
|
+
# and an attr_reader named k and returning v
|
8
12
|
data.each_pair do |k, v|
|
9
13
|
self.instance_variable_set("@#{k}", v)
|
10
14
|
self.define_singleton_method(k.to_sym){ v }
|
data/lib/recastai/errors.rb
CHANGED
data/lib/recastai/response.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module RecastAI
|
2
4
|
class Response
|
3
5
|
attr_reader :raw
|
6
|
+
attr_reader :uuid
|
4
7
|
attr_reader :source
|
5
8
|
attr_reader :intents
|
6
|
-
attr_reader :
|
9
|
+
attr_reader :act
|
10
|
+
attr_reader :type
|
11
|
+
attr_reader :sentiment
|
12
|
+
attr_reader :entities
|
7
13
|
attr_reader :language
|
8
14
|
attr_reader :version
|
9
15
|
attr_reader :timestamp
|
@@ -15,9 +21,13 @@ module RecastAI
|
|
15
21
|
response = JSON.parse(response)
|
16
22
|
response = response['results']
|
17
23
|
|
24
|
+
@uuid = response['uuid']
|
18
25
|
@source = response['source']
|
19
|
-
@intents = response['intents']
|
20
|
-
@
|
26
|
+
@intents = response['intents'].map{ |i| Intent.new(i) }
|
27
|
+
@act = response['act']
|
28
|
+
@type = response['type']
|
29
|
+
@sentiment = response['sentiment']
|
30
|
+
@entities = response['entities'].flat_map{ |n, e| e.map{ |ee| Entity.new(n, ee) } }
|
21
31
|
@language = response['language']
|
22
32
|
@version = response['version']
|
23
33
|
@timestamp = response['timestamp']
|
@@ -34,16 +44,6 @@ module RecastAI
|
|
34
44
|
@intents.any? ? @intents.first : nil
|
35
45
|
end
|
36
46
|
|
37
|
-
##
|
38
|
-
# Returns the first sentence provided there is one
|
39
|
-
#
|
40
|
-
# * *Args* :
|
41
|
-
# * *Returns* :
|
42
|
-
# - A Sentence or nil
|
43
|
-
def sentence
|
44
|
-
@sentences.any? ? @sentences.first : nil
|
45
|
-
end
|
46
|
-
|
47
47
|
##
|
48
48
|
# Returns the first entity whose name matches the parameter
|
49
49
|
#
|
@@ -52,10 +52,8 @@ module RecastAI
|
|
52
52
|
# * *Returns* :
|
53
53
|
# - An instance of Entity or nil
|
54
54
|
def get(name)
|
55
|
-
@
|
56
|
-
|
57
|
-
return entity if entity.name.casecmp(name.to_s) == 0
|
58
|
-
end
|
55
|
+
@entities.each do |entity|
|
56
|
+
return entity if entity.name.casecmp(name.to_s) == 0
|
59
57
|
end
|
60
58
|
|
61
59
|
nil
|
@@ -69,32 +67,159 @@ module RecastAI
|
|
69
67
|
# * *Returns* :
|
70
68
|
# - An array of instances of Entity or an empty array
|
71
69
|
def all(name)
|
72
|
-
entities
|
73
|
-
|
74
|
-
@sentences.each do |sentence|
|
75
|
-
sentence.entities.each do |entity|
|
76
|
-
entities << entity if entity.name.casecmp(name.to_s) == 0
|
77
|
-
end
|
70
|
+
@entities.select do |entity|
|
71
|
+
entity.name.casecmp(name.to_s) == 0
|
78
72
|
end
|
73
|
+
end
|
79
74
|
|
80
|
-
|
75
|
+
##
|
76
|
+
# Return whether or not the act is an assertion
|
77
|
+
#
|
78
|
+
# + *Args* :
|
79
|
+
# + *Returns* :
|
80
|
+
# - True or False
|
81
|
+
def assert?
|
82
|
+
@act == Utils::ACT_ASSERT
|
81
83
|
end
|
82
84
|
|
83
85
|
##
|
84
|
-
#
|
86
|
+
# Return whether or not the act is a command
|
85
87
|
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
|
89
|
-
|
88
|
+
# + *Args* :
|
89
|
+
# + *Returns* :
|
90
|
+
# - True or False
|
91
|
+
def command?
|
92
|
+
@act == Utils::ACT_COMMAND
|
93
|
+
end
|
90
94
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
95
|
+
##
|
96
|
+
# Return whether or not the act is a wh-query
|
97
|
+
#
|
98
|
+
# + *Args* :
|
99
|
+
# + *Returns* :
|
100
|
+
# - True or False
|
101
|
+
def wh_query?
|
102
|
+
@act == Utils::ACT_WH_QUERY
|
103
|
+
end
|
104
|
+
|
105
|
+
##
|
106
|
+
# Return whether or not the act is a yn-query
|
107
|
+
#
|
108
|
+
# + *Args* :
|
109
|
+
# + *Returns* :
|
110
|
+
# - True or False
|
111
|
+
def yn_query?
|
112
|
+
@act == Utils::ACT_YN_QUERY
|
113
|
+
end
|
114
|
+
|
115
|
+
##
|
116
|
+
# Return whether or not the type is an abbreviation
|
117
|
+
#
|
118
|
+
# + *Args* :
|
119
|
+
# + *Returns* :
|
120
|
+
# - True or False
|
121
|
+
def abbreviation?
|
122
|
+
!@type.index(Utils::TYPE_ABBREVIATION).nil?
|
123
|
+
end
|
124
|
+
|
125
|
+
##
|
126
|
+
# Return whether or not the type is an entity
|
127
|
+
#
|
128
|
+
# + *Args* :
|
129
|
+
# + *Returns* :
|
130
|
+
# - True or False
|
131
|
+
def entity?
|
132
|
+
!@type.index(Utils::TYPE_ENTITY).nil?
|
133
|
+
end
|
134
|
+
|
135
|
+
##
|
136
|
+
# Return whether or not the type is a description
|
137
|
+
#
|
138
|
+
# + *Args* :
|
139
|
+
# + *Returns* :
|
140
|
+
# - True or False
|
141
|
+
def description?
|
142
|
+
!@type.index(Utils::TYPE_DESCRIPTION).nil?
|
143
|
+
end
|
144
|
+
|
145
|
+
##
|
146
|
+
# Return whether or not the type is a human
|
147
|
+
#
|
148
|
+
# + *Args* :
|
149
|
+
# + *Returns* :
|
150
|
+
# - True or False
|
151
|
+
def human?
|
152
|
+
!@type.index(Utils::TYPE_HUMAN).nil?
|
153
|
+
end
|
154
|
+
|
155
|
+
##
|
156
|
+
# Return whether or not the type is a location
|
157
|
+
#
|
158
|
+
# + *Args* :
|
159
|
+
# + *Returns* :
|
160
|
+
# - True or False
|
161
|
+
def location?
|
162
|
+
!@type.index(Utils::TYPE_LOCATION).nil?
|
163
|
+
end
|
164
|
+
|
165
|
+
##
|
166
|
+
# Return whether or not the type is a number
|
167
|
+
#
|
168
|
+
# + *Args* :
|
169
|
+
# + *Returns* :
|
170
|
+
# - True or False
|
171
|
+
def number?
|
172
|
+
!@type.index(Utils::TYPE_NUMBER).nil?
|
173
|
+
end
|
174
|
+
|
175
|
+
##
|
176
|
+
# Return whether or not the sentiment is very positive
|
177
|
+
#
|
178
|
+
# + *Args* :
|
179
|
+
# + *Returns* :
|
180
|
+
# - True or False
|
181
|
+
def vpositive?
|
182
|
+
@sentiment == Utils::SENTIMENT_VPOSITIVE
|
183
|
+
end
|
184
|
+
|
185
|
+
##
|
186
|
+
# Return whether or not the sentiment is positive
|
187
|
+
#
|
188
|
+
# + *Args* :
|
189
|
+
# + *Returns* :
|
190
|
+
# - True or False
|
191
|
+
def positive?
|
192
|
+
@sentiment == Utils::SENTIMENT_POSITIVE
|
193
|
+
end
|
194
|
+
|
195
|
+
##
|
196
|
+
# Return whether or not the sentiment is neutral
|
197
|
+
#
|
198
|
+
# + *Args* :
|
199
|
+
# + *Returns* :
|
200
|
+
# - True or False
|
201
|
+
def neutral?
|
202
|
+
@sentiment == Utils::SENTIMENT_NEUTRAL
|
203
|
+
end
|
204
|
+
|
205
|
+
##
|
206
|
+
# Return whether or not the sentiment is negative
|
207
|
+
#
|
208
|
+
# + *Args* :
|
209
|
+
# + *Returns* :
|
210
|
+
# - True or False
|
211
|
+
def negative?
|
212
|
+
@sentiment == Utils::SENTIMENT_NEGATIVE
|
213
|
+
end
|
96
214
|
|
97
|
-
|
215
|
+
##
|
216
|
+
# Return whether or not the sentiment is very negative
|
217
|
+
#
|
218
|
+
# + *Args* :
|
219
|
+
# + *Returns* :
|
220
|
+
# - True or False
|
221
|
+
def vnegative?
|
222
|
+
@sentiment == Utils::SENTIMENT_VNEGATIVE
|
98
223
|
end
|
99
224
|
end
|
100
225
|
end
|
data/lib/recastai/utils.rb
CHANGED
@@ -1,13 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module RecastAI
|
2
4
|
class Utils
|
3
5
|
# Versioning
|
4
|
-
MAJOR
|
5
|
-
MINOR
|
6
|
-
MICRO
|
6
|
+
MAJOR = '2'.freeze
|
7
|
+
MINOR = '0'.freeze
|
8
|
+
MICRO = '0'.freeze
|
7
9
|
VERSION = "#{MAJOR}.#{MINOR}.#{MICRO}".freeze
|
8
10
|
|
9
11
|
# Endpoints
|
10
|
-
API_ENDPOINT = 'https://api.recast.ai/
|
11
|
-
WS_ENDPOINT
|
12
|
+
API_ENDPOINT = 'https://api.recast.ai/v2/request'.freeze
|
13
|
+
WS_ENDPOINT = 'wss://api.recast.ai/v2/request'.freeze
|
14
|
+
|
15
|
+
# Act constants
|
16
|
+
ACT_ASSERT = 'assert'.freeze
|
17
|
+
ACT_COMMAND = 'command'.freeze
|
18
|
+
ACT_WH_QUERY = 'wh-query'.freeze
|
19
|
+
ACT_YN_QUERY = 'yn-query'.freeze
|
20
|
+
|
21
|
+
# Type constants
|
22
|
+
TYPE_ABBREVIATION = 'abbr:'.freeze
|
23
|
+
TYPE_ENTITY = 'enty:'.freeze
|
24
|
+
TYPE_DESCRIPTION = 'desc:'.freeze
|
25
|
+
TYPE_HUMAN = 'hum:'.freeze
|
26
|
+
TYPE_LOCATION = 'loc:'.freeze
|
27
|
+
TYPE_NUMBER = 'num:'.freeze
|
28
|
+
|
29
|
+
# Sentiment constants
|
30
|
+
SENTIMENT_VPOSITIVE = 'vpositive'.freeze
|
31
|
+
SENTIMENT_POSITIVE = 'positive'.freeze
|
32
|
+
SENTIMENT_NEUTRAL = 'neutral'.freeze
|
33
|
+
SENTIMENT_NEGATIVE = 'negative'.freeze
|
34
|
+
SENTIMENT_VNEGATIVE = 'vnegative'.freeze
|
12
35
|
end
|
13
36
|
end
|
data/recastai.gemspec
CHANGED
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.name = 'RecastAI'
|
11
11
|
spec.version = RecastAI::Utils::VERSION
|
12
12
|
spec.date = Date.today
|
13
|
-
spec.summary =
|
14
|
-
spec.description =
|
13
|
+
spec.summary = 'Recast.AI official SDK for Ruby'
|
14
|
+
spec.description = 'Recast.AI official SDK for Ruby. Allows you to make requests to your bots.'
|
15
15
|
spec.homepage = 'https://github.com/RecastAI/SDK-ruby'
|
16
16
|
spec.license = 'MIT'
|
17
17
|
spec.authors = ['Paul Renvoisé']
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: RecastAI
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Renvoisé
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -116,8 +116,8 @@ files:
|
|
116
116
|
- lib/recastai/client.rb
|
117
117
|
- lib/recastai/entity.rb
|
118
118
|
- lib/recastai/errors.rb
|
119
|
+
- lib/recastai/intent.rb
|
119
120
|
- lib/recastai/response.rb
|
120
|
-
- lib/recastai/sentence.rb
|
121
121
|
- lib/recastai/utils.rb
|
122
122
|
- misc/.gitkeep
|
123
123
|
- misc/logo-inline.png
|
data/lib/recastai/sentence.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
module RecastAI
|
2
|
-
class Sentence
|
3
|
-
attr_reader :source
|
4
|
-
attr_reader :type
|
5
|
-
attr_reader :action
|
6
|
-
attr_reader :agent
|
7
|
-
attr_reader :polarity
|
8
|
-
attr_reader :entities
|
9
|
-
|
10
|
-
def initialize(sentence)
|
11
|
-
@source = sentence['source']
|
12
|
-
@type = sentence['type']
|
13
|
-
@action = sentence['action']
|
14
|
-
@agent = sentence['agent']
|
15
|
-
@polarity = sentence['polarity']
|
16
|
-
@entities = sentence['entities'].flat_map{ |n, e| e.map{ |ee| Entity.new(n, ee) } }
|
17
|
-
end
|
18
|
-
|
19
|
-
##
|
20
|
-
# Returns the first entity whose name matches the parameter
|
21
|
-
#
|
22
|
-
# * *Args* :
|
23
|
-
# - +name+ - String, the entity's name
|
24
|
-
# * *Returns* :
|
25
|
-
# - An instance of Entity or nil
|
26
|
-
def get(name)
|
27
|
-
@entities.each do |entity|
|
28
|
-
return entity if entity.name.casecmp(name.to_s) == 0
|
29
|
-
end
|
30
|
-
|
31
|
-
nil
|
32
|
-
end
|
33
|
-
|
34
|
-
##
|
35
|
-
# Returns all entities whose names matches the parameter
|
36
|
-
#
|
37
|
-
# * *Args* :
|
38
|
-
# - +name+ - String, the entities' names
|
39
|
-
# * *Returns* :
|
40
|
-
# - An array of instances of Entity or an empty array
|
41
|
-
def all(name)
|
42
|
-
entities = []
|
43
|
-
|
44
|
-
@entities.each do |entity|
|
45
|
-
entities << entity if entity.name.casecmp(name.to_s) == 0
|
46
|
-
end
|
47
|
-
|
48
|
-
entities
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|