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.
- checksums.yaml +7 -0
- data/.gitignore +36 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +68 -0
- data/NEWS.md +3 -0
- data/README.md +116 -0
- data/Rakefile +26 -0
- data/bin/tm +22 -0
- data/lib/textminer.rb +66 -0
- data/lib/textminer/fetch.rb +49 -0
- data/lib/textminer/request.rb +19 -0
- data/lib/textminer/response.rb +52 -0
- data/lib/textminer/version.rb +3 -0
- data/test/test_tdm.rb +52 -0
- data/textminer.gemspec +35 -0
- metadata +222 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
@@ -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/
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -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
data/README.md
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
textminer
|
2
|
+
=========
|
3
|
+
|
4
|
+
[](https://travis-ci.org/sckott/textminer)
|
5
|
+
[](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
|
data/Rakefile
ADDED
@@ -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)
|
data/lib/textminer.rb
ADDED
@@ -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
|
data/test/test_tdm.rb
ADDED
@@ -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
|
data/textminer.gemspec
ADDED
@@ -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:
|