textminer 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5e954930af35bca6c9752b9f9d660eb675cd4bea
4
+ data.tar.gz: c451255b116b2eae5a52d66adc3619e39c7f10c4
5
+ SHA512:
6
+ metadata.gz: 0ff5aacaf4be3b3a797f6cc8435c9c4a2bec7be98d695986f2b27a044b98492f5729cd58979952dacf96777d2306c2c8b9d9abda8dc7bfa94e9080a4f4ae8f6c
7
+ data.tar.gz: 64a5fd5ebb268403c12350d444794efde329e97fb14e7ad47959d4af5aa3465306f135174e183b4ce11ab1009ba24fc29ebc47d7b605e90a4e4e308274264671
@@ -0,0 +1,36 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+
12
+ ## Specific to RubyMotion:
13
+ .dat*
14
+ .repl_history
15
+ build/
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalisation:
24
+ /.bundle/
25
+ /lib/bundler/man/
26
+
27
+ # for a library or gem, you might want to ignore these files since the code is
28
+ # intended to run in multiple environments; otherwise, check them in:
29
+ #Gemfile.lock
30
+ .ruby-version
31
+ .ruby-gemset
32
+
33
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
+ .rvmrc
35
+
36
+ cache/
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.1.7
5
+ - 2.2.3
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,68 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ textminer (0.1.0)
5
+ httparty (~> 0.13)
6
+ json (~> 1.8)
7
+ launchy (~> 2.4, >= 2.4.2)
8
+ pdf-reader (~> 1.3)
9
+ thor (~> 0.19)
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ Ascii85 (1.0.2)
15
+ addressable (2.3.8)
16
+ afm (0.2.2)
17
+ ansi (1.5.0)
18
+ ast (2.1.0)
19
+ codecov (0.1.1)
20
+ json
21
+ simplecov
22
+ url
23
+ docile (1.1.5)
24
+ hashery (2.1.1)
25
+ httparty (0.13.5)
26
+ json (~> 1.8)
27
+ multi_xml (>= 0.5.2)
28
+ json (1.8.3)
29
+ launchy (2.4.3)
30
+ addressable (~> 2.3)
31
+ multi_xml (0.5.5)
32
+ oga (1.2.3)
33
+ ast
34
+ ruby-ll (~> 2.1)
35
+ pdf-reader (1.3.3)
36
+ Ascii85 (~> 1.0.0)
37
+ afm (~> 0.2.0)
38
+ hashery (~> 2.0)
39
+ ruby-rc4
40
+ ttfunk
41
+ power_assert (0.2.4)
42
+ rake (10.4.2)
43
+ ruby-ll (2.1.2)
44
+ ansi
45
+ ast
46
+ ruby-rc4 (0.1.5)
47
+ simplecov (0.10.0)
48
+ docile (~> 1.1.0)
49
+ json (~> 1.8)
50
+ simplecov-html (~> 0.10.0)
51
+ simplecov-html (0.10.0)
52
+ test-unit (3.1.3)
53
+ power_assert
54
+ thor (0.19.1)
55
+ ttfunk (1.4.0)
56
+ url (0.3.2)
57
+
58
+ PLATFORMS
59
+ ruby
60
+
61
+ DEPENDENCIES
62
+ bundler (~> 1.6)
63
+ codecov (~> 0.1)
64
+ oga (~> 1.2)
65
+ rake (~> 10.4)
66
+ simplecov (~> 0.10)
67
+ test-unit (~> 3.1)
68
+ textminer!
data/NEWS.md ADDED
@@ -0,0 +1,3 @@
1
+ ## 0.0.1 (2015-08-22)
2
+
3
+ * First version
@@ -0,0 +1,116 @@
1
+ textminer
2
+ =========
3
+
4
+ [![Build Status](https://api.travis-ci.org/sckott/textminer.png)](https://travis-ci.org/sckott/textminer)
5
+ [![codecov.io](http://codecov.io/github/sckott/textminer/coverage.svg?branch=master)](http://codecov.io/github/sckott/textminer?branch=master)
6
+
7
+ __This is alpha software, so expect changes__
8
+
9
+ ## What is it?
10
+
11
+ __`textminer` helps you text mine through Crossref's TDM (Text & Data Mining) services:__
12
+
13
+ ## Changes
14
+
15
+ For changes see the [NEWS file](https://github.com/sckott/textminer/blob/master/NEWS.md).
16
+
17
+ ## Install
18
+
19
+ ### Release version
20
+
21
+ Not on RubyGems yet
22
+
23
+ ### Development version
24
+
25
+ ```
26
+ git clone git@github.com:sckott/textminer.git
27
+ cd textminer
28
+ rake install
29
+ ```
30
+
31
+ ## Within Ruby
32
+
33
+ Search by DOI
34
+
35
+ ```ruby
36
+ require 'textminer'
37
+ out = textminer.links("10.5555/515151")
38
+ ```
39
+
40
+ Get the pdf link
41
+
42
+ ```ruby
43
+ out.pdf
44
+ ```
45
+
46
+ ```ruby
47
+ "http://annalsofpsychoceramics.labs.crossref.org/fulltext/10.5555/515151.pdf"
48
+ ```
49
+
50
+ Get the xml link
51
+
52
+ ```ruby
53
+ out.xml
54
+ ```
55
+
56
+ ```ruby
57
+ "http://annalsofpsychoceramics.labs.crossref.org/fulltext/10.5555/515151.xml"
58
+ ```
59
+
60
+ Fetch XML
61
+
62
+ ```ruby
63
+ Textminer.fetch("10.3897/phytokeys.42.7604", "xml")
64
+ ```
65
+
66
+ ```ruby
67
+ => {"article"=>
68
+ {"front"=>
69
+ {"journal_meta"=>
70
+ {"journal_id"=>
71
+ {"__content__"=>"PhytoKeys", "journal_id_type"=>"publisher-id"},
72
+ "journal_title_group"=>
73
+ {"journal_title"=>{"__content__"=>"PhytoKeys", "lang"=>"en"},
74
+ "abbrev_journal_title"=>{"__content__"=>"PhytoKeys", "lang"=>"en"}},
75
+ "issn"=>
76
+ [{"__content__"=>"1314-2011", "pub_type"=>"ppub"},
77
+ {"__content__"=>"1314-2003", "pub_type"=>"epub"}],
78
+ "publisher"=>{"publisher_name"=>"Pensoft Publishers"}},
79
+ "article_meta"=>
80
+
81
+ ...
82
+ ```
83
+
84
+ Fetch PDF
85
+
86
+ ```ruby
87
+ Textminer.fetch("10.3897/phytokeys.42.7604", "pdf")
88
+ ```
89
+
90
+ > pdf written to disk
91
+
92
+ ## On the CLI
93
+
94
+ Get links
95
+
96
+ ```sh
97
+ tm links 10.3897/phytokeys.42.7604
98
+ ```
99
+
100
+ ```sh
101
+ http://phytokeys.pensoft.net/lib/ajax_srv/article_elements_srv.php?action=download_xml&item_id=4190
102
+ http://phytokeys.pensoft.net/lib/ajax_srv/article_elements_srv.php?action=download_pdf&item_id=4190
103
+ ```
104
+
105
+ More than one DOI:
106
+
107
+ ```sh
108
+ tm links '10.3897/phytokeys.42.7604,10.3897/zookeys.516.9439'
109
+ ```
110
+
111
+ ## To do
112
+
113
+ * CLI executable
114
+ * get actual full text
115
+ * better test suite
116
+ * documentation
@@ -0,0 +1,26 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/test*.rb']
7
+ t.verbose = true
8
+ end
9
+
10
+ desc "Run tests"
11
+ task :default => :test
12
+
13
+ desc "Build textminer"
14
+ task :build do
15
+ system "gem build textminer.gemspec"
16
+ end
17
+
18
+ desc "Install textminer"
19
+ task :install => :build do
20
+ system "gem install textminer-#{Textminer::VERSION}.gem"
21
+ end
22
+
23
+ desc "Release to Rubygems"
24
+ task :release => :build do
25
+ system "gem push textminer-#{Textminer::VERSION}.gem"
26
+ end
data/bin/tm ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "thor"
4
+
5
+ class Tm < Thor
6
+ include Thor::Actions
7
+ require 'textminer'
8
+ require 'launchy'
9
+ require 'json'
10
+ require 'pp'
11
+
12
+ desc "links STRING", "Get links meant for text mining"
13
+ # method_option :doi => :string
14
+ def links(tt)
15
+ tt = "#{tt}"
16
+ tt = tt.to_s.split(',')
17
+ out = Textminer.links(tt).all
18
+ puts out
19
+ end
20
+ end
21
+
22
+ Tm.start(ARGV)
@@ -0,0 +1,66 @@
1
+ require 'httparty'
2
+ require 'json'
3
+ require 'pdf-reader'
4
+ require "textminer/version"
5
+ require "textminer/request"
6
+ require "textminer/response"
7
+ require "textminer/fetch"
8
+
9
+ module Textminer
10
+ ##
11
+ # Get links meant for text mining
12
+ #
13
+ # @param doi [Array] A DOI, digital object identifier
14
+ # @return [Array] the output
15
+ #
16
+ # @example
17
+ # require 'textminer'
18
+ # # link to full text available
19
+ # Textminer.links("10.5555/515151")
20
+ # # no link to full text available
21
+ # Textminer.links("10.1371/journal.pone.0000308")
22
+ # # many DOIs at once
23
+ # res = Textminer.links(["10.3897/phytokeys.42.7604", "10.3897/zookeys.516.9439"])
24
+ # res.links
25
+ # res.pdf
26
+ # res.xml
27
+ def self.links(doi)
28
+ Request.new(doi).perform
29
+ end
30
+
31
+ ##
32
+ # Thin layer around pdf-reader gem's PDF::Reader
33
+ #
34
+ # @param doi [Array] A DOI, digital object identifier
35
+ # @param type [Array] One of two options to download: xml (default) or pdf
36
+ #
37
+ # @example
38
+ # require 'textminer'
39
+ # # fetch full text by DOI - xml by default
40
+ # Textminer.fetch("10.3897/phytokeys.42.7604")
41
+ # # many DOIs - xml output
42
+ # res = Textminer.fetch(["10.3897/phytokeys.42.7604", "10.3897/zookeys.516.9439"])
43
+ # # fetch full text - pdf
44
+ # Textminer.fetch("10.3897/phytokeys.42.7604", "pdf")
45
+ def self.fetch(doi, type = 'xml')
46
+ Fetch.new(doi, type).fetchtext
47
+ end
48
+
49
+ ##
50
+ # Thin layer around pdf-reader gem's PDF::Reader
51
+ #
52
+ # @param path [String] Path to a pdf file downloaded via {fetch}, or
53
+ # another way.
54
+ #
55
+ # @example
56
+ # require 'textminer'
57
+ # # fetch full text - pdf
58
+ # res = Textminer.fetch("10.3897/phytokeys.42.7604", "pdf")
59
+ # # extract pdf to text
60
+ # Textminer.extract(res)
61
+ def self.extract(path)
62
+ rr = PDF::Reader.new(path)
63
+ rr.pages.map { |page| page.text }.join("\n")
64
+ end
65
+
66
+ end
@@ -0,0 +1,49 @@
1
+ module Textminer
2
+ class Fetch #:nodoc:
3
+ attr_accessor :doi, :type
4
+
5
+ def initialize(doi, type)
6
+ self.doi = doi
7
+ self.type = type
8
+ end
9
+
10
+ def fetchtext
11
+ lks = Textminer.links(self.doi)
12
+ lk = pick_link(lks)
13
+ case self.type
14
+ when "xml"
15
+ # HTTParty.get(lk)
16
+ coll = []
17
+ Array(lk).each do |x|
18
+ coll << HTTParty.get(x)
19
+ end
20
+ return coll
21
+ when "pdf"
22
+ serialize_pdf(lk, self.doi)
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def pick_link(x)
29
+ case self.type
30
+ when "xml"
31
+ x.xml
32
+ when "pdf"
33
+ x.pdf
34
+ else
35
+ puts "type must be xml or pdf"
36
+ end
37
+ end
38
+
39
+ def serialize_pdf(x, y)
40
+ path = "/Users/sacmac/.textminer/" + y.gsub('/', '_') + ".pdf"
41
+ File.open(path, "wb") do |f|
42
+ f.write HTTParty.get(x).parsed_response
43
+ end
44
+
45
+ return path
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ module Textminer
2
+ class Request #:nodoc:
3
+ attr_accessor :doi
4
+
5
+ def initialize(doi)
6
+ self.doi = doi
7
+ end
8
+
9
+ def perform
10
+ url = "http://api.crossref.org/works/"
11
+ coll = []
12
+ Array(self.doi).each do |x|
13
+ coll << HTTParty.get(url + x)
14
+ end
15
+ # res = HTTParty.get(url + self.doi)
16
+ Response.new(self.doi, coll)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,52 @@
1
+ module Textminer
2
+ class Response #:nodoc:
3
+ attr_reader :doi, :response
4
+
5
+ def initialize(doi, res)
6
+ @doi = doi
7
+ @res = res
8
+ end
9
+
10
+ def raw_body
11
+ # @res
12
+ @res.collect { |x| x.body }
13
+ end
14
+
15
+ def parsed
16
+ # JSON.parse(@res.body)
17
+ @res.collect { |x| JSON.parse(x.body) }
18
+ end
19
+
20
+ def links
21
+ # @res['message']['link']
22
+ @res.collect { |x| x['message']['link'] }
23
+ end
24
+
25
+ def pdf
26
+ tmp = links
27
+ if !tmp.nil?
28
+ tmp.collect { |z|
29
+ z.select{ |x| x['content-type'] == "application/pdf" }[0]['URL']
30
+ }
31
+ end
32
+ end
33
+
34
+ def xml
35
+ tmp = links
36
+ if !tmp.nil?
37
+ tmp.collect { |z|
38
+ z.select{ |x| x['content-type'] == "application/xml" }[0]['URL']
39
+ }
40
+ end
41
+ end
42
+
43
+ def all
44
+ [xml, pdf]
45
+ end
46
+
47
+ # def browse
48
+
49
+ # end
50
+
51
+ end
52
+ end
@@ -0,0 +1,3 @@
1
+ module Textminer
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,52 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+ if ENV['CI']=='true'
4
+ require 'codecov'
5
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
6
+ end
7
+
8
+ require "textminer"
9
+ require 'fileutils'
10
+ require "test/unit"
11
+ require "oga"
12
+
13
+ class TestResponse < Test::Unit::TestCase
14
+
15
+ def setup
16
+ @doi = '10.5555/515151'
17
+ @doi2 = "10.3897/phytokeys.42.7604"
18
+ @pdf = ["http://annalsofpsychoceramics.labs.crossref.org/fulltext/10.5555/515151.pdf"]
19
+ @xml = ["http://annalsofpsychoceramics.labs.crossref.org/fulltext/10.5555/515151.xml"]
20
+ end
21
+
22
+ def test_links_endpoint
23
+ assert_equal(Textminer::Response, Textminer.links(@doi).class)
24
+ end
25
+
26
+ def test_doi
27
+ assert_equal(@doi, Textminer.links(@doi).doi)
28
+ end
29
+
30
+ def test_pdf
31
+ assert_equal(@pdf, Textminer.links(@doi).pdf)
32
+ end
33
+
34
+ def test_xml
35
+ assert_equal(@xml, Textminer.links(@doi).xml)
36
+ end
37
+
38
+ def test_fetch_xml
39
+ res = Textminer.fetch(@doi2, "xml")
40
+ assert_equal(HTTParty::Response, res[0].class)
41
+ assert_true(res[0].ok?)
42
+ assert_equal(String, res[0].body.class)
43
+ assert_equal("PhytoKeys", Oga.parse_xml(res[0].body).xpath('//journal-meta//journal-id').text)
44
+ end
45
+
46
+ # def test_fetch_pdf
47
+ # res = Textminer.fetch(@doi2, "pdf")
48
+ # assert_equal(HTTParty::Response, res.class)
49
+ # assert_true(res.ok?)
50
+ # end
51
+
52
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'textminer/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'textminer'
8
+ s.version = Textminer::VERSION
9
+ s.date = '2015-08-24'
10
+ s.summary = "Interact with Crossref's Text and Data mining API"
11
+ s.description = "Search Crossref's search API for full text content, and get full text content."
12
+ s.authors = "Scott Chamberlain"
13
+ s.email = 'myrmecocystus@gmail.com'
14
+ s.homepage = 'http://github.com/sckott/textminer'
15
+ s.licenses = 'MIT'
16
+
17
+ s.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
18
+ s.test_files = ["test/test_tdm.rb"]
19
+ s.require_paths = ["lib"]
20
+
21
+ s.bindir = 'bin'
22
+ s.executables = ['tm']
23
+
24
+ s.add_development_dependency "bundler", '~> 1.6'
25
+ s.add_development_dependency "rake", '~> 10.4'
26
+ s.add_development_dependency "test-unit", '~> 3.1'
27
+ s.add_development_dependency "oga", '~> 1.2'
28
+ s.add_development_dependency "simplecov", '~> 0.10'
29
+ s.add_development_dependency "codecov", '~> 0.1'
30
+ s.add_runtime_dependency 'httparty', '~> 0.13'
31
+ s.add_runtime_dependency 'thor', '~> 0.19'
32
+ s.add_runtime_dependency 'json', '~> 1.8'
33
+ s.add_runtime_dependency 'launchy', '~> 2.4', '>= 2.4.2'
34
+ s.add_runtime_dependency 'pdf-reader','~> 1.3'
35
+ end
metadata ADDED
@@ -0,0 +1,222 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: textminer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Scott Chamberlain
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
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.4'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: test-unit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: oga
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: codecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: httparty
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.13'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.13'
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.19'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.19'
125
+ - !ruby/object:Gem::Dependency
126
+ name: json
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.8'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.8'
139
+ - !ruby/object:Gem::Dependency
140
+ name: launchy
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.4'
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: 2.4.2
149
+ type: :runtime
150
+ prerelease: false
151
+ version_requirements: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - "~>"
154
+ - !ruby/object:Gem::Version
155
+ version: '2.4'
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: 2.4.2
159
+ - !ruby/object:Gem::Dependency
160
+ name: pdf-reader
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '1.3'
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '1.3'
173
+ description: Search Crossref's search API for full text content, and get full text
174
+ content.
175
+ email: myrmecocystus@gmail.com
176
+ executables:
177
+ - tm
178
+ extensions: []
179
+ extra_rdoc_files: []
180
+ files:
181
+ - ".gitignore"
182
+ - ".travis.yml"
183
+ - Gemfile
184
+ - Gemfile.lock
185
+ - NEWS.md
186
+ - README.md
187
+ - Rakefile
188
+ - bin/tm
189
+ - lib/textminer.rb
190
+ - lib/textminer/fetch.rb
191
+ - lib/textminer/request.rb
192
+ - lib/textminer/response.rb
193
+ - lib/textminer/version.rb
194
+ - test/test_tdm.rb
195
+ - textminer.gemspec
196
+ homepage: http://github.com/sckott/textminer
197
+ licenses:
198
+ - MIT
199
+ metadata: {}
200
+ post_install_message:
201
+ rdoc_options: []
202
+ require_paths:
203
+ - lib
204
+ required_ruby_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ requirements: []
215
+ rubyforge_project:
216
+ rubygems_version: 2.4.5
217
+ signing_key:
218
+ specification_version: 4
219
+ summary: Interact with Crossref's Text and Data mining API
220
+ test_files:
221
+ - test/test_tdm.rb
222
+ has_rdoc: