researchmap2bib 0.1.1 → 0.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d942d5831c81c0a95ef7cd942a02d4377868b874
4
- data.tar.gz: 779a37d07a694e4be29ea233818d632ebeb23cfd
3
+ metadata.gz: d3ca939dcd16b60e8b4c847a8248759967857f79
4
+ data.tar.gz: ab0aa94131d490e0c000d9a718a49262959090aa
5
5
  SHA512:
6
- metadata.gz: 757b3f5498f3175228fe45dc1c84658ed9cdb8aad5cc5cf58b9d5f10d928e24a4c05853e1706cb9c77510eb49b8a2a51983e92d97104a3e622cd5438453b5194
7
- data.tar.gz: b5cf1d8764fe96bdecac863ebe988ca5d4f5785acc6d98c59ab5926772f372546340d2616ffe2937464b4b2121c8f1df7d9f9a1601b00626c31b3995922bcb8d
6
+ metadata.gz: 4eb917952d6015c74fd244ae2a71d0b3297fe18e80aba9eb8d4dcf2f48d196ce35481a46640084c4f39375346277b6e58ab02a3b50dc0b493a37b02bb02ab3d3
7
+ data.tar.gz: d11615610efeeb942b912104d6a3b2719c0e581d3f9c994721866041fd29ac67fccb237c40e0e87eb194140cd2503519bfbb405ac7c96961686e8afcd6ee1be7
data/Guardfile ADDED
@@ -0,0 +1,42 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ guard :minitest do
19
+ # with Minitest::Unit
20
+ watch(%r{^test/(.*)\/?(.*)_test\.rb$})
21
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}#{m[2]}_test.rb" }
22
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
23
+
24
+ # with Minitest::Spec
25
+ # watch(%r{^spec/(.*)_spec\.rb$})
26
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
27
+ # watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
28
+
29
+ # Rails 4
30
+ # watch(%r{^app/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
31
+ # watch(%r{^app/controllers/application_controller\.rb$}) { 'test/controllers' }
32
+ # watch(%r{^app/controllers/(.+)_controller\.rb$}) { |m| "test/integration/#{m[1]}_test.rb" }
33
+ # watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
34
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "test/lib/#{m[1]}_test.rb" }
35
+ # watch(%r{^test/.+_test\.rb$})
36
+ # watch(%r{^test/test_helper\.rb$}) { 'test' }
37
+
38
+ # Rails < 4
39
+ # watch(%r{^app/controllers/(.*)\.rb$}) { |m| "test/functional/#{m[1]}_test.rb" }
40
+ # watch(%r{^app/helpers/(.*)\.rb$}) { |m| "test/helpers/#{m[1]}_test.rb" }
41
+ # watch(%r{^app/models/(.*)\.rb$}) { |m| "test/unit/#{m[1]}_test.rb" }
42
+ end
data/bin/console CHANGED
@@ -3,12 +3,5 @@
3
3
  require "bundler/setup"
4
4
  require "researchmap2bib"
5
5
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
6
+ require "pry"
7
+ Pry.start
data/exe/researchmap2bib CHANGED
@@ -2,4 +2,12 @@
2
2
 
3
3
  require "researchmap2bib"
4
4
 
5
- puts 'hello'
5
+ @s = Researchmap2bib::ResearchmapReader.new
6
+ entries = @s.read_researchmap('test/ychubachi.zip')
7
+
8
+ results = Array.new
9
+ entries.each do |entry|
10
+ results.push(@s.write_bibliography_entry(entry))
11
+ end
12
+
13
+ puts results.join("\n")
@@ -1,3 +1,3 @@
1
1
  module Researchmap2bib
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -1,5 +1,164 @@
1
+ # coding: utf-8
1
2
  require "researchmap2bib/version"
2
3
 
4
+ require 'zip'
5
+ require 'rexml/document'
6
+ require 'pp'
7
+ require 'erb'
8
+
3
9
  module Researchmap2bib
