indico 0.3.2 → 0.4.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5c9c674de4496664e06caa095548544c6c9a9ee5
4
+ data.tar.gz: dc041b9ee95a7179d8879d89f84e9951c06cbf92
5
+ SHA512:
6
+ metadata.gz: d044d992744aa72502c645840eb7ec9c8848228e994cb71ab008715c265f206cd8af35b45b3636cf3cb2b6384d85f1b97f0c06a7f6adbf67259337b15ed4ff1e
7
+ data.tar.gz: 4e8f6f03198c4ceedc56c6fd72894e7a4679df19359bec18c7f8b0aae95289757c5dafcd7f3e84616c048d224ed8e1f110ad4ec3d2fe97f61e38556fb2c73e22
data/README.md CHANGED
@@ -24,7 +24,7 @@ For API key registration and setup, checkout our [quickstart guide](http://docs.
24
24
 
25
25
  Full Documentation
26
26
  ------------
27
- Detailed documentation and further code examples are available at [indico.readme.io](http://indico.readme.io/v2.0/docs/ruby)
27
+ Detailed documentation, a full list of APIs, and further code examples are available at [indico.readme.io](http://indico.readme.io/v2.0/docs/ruby)
28
28
 
29
29
  Examples
30
30
  ---------
@@ -50,6 +50,11 @@ Examples
50
50
 
51
51
  => { "food"=>0.3713687833244494, "cars"=>0.0037924017632370586, ...}
52
52
 
53
+ > Indico.keywords("Facebook blog posts about Android tech make better journalism than most news outlets.", {top_n: 3})
54
+
55
+ => {"android"=>0.10602030910588661, "journalism"=>0.13466866170166855, "outlets"=>0.13930405357808642}
56
+
57
+
53
58
  ```
54
59
 
55
60
  Batch API
@@ -24,12 +24,12 @@ module Indico
24
24
  config['cloud'] = cloud
25
25
  end
26
26
 
27
- def self.political(test_text, config = nil)
28
- api_handler(test_text, 'political', config)
27
+ def self.political(text, config = nil)
28
+ api_handler(text, 'political', config)
29
29
  end
30
30
 
31
- def self.batch_political(test_text, config = nil)
32
- api_handler(test_text, 'political/batch', config)
31
+ def self.batch_political(text, config = nil)
32
+ api_handler(text, 'political/batch', config)
33
33
  end
34
34
 
35
35
  def self.posneg(*args)
@@ -40,60 +40,84 @@ module Indico
40
40
  batch_sentiment(*args)
41
41
  end
42
42
 
43
- def self.sentiment(test_text, config = nil)
44
- api_handler(test_text, 'sentiment', config)
43
+ def self.sentiment(text, config = nil)
44
+ api_handler(text, 'sentiment', config)
45
45
  end
46
46
 
47
- def self.batch_sentiment(test_text, config = nil)
48
- api_handler(test_text, 'sentiment/batch', config)
47
+ def self.batch_sentiment(text, config = nil)
48
+ api_handler(text, 'sentiment/batch', config)
49
49
  end
50
50
 
51
- def self.sentiment_hq(test_text, config = nil)
52
- api_handler(test_text, 'sentimenthq', config)
51
+ def self.sentiment_hq(text, config = nil)
52
+ api_handler(text, 'sentimenthq', config)
53
53
  end
54
54
 
55
- def self.batch_sentiment_hq(test_text, config = nil)
56
- api_handler(test_text, 'sentimenthq/batch', config)
55
+ def self.batch_sentiment_hq(text, config = nil)
56
+ api_handler(text, 'sentimenthq/batch', config)
57
57
  end
58
58
 
59
- def self.language(test_text, config = nil)
60
- api_handler(test_text, 'language', config)
59
+ def self.language(text, config = nil)
60
+ api_handler(text, 'language', config)
61
61
  end
62
62
 
63
- def self.batch_language(test_text, config = nil)
64
- api_handler(test_text, 'language/batch', config)
63
+ def self.batch_language(text, config = nil)
64
+ api_handler(text, 'language/batch', config)
65
65
  end
66
66
 
67
- def self.text_tags(test_text, config = nil)
68
- api_handler(test_text, 'texttags', config)
67
+ def self.text_tags(text, config = nil)
68
+ api_handler(text, 'texttags', config)
69
69
  end
70
70
 
71
- def self.batch_text_tags(test_text, config = nil)
72
- api_handler(test_text, 'texttags/batch', config)
71
+ def self.batch_text_tags(text, config = nil)
72
+ api_handler(text, 'texttags/batch', config)
73
+ end
74
+
75
+ def self.keywords(text, config = nil)
76
+ api_handler(text, 'keywords', config)
77
+ end
78
+
79
+ def self.batch_keywords(text, config = nil)
80
+ api_handler(text, 'keywords/batch', config)
81
+ end
82
+
83
+ def self.named_entities(test_text, config = nil)
84
+ api_handler(test_text, 'namedentities', config)
85
+ end
86
+
87
+ def self.batch_named_entities(test_text, config = nil)
88
+ api_handler(test_text, 'namedentities/batch', config)
73
89
  end
74
90
 
75
91
  def self.fer(test_image, config = nil)
76
92
  api_handler(preprocess(test_image, 48, false), 'fer', config)
77
93
  end
78
94
 
79
- def self.batch_fer(test_image, config = nil)
80
- api_handler(preprocess(test_image, 48, true), 'fer/batch', config)
95
+ def self.batch_fer(image, config = nil)
96
+ api_handler(preprocess(image, 48, true), 'fer/batch', config)
97
+ end
98
+
99
+ def self.facial_features(image, config = nil)
100
+ api_handler(preprocess(image, 48, false), 'facialfeatures', config)
101
+ end
102
+
103
+ def self.batch_facial_features(image, config = nil)
104
+ api_handler(preprocess(image, 48, true), 'facialfeatures/batch', config)
81
105
  end
82
106
 
83
- def self.facial_features(test_image, config = nil)
84
- api_handler(preprocess(test_image, 48, false), 'facialfeatures', config)
107
+ def self.image_features(image, config = nil)
108
+ api_handler(preprocess(image, 64, false), 'imagefeatures', config)
85
109
  end
86
110
 
87
- def self.batch_facial_features(test_image, config = nil)
88
- api_handler(preprocess(test_image, 48, true), 'facialfeatures/batch', config)
111
+ def self.batch_image_features(image, config = nil)
112
+ api_handler(preprocess(image, 64, true), 'imagefeatures/batch', config)
89
113
  end
90
114
 
91
- def self.image_features(test_image, config = nil)
92
- api_handler(preprocess(test_image, 64, false), 'imagefeatures', config)
115
+ def self.content_filtering(image, config = nil)
116
+ api_handler(preprocess(image, 128, false), 'contentfiltering', config)
93
117
  end
94
118
 
95
- def self.batch_image_features(test_image, config = nil)
96
- api_handler(preprocess(test_image, 64, true), 'imagefeatures/batch', config)
119
+ def self.batch_content_filtering(image, config = nil)
120
+ api_handler(preprocess(image, 128, true), 'contentfiltering/batch', config)
97
121
  end
98
122
 
99
123
  def self.predict_image(face, apis = IMAGE_APIS, config = nil)
@@ -102,9 +126,9 @@ module Indico
102
126
  end
103
127
 
104
128
  # FIXME - use settings TEXT_APIS when sentimenthq is released
105
- def self.predict_text(test_text, apis = ['political', 'sentiment', 'language', 'text_tags'], config = nil)
129
+ def self.predict_text(text, apis = ['political', 'sentiment', 'language', 'text_tags'], config = nil)
106
130
  api_hash = {apis:apis}
107
- multi(test_text, "text", apis, TEXT_APIS, config ? config.update(api_hash) : api_hash)
131
+ multi(text, "text", apis, TEXT_APIS, config ? config.update(api_hash) : api_hash)
108
132
  end
109
133
 
110
134
  def self.batch_predict_image(face, apis, config = nil)
@@ -113,8 +137,8 @@ module Indico
113
137
  end
114
138
 
115
139
  # FIXME - use settings TEXT_APIS when sentimenthq is released
116
- def self.batch_predict_text(test_text, apis = ['political', 'sentiment', 'language', 'text_tags'], config = nil)
140
+ def self.batch_predict_text(text, apis = ['political', 'sentiment', 'language', 'text_tags'], config = nil)
117
141
  api_hash = {apis:apis}
118
- multi(test_text, "text", apis, TEXT_APIS, true, config ? config.update(api_hash) : api_hash)
142
+ multi(text, "text", apis, TEXT_APIS, true, config ? config.update(api_hash) : api_hash)
119
143
  end
120
144
  end
@@ -9,7 +9,8 @@ module Indico
9
9
  "text_tags" => "texttags",
10
10
  "fer" => "fer",
11
11
  "facial_features" => "facialfeatures",
12
- "image_features" => "imagefeatures"
12
+ "image_features" => "imagefeatures",
13
+ "content_filtering" => "contentfiltering"
13
14
  }
14
15
 
15
16
  SERVER_TO_CLIENT = CLIENT_TO_SERVER.invert
@@ -7,7 +7,7 @@ HEADERS = { 'Content-Type' => 'application/json',
7
7
  'version-number' => Indico::VERSION }
8
8
  # APIS
9
9
  TEXT_APIS = ["political", "sentiment", "sentiment_hq", "language", "text_tags"]
10
- IMAGE_APIS = ["fer", "facial_features", "image_features"]
10
+ IMAGE_APIS = ["fer", "facial_features", "image_features", "content_filtering"]
11
11
 
12
12
  module Indico
13
13
  private
@@ -1,3 +1,3 @@
1
1
  module Indico
2
- VERSION = '0.3.2'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -108,6 +108,38 @@ describe Indico do
108
108
  expect Set.new(response[1].keys).subset?(Set.new(expected_keys))
109
109
  end
110
110
 
111
+ it 'should tag text with correct keywords' do
112
+ expected_keys = Set.new(%w(people kill guns))
113
+
114
+ data = ['Guns don\'t kill people.', 'People kill people.']
115
+ response = Indico.batch_keywords(data, @config)
116
+
117
+ expect Set.new(response[0].keys).subset?(Set.new(expected_keys))
118
+ expect Set.new(response[1].keys).subset?(Set.new(expected_keys))
119
+ end
120
+
121
+ it 'should return all named entities with category breakdowns' do
122
+ expected_keys = Set.new(%w(unknown organization location person))
123
+ response = Indico.batch_named_entities(['I want to move to New York City!'])
124
+ expect(response.length).to eql(1)
125
+ response = response[0]
126
+
127
+ expect(response.keys.length > 0).to eql(true)
128
+ expect(response.values[0]['confidence']).to be >= 0.75
129
+ expect(Set.new(response.values[0]['categories'].keys)).to eql(expected_keys)
130
+
131
+ chance_sum = response.values[0]['categories'].values.inject{|sum,x| sum + x }
132
+ expect(chance_sum).to be > 0.9999
133
+ end
134
+
135
+ it 'should return no named entities when threshold is 1' do
136
+ config = { threshold: 1 }
137
+ response = Indico.batch_named_entities(['I want to move to New York City!'], config)
138
+ expect(response.length).to eql(1)
139
+ response = response[0]
140
+ expect(response.keys.length).to eql(0)
141
+ end
142
+
111
143
  it 'should tag face with correct facial expression' do
112
144
  expected_keys = Set.new(%w(Angry Sad Neutral Surprise Fear Happy))
113
145
  test_face = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
@@ -37,7 +37,7 @@ describe Indico do
37
37
 
38
38
  it 'should tag text with correct sentimenthq tags' do
39
39
  response = Indico.sentiment_hq('Worst movie ever.')
40
-
40
+
41
41
  expect(response < 0.5).to eql(true)
42
42
  end
43
43
 
@@ -100,6 +100,31 @@ describe Indico do
100
100
  expect Set.new(response.keys).subset?(Set.new(expected_keys))
101
101
  end
102
102
 
103
+ it 'should tag text with correct keywords' do
104
+ expected_keys = Set.new(%w(guns kill people))
105
+ response = Indico.keywords('Guns don\'t kill people. People kill people.')
106
+
107
+ expect Set.new(response.keys).subset?(Set.new(expected_keys))
108
+ end
109
+
110
+ it 'should return all named entities with category breakdowns' do
111
+ expected_keys = Set.new(%w(unknown organization location person))
112
+ response = Indico.named_entities('I want to move to New York City!')
113
+
114
+ expect(response.keys.length > 0).to eql(true)
115
+ expect(response.values[0]['confidence']).to be >= 0.75
116
+ expect(Set.new(response.values[0]['categories'].keys)).to eql(expected_keys)
117
+
118
+ chance_sum = response.values[0]['categories'].values.inject{|sum,x| sum + x }
119
+ expect(chance_sum).to be > 0.9999
120
+ end
121
+
122
+ it 'should return no named entities when threshold is 1' do
123
+ config = { threshold: 1 }
124
+ response = Indico.named_entities('I want to move to New York City!', config)
125
+ expect(response.keys.length).to eql(0)
126
+ end
127
+
103
128
  it 'should tag face with correct facial expression' do
104
129
  expected_keys = Set.new(%w(Angry Sad Neutral Surprise Fear Happy))
105
130
  test_face = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
@@ -117,6 +142,14 @@ describe Indico do
117
142
  end
118
143
  end
119
144
 
145
+ it 'should tag noise as sfw' do
146
+ test_image = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
147
+ silent_warnings do
148
+ response = Indico.content_filtering(test_image)
149
+ expect(response).to be < 0.5
150
+ end
151
+ end
152
+
120
153
  it 'should tag image with correct image features' do
121
154
  test_image = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
122
155
  silent_warnings do
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: indico
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
5
- prerelease:
4
+ version: 0.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Slater Victoroff
@@ -12,12 +11,11 @@ authors:
12
11
  autorequire:
13
12
  bindir: bin
14
13
  cert_chain: []
15
- date: 2015-07-01 00:00:00.000000000 Z
14
+ date: 2015-07-10 00:00:00.000000000 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: inifile
19
18
  requirement: !ruby/object:Gem::Requirement
20
- none: false
21
19
  requirements:
22
20
  - - ~>
23
21
  - !ruby/object:Gem::Version
@@ -25,7 +23,6 @@ dependencies:
25
23
  type: :runtime
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
26
  requirements:
30
27
  - - ~>
31
28
  - !ruby/object:Gem::Version
@@ -33,7 +30,6 @@ dependencies:
33
30
  - !ruby/object:Gem::Dependency
34
31
  name: oily_png
35
32
  requirement: !ruby/object:Gem::Requirement
36
- none: false
37
33
  requirements:
38
34
  - - ~>
39
35
  - !ruby/object:Gem::Version
@@ -41,7 +37,6 @@ dependencies:
41
37
  type: :runtime
42
38
  prerelease: false
43
39
  version_requirements: !ruby/object:Gem::Requirement
44
- none: false
45
40
  requirements:
46
41
  - - ~>
47
42
  - !ruby/object:Gem::Version
@@ -49,7 +44,6 @@ dependencies:
49
44
  - !ruby/object:Gem::Dependency
50
45
  name: bundler
51
46
  requirement: !ruby/object:Gem::Requirement
52
- none: false
53
47
  requirements:
54
48
  - - ~>
55
49
  - !ruby/object:Gem::Version
@@ -57,7 +51,6 @@ dependencies:
57
51
  type: :development
58
52
  prerelease: false
59
53
  version_requirements: !ruby/object:Gem::Requirement
60
- none: false
61
54
  requirements:
62
55
  - - ~>
63
56
  - !ruby/object:Gem::Version
@@ -65,33 +58,29 @@ dependencies:
65
58
  - !ruby/object:Gem::Dependency
66
59
  name: rake
67
60
  requirement: !ruby/object:Gem::Requirement
68
- none: false
69
61
  requirements:
70
- - - ! '>='
62
+ - - '>='
71
63
  - !ruby/object:Gem::Version
72
64
  version: '0'
73
65
  type: :development
74
66
  prerelease: false
75
67
  version_requirements: !ruby/object:Gem::Requirement
76
- none: false
77
68
  requirements:
78
- - - ! '>='
69
+ - - '>='
79
70
  - !ruby/object:Gem::Version
80
71
  version: '0'
81
72
  - !ruby/object:Gem::Dependency
82
73
  name: rspec
83
74
  requirement: !ruby/object:Gem::Requirement
84
- none: false
85
75
  requirements:
86
- - - ! '>='
76
+ - - '>='
87
77
  - !ruby/object:Gem::Version
88
78
  version: '0'
89
79
  type: :development
90
80
  prerelease: false
91
81
  version_requirements: !ruby/object:Gem::Requirement
92
- none: false
93
82
  requirements:
94
- - - ! '>='
83
+ - - '>='
95
84
  - !ruby/object:Gem::Version
96
85
  version: '0'
97
86
  description: A simple Ruby Wrapper for the indico set of APIs.
@@ -129,26 +118,25 @@ files:
129
118
  homepage: https://github.com/IndicoDataSolutions/IndicoIo-ruby
130
119
  licenses:
131
120
  - MIT
121
+ metadata: {}
132
122
  post_install_message:
133
123
  rdoc_options: []
134
124
  require_paths:
135
125
  - lib
136
126
  required_ruby_version: !ruby/object:Gem::Requirement
137
- none: false
138
127
  requirements:
139
- - - ! '>='
128
+ - - '>='
140
129
  - !ruby/object:Gem::Version
141
130
  version: '0'
142
131
  required_rubygems_version: !ruby/object:Gem::Requirement
143
- none: false
144
132
  requirements:
145
- - - ! '>='
133
+ - - '>='
146
134
  - !ruby/object:Gem::Version
147
135
  version: '0'
148
136
  requirements: []
149
137
  rubyforge_project:
150
- rubygems_version: 1.8.23
138
+ rubygems_version: 2.0.14
151
139
  signing_key:
152
- specification_version: 3
140
+ specification_version: 4
153
141
  summary: A simple Ruby Wrapper for the indico set of APIs.
154
142
  test_files: []