nlu_tools 0.1.0 → 0.1.1

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
  SHA256:
3
- metadata.gz: 57668b33bec11c4b6f381cb623b58ecb55d160e4c9b581929c1be7dc8a7c75d5
4
- data.tar.gz: 40e5cf7c30e7a193b30eb35734f4d3ae57760bf98b8ae96c23352c4581635a74
3
+ metadata.gz: 205a7f60e574bca2be39388e5cc4b570649d07593d10b4072cbe4f8a8ee91051
4
+ data.tar.gz: 2519efe88b93f42abc13408453ee1bac35c608781a6162cfc3e260cee9edb913
5
5
  SHA512:
6
- metadata.gz: 25075378cd1ae7605043e2df602899f053e76c29cd40beb45b7161c3be147ae40abf43992b28fca2d2f31ebe2e8e37373b165fa501abc82cc8d9a4355cf3c925
7
- data.tar.gz: 36191f7979f3dd4c9d9ba8aa3515a017cf417857167ddf47169d45245d08c9eaa2148df58c689f6ce964a686fa8144c1c833e1c47507d3d2bbe9e93e46cc21a0
6
+ metadata.gz: b437466a2f80dc1a6a3ce032986afceca1073215cd96afb458fec8c7709dcbbbdc6d3dcd487fb3f28a119f931ace1e1a5856dc43a22c2ba442e546c099197fe4
7
+ data.tar.gz: 11d6bfc0e6e6369638c0a205c3654e616825c8a72ab112f62bc4ae1cfcf5fcdf476e4ce228f20ed508594c3866c315fd660ba17f1768d31f4f17a4ce9ce36fbd
@@ -1,3 +1,9 @@
1
+ 0.1.1 (16/Oct/2019)
2
+ ---
3
+ * added sample data for training & testing
4
+ * added import file schema validation
5
+ * added testing file schema validation
6
+
1
7
  0.1.0 (09/Oct/2019)
2
8
  ---
3
9
  * Initial release
@@ -1,8 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nlu_tools (0.1.0)
4
+ nlu_tools (0.1.1)
5
+ json_schemer (~> 0.2.7)
5
6
  nlu_adapter (~> 0.1.6)
7
+ thor (~> 0.20.3)
6
8
 
7
9
  GEM
8
10
  remote: https://rubygems.org/
@@ -11,13 +13,13 @@ GEM
11
13
  public_suffix (>= 2.0.2, < 5.0)
12
14
  ast (2.4.0)
13
15
  aws-eventstream (1.0.3)
14
- aws-partitions (1.220.0)
16
+ aws-partitions (1.223.0)
15
17
  aws-sdk-core (3.68.1)
16
18
  aws-eventstream (~> 1.0, >= 1.0.2)
17
19
  aws-partitions (~> 1.0)
18
20
  aws-sigv4 (~> 1.1)
19
21
  jmespath (~> 1.0)
20
- aws-sdk-lex (1.19.0)
22
+ aws-sdk-lex (1.20.0)
21
23
  aws-sdk-core (~> 3, >= 3.61.1)
22
24
  aws-sigv4 (~> 1.1)
23
25
  aws-sdk-lexmodelbuildingservice (1.21.0)
@@ -29,6 +31,8 @@ GEM
29
31
  diff-lcs (1.3)
30
32
  domain_name (0.5.20190701)
31
33
  unf (>= 0.0.5, < 1.0.0)
34
+ ecma-re-validator (0.2.0)
35
+ regexp_parser (~> 1.2)
32
36
  eventmachine (1.2.7)
33
37
  faraday (0.17.0)
34
38
  multipart-post (>= 1.2, < 3)
@@ -37,29 +41,30 @@ GEM
37
41
  websocket-driver (>= 0.5.1)
38
42
  google-cloud-dialogflow (0.2.3)
39
43
  google-gax (~> 1.3)
40
- google-gax (1.7.1)
41
- google-protobuf (~> 3.2)
42
- googleapis-common-protos (>= 1.3.5, < 2.0)
43
- googleauth (>= 0.6.2, < 0.10.0)
44
- grpc (>= 1.7.2, < 2.0)
44
+ google-gax (1.8.1)
45
+ google-protobuf (~> 3.9)
46
+ googleapis-common-protos (>= 1.3.9, < 2.0)
47
+ googleauth (~> 0.9)
48
+ grpc (~> 1.24)
45
49
  rly (~> 0.2.3)
46
- google-protobuf (3.9.2)
50
+ google-protobuf (3.9.2-x86_64-linux)
47
51
  googleapis-common-protos (1.3.9)
