textminer 0.1.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: 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: