textalytics 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YzczMmViYTA0NmVkZDc1ZTAxNDdhODQ0MmQ2MzRmMWMxMTU3MjU0Yg==
5
+ data.tar.gz: !binary |-
6
+ MDM2N2Q5YWYxOTRjMTQ0MmNmMGJmZThjZmZjZjU2ZTFjZWFhZGNhNw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MGQzNWNjZDk0YjJhODE4NmRiNDYxNTU1Y2I5ZWZjYTA5YTZjM2EwZmNiMzM0
10
+ MTVkZjJiNzdlOTc4NmViZjkyNTQ5ZWI5N2Q3YjA5OTVkMjlkZTU4MGE0M2Rl
11
+ MGFmN2ViMWEyZjNiYjNjM2YwZjliMTRhNzQyODFjYmM1ODI1YWM=
12
+ data.tar.gz: !binary |-
13
+ NDYzMTk0YjRkZDg2YWQ5YjkyZDVmNjZiMTk3ZmVkZWEzMzI5ZWMyMmI4MDg5
14
+ MWYwYTczNjdlZTJiZDI1ZDgyMGU2YmI2MzBkYzhmNzFkYjlkYjBjZGZlNTA3
15
+ ZTQ0NjUwNGRhZDg4NzYzODFmZDY0NWE3ZjU0NDAyZGZmMmJiNDQ=
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
19
+ .idea/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/CHANGELOG.md ADDED
@@ -0,0 +1,23 @@
1
+ 0.04
2
+ ---
3
+
4
+ * Solving dependency issue
5
+
6
+ 0.03
7
+ ---
8
+
9
+ * First functional version
10
+ * Support for Language Identification API
11
+
12
+ 0.02
13
+ ---
14
+
15
+ * Some improvements, but still not functional
16
+
17
+ 0.01
18
+ ---
19
+
20
+ * First commit. A little rushed because it is my first public gem
21
+ * Gem first structure, classes and modules
22
+
23
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in textalytics.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Gerardo Ortega
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # Textalytics
2
+
3
+ Ruby wrapper for the [Textalytics APIs](https://textalytics.com/api-core-language-analysis). The Textalytics gem provides an easy-to-use wrapper for Textalytics's REST APIs.
4
+
5
+ ## Use
6
+
7
+ You have two options when creating a new client. Create environment variables for each API key:
8
+
9
+ export SENTIMENT_KEY=<your key>
10
+ export CLASSIFICATION_KEY=<...>
11
+ export LANGUAGE_KEY=<...>
12
+ export TOPICS_KEY=<...>
13
+
14
+ t = Textalytics::Client.new
15
+
16
+ Otherwise you have to pass the keys as arguments:
17
+
18
+ t = Textalytics::Client.new(sentiment: "insert your sentiment API key", classification: "insert your classification API key", topics: "...")
19
+
20
+
21
+ #### Using Sentiment API
22
+
23
+ # You can read about the parameters that you can send in the request here
24
+ # https://textalytics.com/core/sentiment-info#doc
25
+
26
+ movie_sentiment = t.sentiment(txt: 'The movie was terrible, never see a movie of that director. Even the actors are bad.', model: 'en-general')
27
+ movie_sentiment.score_tag
28
+ movie_sentiment.sd_tag #etc, etc...
29
+
30
+ #### Using Text Classification API
31
+
32
+ # You can read about the parameters that you can send in the request here
33
+ # https://textalytics.com/core/class-info#doc
34
+
35
+ title = 'Computer'
36
+ text = <<PARAGRAPH
37
+ A computer is a general purpose device that can be programmed to carry out
38
+ a set of arithmetic or logical operations automatically. Since a sequence of
39
+ operations can be readily changed, the computer can solve more than one kind of
40
+ problem.
41
+
42
+ Conventionally, a computer consists of at least one processing element, typically
43
+ a central processing unit (CPU), and some form of memory. The processing element
44
+ carries out arithmetic and logic operations, and a sequencing and control unit can
45
+ change the order of operations in response to stored information. Peripheral devices
46
+ allow information to be retrieved from an external source, and the result of operations
47
+ saved and retrieved.
48
+ PARAGRAPH
49
+
50
+ t = Textalytics::Client.new
51
+ #Model and other parameters can be found in the documentation page of the API
52
+ classification = t.classification(title: title, txt: text, model: 'IPTC_en')
53
+ classification.categories #etc
54
+
55
+ #### Using Topics Extraction API
56
+
57
+ # You can read about the parameters that you can send in the request here
58
+ # https://textalytics.com/core/topics-info#doc
59
+
60
+ t = Textalytics::Client.new
61
+
62
+ topics = t.topics(txt: "A computer is a general purpose device that can be programmed to carry out a set of arithmetic or logical operations automatically. Since a sequence of operations can be readily changed, the computer can solve more than one kind of problem.",
63
+ lang: 'en', tt: 'ectmu')
64
+
65
+ topics.concepts
66
+ topics.entities
67
+ topics.time_expressions
68
+
69
+
70
+
71
+ #### Using Language Identification API
72
+
73
+ # You can read about the parameters that you can send in the request here
74
+ # https://textalytics.com/core/lang-info#doc
75
+
76
+ t = Textalytics::Client.new
77
+
78
+ lang = t.language_list(txt: 'A computer is a general purpose device that can be programmed')
79
+ lang.first
80
+
81
+ TODO: Add some examples
82
+
83
+
84
+ ## Installation
85
+
86
+ Add this line to your application's Gemfile:
87
+
88
+ gem 'textalytics'
89
+
90
+ And then execute:
91
+
92
+ $ bundle
93
+
94
+ Or install it yourself as:
95
+
96
+ $ gem install textalytics
97
+
98
+ ## TODO
99
+
100
+ * Write more tests
101
+ * Write a better documentation
102
+
103
+ ## Usage
104
+
105
+ TODO: Write usage instructions here
106
+
107
+ ## Contributing
108
+
109
+ 1. Fork it ( http://github.com/<my-github-username>/textalytics/fork )
110
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
111
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
112
+ 4. Push to the branch (`git push origin my-new-feature`)
113
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,22 @@
1
+ # require "textalytics/version"
2
+ # require "textalytics/client"
3
+
4
+ module Textalytics
5
+
6
+ class << self
7
+
8
+
9
+ def configure
10
+ yield self
11
+ true
12
+ end
13
+
14
+ end
15
+
16
+ autoload :Api, "textalytics/api"
17
+ autoload :Client, "textalytics/client"
18
+ autoload :Errors, "textalytics/errors"
19
+ autoload :Helpers, "textalytics/helpers"
20
+ autoload :Version, "textalytics/version"
21
+ autoload :Errors, "textalytics/errors"
22
+ end
@@ -0,0 +1,11 @@
1
+ module Textalytics
2
+ module Api
3
+
4
+ autoload :Base, "textalytics/api/base"
5
+ autoload :QueryHelpers, "textalytics/api/query_helpers"
6
+ autoload :ClassificationEntity, "textalytics/api/entities/classification_entity"
7
+ autoload :SentimentEntity, "textalytics/api/entities/sentiment_entity"
8
+ autoload :TopicsEntity, "textalytics/api/entities/topics_entity"
9
+ autoload :LanguageEntity, "textalytics/api/entities/language_entity"
10
+ end
11
+ end
@@ -0,0 +1,60 @@
1
+ module Textalytics
2
+ module Api
3
+ module Base
4
+
5
+ include Textalytics::Api::ClassificationEntity
6
+ include Textalytics::Api::SentimentEntity
7
+ include Textalytics::Api::TopicsEntity
8
+ include Textalytics::Api::LanguageEntity
9
+ include Textalytics::Helpers
10
+
11
+
12
+ # Classification API
13
+ # @see https://textalytics.com/core/class-info Text Classification API documentation
14
+ def classification(options={})
15
+ options[:key] = @classification_key
16
+ options[:of] = 'json'
17
+ query = { query: options}
18
+ response = get(CLASSIFICATION, query)
19
+ Classification.new(response)
20
+ end
21
+
22
+
23
+ # Sentiment API
24
+ # @see https://textalytics.com/core/sentiment-info Sentiment Analysis API documentation
25
+ def sentiment(options = {})
26
+ options[:key] = @sentiment_key
27
+ options[:of] = 'json'
28
+ query = { query: options}
29
+ response = get(SENTIMENT, query)
30
+ Sentiment.new(response)
31
+ end
32
+
33
+ # Topics Extraction API
34
+ # @see https://textalytics.com/core/topics-info Topics Extraction API documentation
35
+ def topics(options = {})
36
+ options[:key] = @topics_key
37
+ options[:of] = 'json'
38
+
39
+ unless options.has_key?(:tt)
40
+ options[:tt] = 'a'
41
+ end
42
+
43
+ query = { query: options}
44
+ response = get(TOPICS, query)
45
+ Topics.new(response)
46
+ end
47
+
48
+ # Language Identification API
49
+ # @see https://textalytics.com/core/lang-info#doc
50
+ def language(options = {})
51
+ options[:key] = @language_key
52
+ options[:of] = 'json'
53
+ query = { query: options}
54
+ response = get(LANGUAGE, query)
55
+ Language.new(response)
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,42 @@
1
+ module Textalytics
2
+ module Api
3
+ module ClassificationEntity
4
+
5
+ class Classification
6
+ attr_reader :category_list, :categories, :all
7
+
8
+ def initialize(response)
9
+ @category_list = response["category_list"]
10
+ @all = response
11
+ end
12
+
13
+ def categories
14
+ category_array = []
15
+
16
+ @category_list.each do |c|
17
+ cat = Category.new(code: c["code"], label: c["label"], abs_relevance: c["abs_relevance"], relevance: c["relevance"], term_list: c["term_list"] )
18
+ category_array << cat
19
+ end
20
+
21
+ category_array
22
+
23
+ end
24
+ end
25
+
26
+
27
+ class Category
28
+ attr_reader :code, :label, :abs_relevance, :relevance, :term_list
29
+
30
+ def initialize(args)
31
+ @code = args[:code]
32
+ @label = args[:label]
33
+ @abs_relevance = args[:abs_relevance]
34
+ @relevance = args[:relevance]
35
+ @term_list = term_list
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,17 @@
1
+ module Textalytics
2
+ module Api
3
+ module LanguageEntity
4
+
5
+ class Language
6
+ attr_reader :language_list, :all
7
+
8
+ def initialize(response)
9
+ @language_list = response["lang_list"]
10
+ @all = response
11
+ end
12
+ end
13
+
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,59 @@
1
+ module Textalytics
2
+
3
+ module Api
4
+
5
+ module SentimentEntity
6
+
7
+ class Sentiment
8
+ attr_reader :subjectivity, :irony, :score,
9
+ :score_tag, :sd, :sd_tag, :segment_list,
10
+ :entity_list, :concept_list, :all
11
+
12
+ def initialize(response)
13
+ @all = response
14
+ end
15
+
16
+ def subjectivity
17
+ @all["subjectivity"]
18
+ end
19
+
20
+ def irony
21
+ @all["ironi"]
22
+ end
23
+
24
+ def score
25
+ @all["score"]
26
+ end
27
+
28
+ def score_tag
29
+ @all["score_tag"]
30
+ end
31
+
32
+ def sd
33
+ @all["sd"]
34
+ end
35
+
36
+ def sd_tag
37
+ @all["sd_tag"]
38
+ end
39
+
40
+ def segment_list
41
+ @all["segment_list"]
42
+ end
43
+
44
+ def entity_list
45
+ @all["entity_list"]
46
+ end
47
+
48
+ def concept_list
49
+ @all["concept_list"]
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+ end
56
+
57
+
58
+
59
+ end
@@ -0,0 +1,54 @@
1
+ module Textalytics
2
+ module Api
3
+ module TopicsEntity
4
+ class Topics
5
+ attr_reader :entities, :concepts, :time_expressions, :money_expressions,
6
+ :uris, :phone_expressions, :other_expressions, :quotations,
7
+ :relations, :all
8
+
9
+ def initialize(response)
10
+ @all = response
11
+ end
12
+
13
+ def entities
14
+ @all["entity_list"]
15
+ end
16
+
17
+ def concepts
18
+ @all["concept_list"]
19
+
20
+ end
21
+
22
+ def time_expressions
23
+ @all["time_expression_list"]
24
+ end
25
+
26
+ def money_expressions
27
+ @all["money_expression_list"]
28
+ end
29
+
30
+ def uris
31
+ @all["uri_list"]
32
+ end
33
+
34
+ def phone_expressions
35
+ @all["phone_expression_list"]
36
+ end
37
+
38
+ def other_expressions
39
+ @all["other_expression_list"]
40
+ end
41
+
42
+ def quotations
43
+ @all["quotation_list"]
44
+ end
45
+
46
+ def relations
47
+ @all["relation_list"]
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,26 @@
1
+ module Textalytics
2
+
3
+ class Client
4
+ include Helpers::Request
5
+ include Api::ClassificationEntity
6
+ include Api::SentimentEntity
7
+ include Api::LanguageEntity
8
+ include Api::Base
9
+ include HTTParty
10
+
11
+ base_uri 'https://textalytics.com/core'
12
+
13
+
14
+ attr_reader :sentiment_key, :topics_key, :classification_key, :language_key
15
+
16
+ def initialize(options = {})
17
+ @sentiment_key = options[:sentiment] || ENV['SENTIMENT_KEY']
18
+ @topics_key = options[:topics] || ENV['TOPICS_KEY']
19
+ @classification_key = options[:classification] || ENV['CLASSIFICATION_KEY']
20
+ @language_key = options[:language] || ENV['LANGUAGE_KEY']
21
+ end
22
+
23
+ end
24
+
25
+
26
+ end
@@ -0,0 +1,44 @@
1
+ module Textalytics
2
+ module Errors
3
+ class TextalyticError < StandardError
4
+ attr_reader :data
5
+ def initialize(data)
6
+ @data = data
7
+ super
8
+ end
9
+ end
10
+
11
+ # Raised when a 100 code error is received
12
+ # 100: Operation denied
13
+ class OperationDeniedError < TextalyticError; end
14
+
15
+ # Raised when a 101 code is received
16
+ # 101: The license has expired
17
+ class LicenseExpiredError < TextalyticError; end
18
+
19
+ # Raised when a 102 code is received
20
+ # 102: You have exceeded the maximum number of credits per month
21
+ class MaximumNumberMonthError < TextalyticError; end
22
+
23
+ # Raised when a 103 code is received
24
+ # 103: You have exceeded the maximum number of credits per request
25
+ class MaximumNumberRequestError < TextalyticError; end
26
+
27
+ # Raised when a 104 code is received
28
+ # 104: You have exceeded the maximum number of requests per second
29
+ class MaximumNumberSecondError < TextalyticError; end
30
+
31
+ # Raised when a 200 code is received
32
+ # 200: A required parameter is missing
33
+ class ParameterMissingError < StandardError; end
34
+
35
+ # Raised when a 201 code is received
36
+ # 201: Model not supported
37
+ class ModelNotSupportedError < StandardError; end
38
+
39
+ # Raised when a 202 code is received
40
+ # 202: No suitable model for the identified text language
41
+ class NotSuitableModelError < StandardError; end
42
+
43
+ end
44
+ end
@@ -0,0 +1,11 @@
1
+ module Textalytics
2
+ module Helpers
3
+
4
+ SENTIMENT = '/sentiment-1.1'
5
+ TOPICS = '/topics-1.2'
6
+ CLASSIFICATION = '/class-1.1'
7
+ LANGUAGE = '/lang-1.1'
8
+
9
+ autoload :Request, "textalytics/helpers/request"
10
+ end
11
+ end
@@ -0,0 +1,63 @@
1
+ require 'httparty'
2
+
3
+ module Textalytics
4
+ module Helpers
5
+
6
+ module Request
7
+
8
+ protected
9
+
10
+ def get(path, options={})
11
+ response = self.class.get(path, options)
12
+ raise_errors(response)
13
+ response.to_hash
14
+ end
15
+
16
+ def post(path, body='', options={})
17
+ response = self.class.post(path, options)
18
+ raise_errors(response)
19
+ response.to_hash
20
+ end
21
+
22
+ private
23
+
24
+
25
+ def raise_errors(response)
26
+ # You can see the errors with their description at
27
+ # https://textalytics.com/core/sentiment-info
28
+ # https://textalytics.com/core/class-info
29
+ # https://textalytics.com/core/topics-info
30
+ # In status section
31
+
32
+ case response["status"]["code"].to_i
33
+ when 100
34
+ data = response["status"]
35
+ raise Textalytics::Errors::OperationDeniedError.new(data), "(#{data["code"]}): #{data["msg"]}"
36
+ when 101
37
+ data = response["status"]
38
+ raise Textalytics::Errors::LicenseExpiredError.new(data), "(#{data["code"]}): #{data["msg"]}"
39
+ when 102
40
+ data = response["status"]
41
+ raise Textalytics::Errors::MaximumNumberMonthError.new(data), "(#{data["code"]}): #{data["msg"]}"
42
+ when 103
43
+ data = response["status"]
44
+ raise Textalytics::Errors::MaximumNumberRequestError.new(data), "(#{data["code"]}): #{data["msg"]}"
45
+ when 104
46
+ data = response["status"]
47
+ raise Textalytics::Errors::MaximumNumberSecondError.new(data), "(#{data["code"]}): #{data["msg"]}"
48
+ when 200
49
+ data = response["status"]
50
+ raise Textalytics::Errors::ParameterMissingError.new(data), "(#{data["code"]}): #{data["msg"]}"
51
+ when 201
52
+ data = response["status"]
53
+ raise Textalytics::Errors::ModelNotSupportedError.new(data), "(#{data["code"]}): #{data["msg"]}"
54
+ when 202
55
+ data = response["status"]
56
+ raise Textalytics::Errors::NotSuitableModelError.new(data), "(#{data["code"]}): #{data["msg"]}"
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+ end
@@ -0,0 +1,6 @@
1
+ module Textalytics
2
+ MAJOR = 0
3
+ MINOR = 0
4
+ TINY = 4
5
+ VERSION = [MAJOR, MINOR, TINY].join('.')
6
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Textalytics::Client do
4
+
5
+ it "should initialize the api keys from environment variables" do
6
+ client = Textalytics::Client.new
7
+ client.language_key.should_not be_nil
8
+ client.classification_key.should_not be_nil
9
+ client.sentiment_key.should_not be_nil
10
+ client.topics_key.should_not be_nil
11
+ end
12
+
13
+ it "should not initialize any api keys from environment variables" do
14
+ ENV.delete('SENTIMENT_KEY')
15
+ ENV.delete('TOPICS_KEY')
16
+ ENV.delete('CLASSIFICATION_KEY')
17
+ ENV.delete('LANGUAGE_KEY')
18
+
19
+ new_client = Textalytics::Client.new
20
+ new_client.sentiment_key.should be_nil
21
+ end
22
+
23
+ it "should change the default environment values when arguments are provided" do
24
+ ENV['SENTIMENT_KEY'] = '87654321'
25
+ client = Textalytics::Client.new(sentiment: '12345678')
26
+ expect(client.sentiment_key).to eq('12345678')
27
+ end
28
+
29
+ end
@@ -0,0 +1,13 @@
1
+ require 'textalytics'
2
+
3
+ RSpec.configure do |config|
4
+ config.treat_symbols_as_metadata_keys_with_true_values = true
5
+ config.run_all_when_everything_filtered = true
6
+ config.filter_run :focus
7
+
8
+ # Run specs in random order to surface order dependencies. If you find an
9
+ # order dependency and want to debug it, you can fix the order by providing
10
+ # the seed, which is printed after each run.
11
+ # --seed 1234
12
+ config.order = 'random'
13
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'textalytics/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "textalytics"
8
+ spec.version = Textalytics::VERSION
9
+ spec.authors = ["Gerardo Ortega"]
10
+ spec.email = ["geraldavid7@gmail.com"]
11
+ spec.summary = %q{Ruby wrapper the Textalytics API}
12
+ spec.description = %q{This gem pretends to make easier the process of text analysis through the Textalytics APIs}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+ spec.add_dependency 'httparty', '~> 0.12'
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency 'rake', '~> 10.3.1'
22
+ spec.add_development_dependency "bundler", "~> 1.5"
23
+ spec.add_development_dependency 'rspec', '~> 2.14.1'
24
+
25
+ end
26
+
27
+
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: textalytics
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Gerardo Ortega
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 10.3.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 10.3.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.14.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.14.1
69
+ description: This gem pretends to make easier the process of text analysis through
70
+ the Textalytics APIs
71
+ email:
72
+ - geraldavid7@gmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - .gitignore
78
+ - .rspec
79
+ - CHANGELOG.md
80
+ - Gemfile
81
+ - LICENSE.txt
82
+ - README.md
83
+ - Rakefile
84
+ - lib/textalytics.rb
85
+ - lib/textalytics/api.rb
86
+ - lib/textalytics/api/base.rb
87
+ - lib/textalytics/api/entities/classification_entity.rb
88
+ - lib/textalytics/api/entities/language_entity.rb
89
+ - lib/textalytics/api/entities/sentiment_entity.rb
90
+ - lib/textalytics/api/entities/topics_entity.rb
91
+ - lib/textalytics/client.rb
92
+ - lib/textalytics/errors.rb
93
+ - lib/textalytics/helpers.rb
94
+ - lib/textalytics/helpers/request.rb
95
+ - lib/textalytics/version.rb
96
+ - spec/cases/api_spec.rb
97
+ - spec/spec_helper.rb
98
+ - textalytics.gemspec
99
+ homepage: ''
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.2.2
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Ruby wrapper the Textalytics API
123
+ test_files:
124
+ - spec/cases/api_spec.rb
125
+ - spec/spec_helper.rb