48
52
  google-protobuf (~> 3.0)
49
53
  googleapis-common-protos-types (~> 1.0)
50
54
  grpc (~> 1.0)
51
55
  googleapis-common-protos-types (1.0.4)
52
56
  google-protobuf (~> 3.0)
53
- googleauth (0.9.0)
57
+ googleauth (0.10.0)
54
58
  faraday (~> 0.12)
55
59
  jwt (>= 1.4, < 3.0)
56
60
  memoist (~> 0.16)
57
61
  multi_json (~> 1.11)
58
62
  os (>= 0.9, < 2.0)
59
- signet (~> 0.7)
60
- grpc (1.24.0)
63
+ signet (~> 0.12)
64
+ grpc (1.24.0-x86_64-linux)
61
65
  google-protobuf (~> 3.8)
62
66
  googleapis-common-protos-types (~> 1.0)
67
+ hana (1.3.5)
63
68
  http (3.3.0)
64
69
  addressable (~> 2.3)
65
70
  http-cookie (~> 1.0)
@@ -76,6 +81,11 @@ GEM
76
81
  http (~> 3.3)
77
82
  jaro_winkler (1.5.3)
78
83
  jmespath (1.4.0)
84
+ json_schemer (0.2.7)
85
+ ecma-re-validator (~> 0.2)
86
+ hana (~> 1.3)
87
+ regexp_parser (~> 1.5)
88
+ uri_template (~> 0.7)
79
89
  jwt (2.2.1)
80
90
  matrix (0.1.0)
81
91
  memoist (0.16.0)
@@ -94,6 +104,7 @@ GEM
94
104
  public_suffix (4.0.1)
95
105
  rainbow (3.0.0)
96
106
  rake (13.0.0)
107
+ regexp_parser (1.6.0)
97
108
  rly (0.2.3)
98
109
  rspec (3.9.0)
99
110
  rspec-core (~> 3.9.0)
@@ -116,15 +127,17 @@ GEM
116
127
  ruby-progressbar (~> 1.7)
117
128
  unicode-display_width (>= 1.4.0, < 1.7)
118
129
  ruby-progressbar (1.10.1)
119
- signet (0.11.0)
130
+ signet (0.12.0)
120
131
  addressable (~> 2.3)
121
132
  faraday (~> 0.9)
122
133
  jwt (>= 1.5, < 3.0)
123
134
  multi_json (~> 1.10)
135
+ thor (0.20.3)
124
136
  unf (0.1.4)
125
137
  unf_ext
126
138
  unf_ext (0.0.7.6)
127
139
  unicode-display_width (1.6.0)
140
+ uri_template (0.7.0)
128
141
  websocket-driver (0.7.1)
129
142
  websocket-extensions (>= 0.1.0)
130
143
  websocket-extensions (0.1.4)
data/README.md CHANGED
@@ -11,6 +11,7 @@ $ gem install nlu_tools
11
11
 
12
12
  ## Usage
13
13
 
14
+ ### get help
14
15
  ```bash
15
16
  $ nlu_toolset help
16
17
  $ nlu_toolset import help
@@ -21,6 +22,43 @@ $ nlu_toolset test help lex
21
22
  $ nlu_toolset test help dialogflow
22
23
  ```
23
24
 