4
- # Your code goes here...
10
+ Entry = Struct.new(
11
+ :title, :author, :summary, :journal, :publisher, :publicationName,
12
+ :volume, :number, :startingPage, :endingPage, :publicationDate,
13
+ :referee, :language, :paperType,
14
+ )
15
+
16
+ class ResearchmapReader
17
+ def read_researchmap(file_name)
18
+ entries = Zip::File.open(file_name) do |zip_file|
19
+ entry = zip_file.glob('*\/paper.xml').first
20
+ read_paper(entry.get_input_stream.read)
21
+ end
22
+ end
23
+
24
+ def read_paper(xml)
25
+ doc = REXML::Document.new(xml)
26
+ entries = Array.new
27
+ REXML::XPath.each(doc, '/feed/entry') do |entry|
28
+ entries.push(read_entry(entry))
29
+ end
30
+ entries
31
+ end
32
+
33
+ def read_entry(entry)
34
+ title = entry.elements["title"].text
35
+ author = entry.elements["author"].elements["name"].text
36
+ author = to_hankaku(author)
37
+ summary = entry.elements["summary"].text
38
+ journal = entry.elements["rm:journal"].text
39
+ publisher = entry.elements["rm:publisher"].text
40
+ publicationName = entry.elements["rm:publicationName"].text
41
+ volume = entry.elements["rm:volume"].text
42
+ number = entry.elements["rm:number"].text
43
+ startingPage = entry.elements["rm:startingPage"].text
44
+ endingPage = entry.elements["rm:endingPage"].text
45
+ publicationDate = entry.elements["rm:publicationDate"].text
46
+ referee = entry.elements["rm:referee"] ? true : false
47
+ language = entry.elements["rm:language"].text
48
+ paperType = entry.elements["rm:paperType"].elements["id"].text
49
+
50
+ Entry.new(
51
+ title, author, summary, journal, publisher, publicationName,
52
+ volume, number, startingPage, endingPage, publicationDate,
53
+ referee, language, paperType,
54
+ )
55
+ end
56
+
57
+ # 0:未設定、1:研究論文(学術雑誌)、2:研究論文(国際会議プロシーディングス)、3:研究論文(大学,研究機関紀要)
58
+ # 、
59
+ # 4:研究論文(研究会,シンポジウム資料等)、5:研究論文(その他学術会議資料等)
60
+ def write_bibliography_entry(entry)
61
+ key = generate_key(entry.author, entry.publicationDate)
62
+ year, month = year_month(entry.publicationDate)
63
+ month = month.to_i
64
+ case entry.paperType.to_i
65
+ when 1, 3 then
66
+ record = <<EOS
67
+ @Article{<%= key %>,
68
+ author = {<%= entry.author %>},
69
+ title = {<%= entry.title %>},
70
+ journal = {<%= entry.journal %>},
71
+ EOS
72
+ record += ' year = <%= year %>'
73
+ if month > 0
74
+ record += ",\n month = <%= month %>"
75
+ end
76
+ if entry.volume
77
+ record += ",\n volume = <%= entry.volume %>"
78
+ end
79
+ if entry.number
80
+ record += ",\n number = <%= entry.number %>"
81
+ end
82
+ if entry.startingPage && entry.endingPage
83
+ record += ",\n pages = <%= entry.startingPage %>-<%= entry.endingPage %>"
84
+ elsif entry.startingPage
85
+ record += ",\n pages = <%= entry.startingPage %> %>"
86
+ end
87
+ record += "}\n"
88
+ if entry.summary
89
+ record += "% <%= entry.summary %>\n"
90
+ end
91
+ else
92
+ record = <<EOS
93
+ @InProceedings{<%= key %>,
94
+ author = {<%= entry.author %>},
95
+ title = {<%= entry.title %>},
96
+ booktitle = {<%= entry.journal %>},
97
+ EOS
98
+ record += ' year = <%= year %>'
99
+ if month > 0
100
+ record += ",\n month = <%= month %>"
101
+ end
102
+ if entry.volume
103
+ record += ",\n volume = <%= entry.volume %>"
104
+ end
105
+ if entry.number
106
+ record += ",\n number = <%= entry.number %>"
107
+ end
108
+ if entry.startingPage && entry.endingPage
109
+ record += ",\n pages = <%= entry.startingPage %>-<%= entry.endingPage %>"
110
+ elsif entry.startingPage
111
+ record += ",\n pages = <%= entry.startingPage %> %>"
112
+ end
113
+ if entry.publisher
114
+ record += ",\n publisher = {<%= entry.publisher %>}"
115
+ end
116
+ record += "}\n"
117
+ if entry.summary
118
+ record += "% <%= entry.summary %>\n"
119
+ end
120
+ end
121
+ erb = ERB.new(record)
122
+ erb.result(binding)
123
+ end
124
+
125
+ def to_hankaku(str)
126
+ str.tr('0-9a-zA-Z,、 ', '0-9a-zA-Z,, ')
127
+ end
128
+
129
+ def year_month(date)
130
+ /([0-9]{4})([0-9]{2})/.match(date).captures
131
+ end
132
+
133
+ def concatenate_authors(authors)
134
+ authors.gsub(/ *, */, ' and ')
135
+ end
136
+
137
+ def first_author(authors)
138
+ r = /([^,]*)/.match(authors)
139
+ r == nil ? authors.strip : r.captures[0].strip
140
+ end
141
+
142
+ def family_name(author)
143
+ if /(^\w*) *(\w*)$/ =~ author
144
+ $2
145
+ elsif /(^\S*) *(\S*)$/ =~ author
146
+ $1
147
+ else
148
+ author
149
+ end
150
+ end
151
+
152
+ def generate_key(authors, date)
153
+ first_author = first_author(authors)
154
+ name = family_name(first_author)
155
+ year, month = year_month(date)
156
+ year = /[0-9][0-9]([0-9][0-9])/.match(year).captures[0]
157
+ if month.to_i >0
158
+ name + year + month
159
+ else
160
+ name + year
161
+ end
162
+ end
163
+ end
5
164
  end
@@ -19,7 +19,12 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
+ spec.add_dependency "rubyzip", ">= 1.0.0"
23
+
22
24
  spec.add_development_dependency "bundler", "~> 1.12"
23
25
  spec.add_development_dependency "rake", "~> 10.0"
24
26
  spec.add_development_dependency "minitest", "~> 5.0"
27
+ spec.add_development_dependency "pry"
28
+ spec.add_development_dependency "guard"
29
+ spec.add_development_dependency "guard-minitest"
25
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: researchmap2bib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshihide Chubachi
@@ -10,6 +10,20 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2016-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubyzip
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,48 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '5.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-minitest
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
55
111
  description: This script creates bibliography files which can be used by LaTeX from
56
112
  researchmap.
57
113
  email:
@@ -64,6 +120,7 @@ files:
64
120
  - ".gitignore"
65
121
  - ".travis.yml"
66
122
  - Gemfile
123
+ - Guardfile
67
124
  - LICENSE.txt
68
125
  - README.md
69
126
  - Rakefile