25
+
26
+ ### setup keys
27
+ ```bash
28
+ $ export AWS_REGION='AWS_REGION'
29
+ $ export AWS_ACCESS_KEY_ID='AWS_ACCESS_KEY_ID'
30
+ $ export AWS_SECRET_ACCESS_KEY='AWS_SECRET_ACCESS_KEY'
31
+ $ export GOOGLE_APPLICATION_CREDENTIALS='/path/to/google-project-key.json'
32
+
33
+ ```
34
+
35
+ ### importing training data
36
+ ```bash
37
+ $ nlu_toolset import lex -f ./data/simple_train.json --botname testbot
38
+
39
+ $ nlu_toolset import dialogflow -f ./data/simple_train.json -p google-project-id
40
+ ```
41
+
42
+ ### running tests
43
+ ```bash
44
+ $ nlu_toolset test lex -f ./data/simple_test.json --botname testbot -o output_l.csv -t summary
45
+
46
+ $ nlu_toolset test dialogflow -f ./data/simple_test.json -p google-project-id -o output_d.csv
47
+ ```
48
+
49
+ ### creating training & test data
50
+ The sample training and testing json files in [data](data) directory has two intents taken for simplicity from [Watson Assistant Sample Application repo](https://github.com/watson-developer-cloud/assistant-simple/) / [bank_simple_workspace.json](https://github.com/watson-developer-cloud/assistant-simple/blob/master/training/bank_simple_workspace.json). It is generated using [jq](https://stedolan.github.io/jq/). Please feel free to fetch the file and run the below commands to generate the full training & test set.
51
+
52
+ #### get all intents and its examples except the last 2 for training:
53
+ ```bash
54
+ $ jq '{"training_data": [.intents[] | {"intent":.intent, "utterences":[.examples[].text] | .[:-2]}]}' data/bank_simple_workspace.json > ./data/simple_train.json
55
+ ```
56
+
57
+ #### get the last 2 intents and its examples for testing:
58
+ ```bash
59
+ $ jq '{"testing_data": [.intents[] | {"intent":.intent, "utterences":[.examples[].text] | .[-2:]}]}' data/bank_simple_workspace.json > ./data/simple_test.json
60
+ ```
61
+
24
62
  ## Development
25
63
 
26
64
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -29,7 +67,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
29
67
 
30
68
  ## Contributing
31
69
 
32
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/nlu_tools. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
70
+ Bug reports and pull requests are welcome on GitHub at https://github.com/technopreneurG/nlu_tools. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
33
71
 
34
72
  ## License
35
73
 
@@ -37,4 +75,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
37
75
 
38
76
  ## Code of Conduct
39
77
 
40
- Everyone interacting in the NluTools project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/nlu_tools/blob/master/CODE_OF_CONDUCT.md).
78
+ Everyone interacting in the NluTools project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/technopreneurG/nlu_tools/blob/master/CODE_OF_CONDUCT.md).
@@ -0,0 +1,18 @@
1
+ {
2
+ "testing_data": [
3
+ {
4
+ "intent": "Banking-General_Rate_Query",
5
+ "utterences": [
6
+ "APR for personal credit cards",
7
+ "interest rates for personal credit cards"
8
+ ]
9
+ },
10
+ {
11
+ "intent": "Loyalty_Program-Loyalty_Status",
12
+ "utterences": [
13
+ "Am I still part of the rewards program?",
14
+ "Am I still in the loyalty program?"
15
+ ]
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "training_data": [
3
+ {
4
+ "intent": "Banking-General_Rate_Query",
5
+ "utterences": [
6
+ "who can i contact to talk about credit card rates",
7
+ "credit card rates at the moment",
8
+ "credit cards interest rate information",
9
+ "What are the interest rates on your credit cards",
10
+ "how about your credit card interest rates",
11
+ "annual percentage rate credit cards",
12
+ "are your card interest rates high",
13
+ "current interest rate for credit cards",
14
+ "credit cards rate of interest",
15
+ "What are your credit card interest rates",
16
+ "What are your credit card APR rates",
17
+ "What is the interest rate on your credit cards",
18
+ "tell me the annual percentage rate on your credit card",
19
+ "What credit card interest rate do you charge",
20
+ "are your APR rates low for your credit card",
21
+ "What is the APR on your credit cards",
22
+ "credit card interest rate information",
23
+ "would like to know about credit card rates"
24
+ ]
25
+ },
26
+ {
27
+ "intent": "Loyalty_Program-Loyalty_Status",
28
+ "utterences": [
29
+ "Can I use loyalty points",
30
+ "Can you tell me where Im at with the rewards points",
31
+ "status of loyalty program",
32
+ "Is this account still in the loyalty scheme",
33
+ "Where am I at with the loyalty program",
34
+ "Do I still have access to loyalty rewards"
35
+ ]
36
+ }
37
+ ]
38
+ }
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
+ require 'pathname'
3
+ require 'json_schemer'
2
4
 
3
5
  module NluTools
4
6
  # The subcommand import
@@ -29,12 +31,19 @@ module NluTools
29
31
  exit(1)
30
32
  end
31
33
  intents = JSON.parse(File.read(options[:file]))
32
- d = NluAdapter.new(:Dialogflow,
33
- project_id: options[:project_id],
34
- session_id: 'SESSION1')
35
- intents.each do |intent|
36
- i = d.new_intent(intent['intent'], intent['train'])
37
- d.create_intent(i)
34
+ schema = Pathname.new('schema/nlu_training_data.json')
35
+ schemer = JSONSchemer.schema(schema)
36
+ if schemer.valid?(intents)
37
+ d = NluAdapter.new(:Dialogflow,
38
+ project_id: options[:project_id],
39
+ session_id: 'SESSION1')
40
+ intents['training_data'].each do |intent|
41
+ i = d.new_intent(intent['intent'], intent['utterences'])
42
+ d.create_intent(i)
43
+ end
44
+ else
45
+ puts "Training data is not in valid format\nPlease check data/simple_train.json for reference"
46
+ exit(1)
38
47
  end
39
48
  end
40
49
 
@@ -65,21 +74,26 @@ module NluTools
65
74
  end
66
75
 
67
76
  intents = JSON.parse(File.read(options[:file]))
68
- puts intents.size
69
- l = NluAdapter.new(:Lex,
70
- bot_name: options[:botname],
71
- bot_alias: 'BotAlias',
72
- user_id: 'user-1')
73
- lex_intents = []
74
- intents.each do |intent|
75
- intent_name = intent['intent'].gsub('-', '_')
76
- puts '---'
77
- i = l.new_intent(intent_name, intent['train'])
78
- lex_intents << i
79
- end
77
+ schema = Pathname.new('schema/nlu_training_data.json')
78
+ schemer = JSONSchemer.schema(schema)
79
+ if schemer.valid?(intents)
80
+ l = NluAdapter.new(:Lex,
81
+ bot_name: options[:botname],
82
+ bot_alias: 'BotAlias',
83
+ user_id: 'user-1')
84
+ lex_intents = []
85
+ intents['training_data'].each do |intent|
86
+ intent_name = intent['intent'].gsub('-', '_')
87
+ i = l.new_intent(intent_name, intent['utterences'])
88
+ lex_intents << i
89
+ end
80
90
 
81
- ic = l.new_intent_collection(options[:botname], lex_intents)
82
- l.create_intent_collection(ic)
91
+ ic = l.new_intent_collection(options[:botname], lex_intents)
92
+ l.create_intent_collection(ic)
93
+ else
94
+ puts "Training data is not in valid format\nPlease check data/simple_train.json for reference"
95
+ exit(1)
96
+ end
83
97
  end
84
98
  end
85
99
  end
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
+ require 'pathname'
3
+ require 'json_schemer'
2
4
 
3
5
  module NluTools
4
6
  # The subcommand for test
@@ -42,15 +44,22 @@ module NluTools
42
44
  end
43
45
 
44
46
  intents = JSON.parse(File.read(options[:file]))
45
- na = NluAdapter.new(:Dialogflow,
46
- project_id: options[:project_id],
47
- session_id: 'SESSION1')
48
- new_intents = {}
49
- intents.each do |intent|
50
- new_intents[intent['intent']] = intent['test']
51
- end
47
+ schema = Pathname.new('schema/nlu_testing_data.json')
48
+ schemer = JSONSchemer.schema(schema)
49
+ if schemer.valid?(intents)
50
+ na = NluAdapter.new(:Dialogflow,
51
+ project_id: options[:project_id],
52
+ session_id: 'SESSION1')
53
+ new_intents = {}
54
+ intents['testing_data'].each do |intent|
55
+ new_intents[intent['intent']] = intent['utterences']
56
+ end
52
57
 
53
- run_tests(na, new_intents, options[:output_file], options[:output_type])
58
+ run_tests(na, new_intents, options[:output_file], options[:output_type])
59
+ else
60
+ puts "Testing data is not in valid format\nPlease check data/simple_test.json for reference"
61
+ exit(1)
62
+ end
54
63
  end
55
64
 
56
65
  desc 'lex', 'test the data in <file> using AWS Lex'
@@ -95,23 +104,30 @@ module NluTools
95
104
  end
96
105
 
97
106
  intents = JSON.parse(File.read(options[:file]))
98
- na = NluAdapter.new(:Lex,
99
- bot_name: options[:botname],
100
- bot_alias: 'BotAlias',
101
- user_id: 'user-1')
102
- new_intents = {}
103
- intents.each do |intent|
104
- intent_name = intent['intent'].gsub('-', '_')
105
- new_intents[intent_name] = intent['test']
106
- end
107
+ schema = Pathname.new('schema/nlu_testing_data.json')
108
+ schemer = JSONSchemer.schema(schema)
109
+ if schemer.valid?(intents)
110
+ na = NluAdapter.new(:Lex,
111
+ bot_name: options[:botname],
112
+ bot_alias: 'BotAlias',
113
+ user_id: 'user-1')
114
+ new_intents = {}
115
+ intents['testing_data'].each do |intent|
116
+ intent_name = intent['intent'].gsub('-', '_')
117
+ new_intents[intent_name] = intent['utterences']
118
+ end
107
119
 
108
- run_tests(na, new_intents, options[:output_file], options[:output_type])
120
+ run_tests(na, new_intents, options[:output_file], options[:output_type])
121
+ else
122
+ puts "Testing data is not in valid format\nPlease check data/simple_test.json for reference"
123
+ exit(1)
124
+ end
109
125
  end
110
126
 
111
127
  private
112
128
 
113
129
  def run_tests(nlu_adapter, intents, output_file, output_type)
114
- ext = output_file.nil? || output_file.empty? ? :none : output_file.split('.')[-1].intern
130
+ ext = output_file.nil? || output_file.empty? || output_file == :STDOUT ? :none : output_file.split('.')[-1].intern
115
131
  type = output_type.nil? || output_type.empty? ? :raw : output_type.intern
116
132
 
117
133
  case type
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NluTools
4
- VERSION = '0.1.0'
4
+ VERSION = '0.1.1'
5
5
  end
@@ -43,4 +43,6 @@ Gem::Specification.new do |spec|
43
43
  spec.add_development_dependency 'rubocop', '~> 0.75.0'
44
44
 
45
45
  spec.add_dependency('nlu_adapter', '~> 0.1.6')
46
+ spec.add_dependency('json_schemer', '~> 0.2.7')
47
+ spec.add_dependency('thor', '~> 0.20.3')
46
48
  end
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://github.com/technopreneurG/nlu_tools_ruby/schema/nlu_testing_data.json",
4
+ "title": "NluTestingData",
5
+ "description": "NLU testing data schema",
6
+ "type": "object",
7
+ "properties": {
8
+ "testing_data": {
9
+ "type": "array",
10
+ "description": "array of intents which need to be tested",
11
+ "items": {
12
+ "type": "object",
13
+ "properties": {
14
+ "intent" : {
15
+ "description": "known intent associated with the utterences",
16
+ "type": "string"
17
+ },
18
+ "utterences": {
19
+ "description": "the testing sentences",
20
+ "type": "array",
21
+ "items": {
22
+ "type": "string"
23
+ },
24
+ "minItems": 1,
25
+ "uniqueItems": true
26
+ }
27
+ },
28
+ "required": ["intent", "utterences"]
29
+ }
30
+ }
31
+ },
32
+ "required": ["testing_data"]
33
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://github.com/technopreneurG/nlu_tools_ruby/schema/nlu_training_data.json",
4
+ "title": "NluTrainingData",
5
+ "description": "NLU training data schema",
6
+ "type": "object",
7
+ "properties": {
8
+ "training_data": {
9
+ "type": "array",
10
+ "description": "array of intents which need to be imported into the NLU system",
11
+ "items": {
12
+ "type": "object",
13
+ "properties": {
14
+ "intent" : {
15
+ "description": "intent associated with the utterences",
16
+ "type": "string"
17
+ },
18
+ "utterences": {
19
+ "description": "the training sentences",
20
+ "type": "array",
21
+ "items": {
22
+ "type": "string"
23
+ },
24
+ "minItems": 1,
25
+ "uniqueItems": true
26
+ }
27
+ },
28
+ "required": ["intent", "utterences"]
29
+ }
30
+ }
31
+ },
32
+ "required": ["training_data"]
33
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nlu_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Girish Nair
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-08 00:00:00.000000000 Z
11
+ date: 2019-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.1.6
97
+ - !ruby/object:Gem::Dependency
98
+ name: json_schemer
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.2.7
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.2.7
111
+ - !ruby/object:Gem::Dependency
112
+ name: thor
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.20.3
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.20.3
97
125
  description: A Toolset for NLU evaluation
98
126
  email:
99
127
  - getgirish@gmail.com
@@ -115,6 +143,8 @@ files:
115
143
  - bin/console
116
144
  - bin/setup
117
145
  - data/.keep
146
+ - data/simple_test.json
147
+ - data/simple_train.json
118
148
  - exe/nlu_toolset
119
149
  - lib/nlu_tools.rb
120
150
  - lib/nlu_tools/cli.rb
@@ -122,6 +152,8 @@ files:
122
152
  - lib/nlu_tools/cli/test.rb
123
153
  - lib/nlu_tools/version.rb
124
154
  - nlu_tools.gemspec
155
+ - schema/nlu_testing_data.json
156
+ - schema/nlu_training_data.json
125
157
  homepage: https://rubygems.org/gems/nlu_tools
126
158
  licenses:
127
159
  - MIT