uc3-dmp-id 0.1.2 → 0.1.3
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 +4 -4
- data/lib/uc3-dmp-id/asserter.rb +2 -6
- data/lib/uc3-dmp-id/comparator.rb +197 -166
- data/lib/uc3-dmp-id/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 10840ba39949ec387dd3016a717d75cf3ba5d259fe164fb54e9c2d436e74a24b
|
|
4
|
+
data.tar.gz: 398c7de1d549a738bfc574cdf56c71b1bff8400402aee5bc8b356fdcb9f01ecb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 793eeaf24f53e8a77e36596d91c56501f125f8d9272bd6b432dd05bc2d170d907d25fe213c276cf614ed8118884ac0be796cfa53e3d02c88ed91bf8660ab2f53
|
|
7
|
+
data.tar.gz: 8214ca8f136883170f45b025bc80e73e047ad2a6172837e08ab8f1b3dc48049d3038a95f4df278958c7b3d6a5b5b938a988ec88c3bb556bb0791c998c2603200
|
data/lib/uc3-dmp-id/asserter.rb
CHANGED
|
@@ -209,12 +209,8 @@ module Uc3DmpId
|
|
|
209
209
|
end
|
|
210
210
|
end
|
|
211
211
|
|
|
212
|
-
def _score_related_work(latest_version:, work:)
|
|
212
|
+
def _score_related_work(latest_version:, work:); end
|
|
213
213
|
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
def _score_funding(latest_version:, funding:)
|
|
217
|
-
|
|
218
|
-
end
|
|
214
|
+
def _score_funding(latest_version:, funding:); end
|
|
219
215
|
end
|
|
220
216
|
end
|
|
@@ -2,23 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
require 'text'
|
|
4
4
|
|
|
5
|
+
# rubocop:disable Metrics/ClassLength
|
|
5
6
|
module Uc3DmpId
|
|
6
7
|
class ComparatorError < StandardError; end
|
|
7
8
|
|
|
8
9
|
# Class that compares incoming data from an external source to the DMP
|
|
9
10
|
# It determines if they are likely related and applies a confidence rating
|
|
10
11
|
class Comparator
|
|
11
|
-
|
|
12
12
|
MSG_MISSING_AUGMENTER = 'No Augmenter specified!'
|
|
13
13
|
MSG_MISSING_DMP = 'No DMP or the DMP did not contain enough information to use.'
|
|
14
14
|
|
|
15
|
-
STOP_WORDS = %w[a an and if of or the then they]
|
|
15
|
+
STOP_WORDS = %w[a an and if of or the then they].freeze
|
|
16
16
|
|
|
17
17
|
# See the bottom of this file for a hard-coded crosswalk between Crossref funder ids and ROR ids
|
|
18
18
|
# Some APIs do not support ROR fully for funder ids, so we need to be able to reference both
|
|
19
19
|
|
|
20
20
|
attr_accessor :augmenter, :dmp, :details_hash, :logger
|
|
21
21
|
|
|
22
|
+
# rubocop:disable Metrics/AbcSize
|
|
22
23
|
def initialize(**args)
|
|
23
24
|
@logger = args[:logger]
|
|
24
25
|
@details_hash = {}
|
|
@@ -31,6 +32,7 @@ module Uc3DmpId
|
|
|
31
32
|
_extract_dmp_details(dmp:)
|
|
32
33
|
raise ComparatorError, MSG_MISSING_DMP if @details_hash.empty?
|
|
33
34
|
end
|
|
35
|
+
# rubocop:enable Metrics/AbcSize
|
|
34
36
|
|
|
35
37
|
# Compare the incoming hash with the DMP details that were gathered during initialization.
|
|
36
38
|
#
|
|
@@ -53,6 +55,7 @@ module Uc3DmpId
|
|
|
53
55
|
# { id: ["http://some.repo.org", "https://doi.org/re3data123"], name: "Repo" }
|
|
54
56
|
# ]
|
|
55
57
|
# }
|
|
58
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
56
59
|
def compare(hash:)
|
|
57
60
|
response = { confidence: 'None', score: 0, notes: [], source: @augmenter['name'] }
|
|
58
61
|
return response unless hash.is_a?(Hash) && !hash['title'].nil?
|
|
@@ -67,20 +70,27 @@ module Uc3DmpId
|
|
|
67
70
|
response = _last_name_and_affiliation_match?(array: hash['people'], response:)
|
|
68
71
|
|
|
69
72
|
# Only process the following if we had some matching contributors, affiliations or opportuniy nbrs
|
|
70
|
-
response = _repository_match?(array: hash['repositories'], response:) if response[:score]
|
|
71
|
-
response = _keyword_match?(array: hash['repositories'], response:) if response[:score]
|
|
72
|
-
response = _text_match?(type: 'title', text: hash['title'], response:) if response[:score]
|
|
73
|
-
response = _text_match?(type: 'abstract', text: hash['abstract'], response:) if response[:score]
|
|
73
|
+
response = _repository_match?(array: hash['repositories'], response:) if response[:score].positive?
|
|
74
|
+
response = _keyword_match?(array: hash['repositories'], response:) if response[:score].positive?
|
|
75
|
+
response = _text_match?(type: 'title', text: hash['title'], response:) if response[:score].positive?
|
|
76
|
+
response = _text_match?(type: 'abstract', text: hash['abstract'], response:) if response[:score].positive?
|
|
74
77
|
# If the score is less than 3 then we have no confidence that it is a match
|
|
75
78
|
return response if response[:score] <= 2
|
|
76
79
|
|
|
77
80
|
# Set the confidence level based on the score
|
|
78
|
-
response[:confidence] = response[:score] > 15
|
|
81
|
+
response[:confidence] = if response[:score] > 15
|
|
82
|
+
'High'
|
|
83
|
+
else
|
|
84
|
+
(response[:score] > 10 ? 'Medium' : 'Low')
|
|
85
|
+
end
|
|
79
86
|
response
|
|
80
87
|
end
|
|
88
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
81
89
|
|
|
82
90
|
private
|
|
83
91
|
|
|
92
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
93
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
84
94
|
def _extract_dmp_details(dmp:)
|
|
85
95
|
return nil unless dmp.is_a?(Hash) && !dmp['title'].nil? && !dmp['contact'].nil?
|
|
86
96
|
|
|
@@ -111,13 +121,16 @@ module Uc3DmpId
|
|
|
111
121
|
_extract_repositories(repos: hosts.flatten.compact.uniq)
|
|
112
122
|
|
|
113
123
|
# Clean up the results by flattening and removing duplicates from the Arrays
|
|
114
|
-
@details_hash.
|
|
124
|
+
@details_hash.each_key do |key|
|
|
115
125
|
@details_hash[key] = @details_hash[key].flatten.compact.uniq if @details_hash[key].is_a?(Array)
|
|
116
126
|
end
|
|
117
|
-
@logger&.debug(message:
|
|
127
|
+
@logger&.debug(message: 'Extracted the following from the DMP', details: @details_hash)
|
|
118
128
|
end
|
|
129
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
130
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
119
131
|
|
|
120
132
|
# Extract all of the funding information
|
|
133
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
121
134
|
def _extract_funding(array:)
|
|
122
135
|
return [] unless array.is_a?(Array)
|
|
123
136
|
|
|
@@ -143,8 +156,10 @@ module Uc3DmpId
|
|
|
143
156
|
end
|
|
144
157
|
array
|
|
145
158
|
end
|
|
159
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
146
160
|
|
|
147
161
|
# Extract all of the ORCIDs, last names, and affiliation ids and names
|
|
162
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
148
163
|
def _extract_people(array:)
|
|
149
164
|
return [] unless array.is_a?(Array)
|
|
150
165
|
|
|
@@ -164,8 +179,10 @@ module Uc3DmpId
|
|
|
164
179
|
end
|
|
165
180
|
array
|
|
166
181
|
end
|
|
182
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
167
183
|
|
|
168
184
|
# Extract all of the re3data ids, URLs and names
|
|
185
|
+
# rubocop:disable Metrics/AbcSize
|
|
169
186
|
def _extract_repositories(repos:)
|
|
170
187
|
return [] unless repos.is_a?(Array)
|
|
171
188
|
|
|
@@ -179,11 +196,13 @@ module Uc3DmpId
|
|
|
179
196
|
end
|
|
180
197
|
repos
|
|
181
198
|
end
|
|
199
|
+
# rubocop:enable Metrics/AbcSize
|
|
182
200
|
|
|
183
201
|
# Returns whether or not the incoming grant id(s) match the DMPs grant id. Expecting:
|
|
184
202
|
# [
|
|
185
203
|
# { id: "https://doi.org/crossref123", name: "Bar", grant: ["1234", "http://foo.bar/543"] }
|
|
186
204
|
# ]
|
|
205
|
+
# rubocop:disable Metrics/AbcSize
|
|
187
206
|
def _grants_match?(array:, response:)
|
|
188
207
|
return response unless array.is_a?(Array) && response.is_a?(Hash)
|
|
189
208
|
|
|
@@ -191,7 +210,7 @@ module Uc3DmpId
|
|
|
191
210
|
.map { |funding| funding['grant'].map { |id| id&.downcase&.strip } }
|
|
192
211
|
.flatten.compact.uniq
|
|
193
212
|
|
|
194
|
-
matched = _compare_arrays(array_a:
|
|
213
|
+
matched = _compare_arrays(array_a: @details_hash.fetch(:grant_ids, []), array_b: ids)
|
|
195
214
|
return response if matched <= 0
|
|
196
215
|
|
|
197
216
|
response[:confidence] = 'Absolute'
|
|
@@ -199,11 +218,13 @@ module Uc3DmpId
|
|
|
199
218
|
response[:notes] << 'the grant ID matched'
|
|
200
219
|
response
|
|
201
220
|
end
|
|
221
|
+
# rubocop:enable Metrics/AbcSize
|
|
202
222
|
|
|
203
223
|
# Returns whether or not the incoming grant id(s) match the DMPs opportunity id. Expecting:
|
|
204
224
|
# [
|
|
205
225
|
# { id: "https://doi.org/crossref123", name: "Bar", grant: ["1234", "http://foo.bar/543"] }
|
|
206
226
|
# ]
|
|
227
|
+
# rubocop:disable Metrics/AbcSize
|
|
207
228
|
def _opportunities_match?(array:, response:)
|
|
208
229
|
return response unless array.is_a?(Array) && response.is_a?(Hash)
|
|
209
230
|
|
|
@@ -211,13 +232,14 @@ module Uc3DmpId
|
|
|
211
232
|
.map { |funding| funding['grant'].map { |id| id&.downcase&.strip } }
|
|
212
233
|
.flatten.compact.uniq
|
|
213
234
|
|
|
214
|
-
matched = _compare_arrays(array_a:
|
|
235
|
+
matched = _compare_arrays(array_a: @details_hash.fetch(:opportunity_ids, []), array_b: ids)
|
|
215
236
|
return response if matched <= 0
|
|
216
237
|
|
|
217
238
|
response[:score] += 5
|
|
218
239
|
response[:notes] << 'the funding opportunity number matched'
|
|
219
240
|
response
|
|
220
241
|
end
|
|
242
|
+
# rubocop:enable Metrics/AbcSize
|
|
221
243
|
|
|
222
244
|
# Returns whether or not the inciming list of creators/contributors match those on the DMP. Expecting:
|
|
223
245
|
# [
|
|
@@ -227,6 +249,7 @@ module Uc3DmpId
|
|
|
227
249
|
# affiliation: { id: "https://ror.org/blah", name: "Foo" }
|
|
228
250
|
# }
|
|
229
251
|
# ]
|
|
252
|
+
# rubocop:disable Metrics/AbcSize
|
|
230
253
|
def _orcids_match?(array:, response:)
|
|
231
254
|
return response unless array.is_a?(Array) && response.is_a?(Hash)
|
|
232
255
|
|
|
@@ -234,13 +257,14 @@ module Uc3DmpId
|
|
|
234
257
|
.map { |person| person['id']&.downcase&.strip }
|
|
235
258
|
.flatten.compact.uniq
|
|
236
259
|
|
|
237
|
-
matched = _compare_arrays(array_a:
|
|
260
|
+
matched = _compare_arrays(array_a: @details_hash.fetch(:identifiers, []), array_b: ids)
|
|
238
261
|
return response if matched <= 0
|
|
239
262
|
|
|
240
263
|
response[:score] += (matched * 2)
|
|
241
264
|
response[:notes] << 'contributor ORCIDs matched'
|
|
242
265
|
response
|
|
243
266
|
end
|
|
267
|
+
# rubocop:enable Metrics/AbcSize
|
|
244
268
|
|
|
245
269
|
# Returns whether or not the inciming list of creators/contributors match those on the DMP. Expecting:
|
|
246
270
|
# [
|
|
@@ -250,6 +274,7 @@ module Uc3DmpId
|
|
|
250
274
|
# affiliation: { id: "https://ror.org/blah", name: "Foo" }
|
|
251
275
|
# }
|
|
252
276
|
# ]
|
|
277
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
253
278
|
def _last_name_and_affiliation_match?(array:, response:)
|
|
254
279
|
return response unless array.is_a?(Array) && response.is_a?(Hash)
|
|
255
280
|
|
|
@@ -260,20 +285,22 @@ module Uc3DmpId
|
|
|
260
285
|
affil_names = affiliations.map { |affil| affil['name']&.downcase&.strip }&.flatten&.compact&.uniq
|
|
261
286
|
|
|
262
287
|
# Check the person last names and affiliation name and RORs
|
|
263
|
-
last_names_matched = _compare_arrays(array_a:
|
|
264
|
-
rors_matched = _compare_arrays(array_a:
|
|
265
|
-
affil_names_matched = _compare_arrays(array_a:
|
|
288
|
+
last_names_matched = _compare_arrays(array_a: @details_hash.fetch(:last_names, []), array_b: last_names)
|
|
289
|
+
rors_matched = _compare_arrays(array_a: @details_hash.fetch(:affiliation_ids, []), array_b: rors)
|
|
290
|
+
affil_names_matched = _compare_arrays(array_a: @details_hash.fetch(:affiliations, []), array_b: affil_names)
|
|
266
291
|
return response if last_names_matched <= 0 && rors_matched <= 0 && affil_names_matched <= 0
|
|
267
292
|
|
|
268
293
|
response[:score] += last_names_matched + rors_matched + affil_names_matched
|
|
269
294
|
response[:notes] << 'contributor names and affiliations matched'
|
|
270
295
|
response
|
|
271
296
|
end
|
|
297
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
272
298
|
|
|
273
299
|
# Returns whether or not the incoming list of repositories match those defined in the DMP. Expecting:
|
|
274
300
|
# [
|
|
275
301
|
# { id: ["http://some.repo.org", "https://doi.org/re3data123"], name: "Repo" }
|
|
276
302
|
# ]
|
|
303
|
+
# rubocop:disable Metrics/AbcSize
|
|
277
304
|
def _repository_match?(array:, response:)
|
|
278
305
|
return response unless array.is_a?(Array) && response.is_a?(Hash)
|
|
279
306
|
|
|
@@ -282,13 +309,14 @@ module Uc3DmpId
|
|
|
282
309
|
.map { |repo| repo['id'].map { |id| id&.downcase&.strip } }
|
|
283
310
|
.flatten.compact.uniq
|
|
284
311
|
|
|
285
|
-
matched = _compare_arrays(array_a:
|
|
312
|
+
matched = _compare_arrays(array_a: @details_hash.fetch(:identifiers, []), array_b: ids)
|
|
286
313
|
return response if matched <= 0
|
|
287
314
|
|
|
288
315
|
response[:score] += matched
|
|
289
316
|
response[:notes] << 'repositories matched'
|
|
290
317
|
response
|
|
291
318
|
end
|
|
319
|
+
# rubocop:enable Metrics/AbcSize
|
|
292
320
|
|
|
293
321
|
# Returns whether or not the list of keywords exist in the DMP. Expecting:
|
|
294
322
|
# keywords: ["foo", "bar"]
|
|
@@ -296,7 +324,7 @@ module Uc3DmpId
|
|
|
296
324
|
return response unless array.is_a?(Array) && response.is_a?(Hash)
|
|
297
325
|
|
|
298
326
|
keywords = array.map { |word| word&.downcase&.strip }&.flatten&.compact&.uniq
|
|
299
|
-
matched = _compare_arrays(array_a:
|
|
327
|
+
matched = _compare_arrays(array_a: @details_hash.fetch(:keywords, []), array_b: keywords)
|
|
300
328
|
return response if matched <= 0
|
|
301
329
|
|
|
302
330
|
response[:score] += 1
|
|
@@ -305,7 +333,8 @@ module Uc3DmpId
|
|
|
305
333
|
end
|
|
306
334
|
|
|
307
335
|
# Uses an NLP library to determine if the :text matches the DMP/Project :title or :description
|
|
308
|
-
|
|
336
|
+
# rubocop:disable Metrics/AbcSize
|
|
337
|
+
def _text_match?(text:, response:, type: 'title')
|
|
309
338
|
return response unless response.is_a?(Hash) && text.is_a?(String) && !text.strip.empty? &&
|
|
310
339
|
!@details_hash[type.to_sym].nil?
|
|
311
340
|
|
|
@@ -317,13 +346,14 @@ module Uc3DmpId
|
|
|
317
346
|
"incoming_#{type}": cleansed,
|
|
318
347
|
nlp_score: nlp_processor.similarity(@details_hash[type.to_sym], cleansed)
|
|
319
348
|
}
|
|
320
|
-
@logger&.debug(message:
|
|
349
|
+
@logger&.debug(message: 'Text::WhiteSimilarity score', details:)
|
|
321
350
|
return response if details[:nlp_score] < 0.5
|
|
322
351
|
|
|
323
352
|
response[:score] += details[:nlp_score] >= 0.75 ? 5 : 2
|
|
324
353
|
response[:notes] << "#{type}s are similar"
|
|
325
354
|
response
|
|
326
355
|
end
|
|
356
|
+
# rubocop:enable Metrics/AbcSize
|
|
327
357
|
|
|
328
358
|
# Change the incoming text to lower case, remove spaces and STOP_WORDS
|
|
329
359
|
def _cleanse_text(text:)
|
|
@@ -343,158 +373,159 @@ module Uc3DmpId
|
|
|
343
373
|
# TODO: Remove this hard-coded crosswalk once the community has broader support for using ROR for funder ids
|
|
344
374
|
ROR_FUNDREF_ID_CROSSWALK = {
|
|
345
375
|
# NIH ID Crosswalk
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
376
|
+
'https://ror.org/01cwqze88': 'https://doi.org/10.13039/100000002',
|
|
377
|
+
'https://ror.org/04mhx6838': 'https://doi.org/10.13039/100000055',
|
|
378
|
+
'https://ror.org/012pb6c26': 'https://doi.org/10.13039/100000050',
|
|
379
|
+
'https://ror.org/03wkg3b53': 'https://doi.org/10.13039/100000053',
|
|
380
|
+
'https://ror.org/0060t0j89': 'https://doi.org/10.13039/100000092',
|
|
381
|
+
'https://ror.org/00372qc85': 'https://doi.org/10.13039/100000070',
|
|
382
|
+
'https://ror.org/00190t495': 'https://doi.org/10.13039/100008460',
|
|
383
|
+
'https://ror.org/00j4k1h63': 'https://doi.org/10.13039/100000066',
|
|
384
|
+
'https://ror.org/01y3zfr79': 'https://doi.org/10.13039/100000056',
|
|
385
|
+
'https://ror.org/04q48ey07': 'https://doi.org/10.13039/100000057',
|
|
386
|
+
'https://ror.org/0493hgw16': 'https://doi.org/10.13039/100006545',
|
|
387
|
+
'https://ror.org/04vfsmv21': 'https://doi.org/10.13039/100000098',
|
|
388
|
+
'https://ror.org/03jh5a977': 'https://doi.org/10.13039/100000093',
|
|
389
|
+
'https://ror.org/04xeg9z08': 'https://doi.org/10.13039/100000025',
|
|
390
|
+
'https://ror.org/01s5ya894': 'https://doi.org/10.13039/100000065',
|
|
391
|
+
'https://ror.org/02meqm098': 'https://doi.org/10.13039/100000002',
|
|
392
|
+
'https://ror.org/049v75w11': 'https://doi.org/10.13039/100000049',
|
|
393
|
+
'https://ror.org/004a2wv92': 'https://doi.org/10.13039/100000072',
|
|
394
|
+
'https://ror.org/00adh9b73': 'https://doi.org/10.13039/100000062',
|
|
395
|
+
'https://ror.org/043z4tv69': 'https://doi.org/10.13039/100000060',
|
|
396
|
+
'https://ror.org/00x19de83': 'https://doi.org/10.13039/100000002',
|
|
397
|
+
'https://ror.org/02jzrsm59': 'https://doi.org/10.13039/100000027',
|
|
398
|
+
'https://ror.org/006zn3t30': 'https://doi.org/10.13039/100000069',
|
|
399
|
+
'https://ror.org/04byxyr05': 'https://doi.org/10.13039/100000071',
|
|
400
|
+
'https://ror.org/04pw6fb54': 'https://doi.org/10.13039/100006108',
|
|
401
|
+
'https://ror.org/05aq6yn88': 'https://doi.org/10.13039/100006955',
|
|
402
|
+
'https://ror.org/02xey9a22': 'https://doi.org/10.13039/100000061',
|
|
403
|
+
'https://ror.org/00fj8a872': 'https://doi.org/10.13039/100000052',
|
|
404
|
+
'https://ror.org/01wtjyf13': 'https://doi.org/10.13039/100000063',
|
|
405
|
+
'https://ror.org/04r5s4b52': 'https://doi.org/10.13039/100005440',
|
|
406
|
+
'https://ror.org/046zezr58': 'https://doi.org/10.13039/100006085',
|
|
407
|
+
'https://ror.org/02e3wq066': 'https://doi.org/10.13039/100006086',
|
|
408
|
+
'https://ror.org/031gy6182': 'https://doi.org/10.13039/100000002',
|
|
409
|
+
'https://ror.org/054j5yq82': 'https://doi.org/10.13039/100000002',
|
|
410
|
+
'https://ror.org/02yrzyf97': 'https://doi.org/10.13039/100000002',
|
|
381
411
|
|
|
382
412
|
# NSF ID Crosswalk
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
413
|
+
'https://.org/021nxhr62': 'https://doi.org/10.13039/100000001',
|
|
414
|
+
'https://.org/04aqat463': 'https://doi.org/10.13039/100000001',
|
|
415
|
+
'https://.org/01rcfpa16': 'https://doi.org/10.13039/100005441',
|
|
416
|
+
'https://.org/014eweh95': 'https://doi.org/10.13039/100005445',
|
|
417
|
+
'https://.org/001xhss06': 'https://doi.org/10.13039/100000076',
|
|
418
|
+
'https://.org/04qn9mx93': 'https://doi.org/10.13039/100000153',
|
|
419
|
+
'https://.org/03g87he71': 'https://doi.org/10.13039/100000155',
|
|
420
|
+
'https://.org/01tnvpc68': 'https://doi.org/10.13039/100000156',
|
|
421
|
+
'https://.org/01rvays47': 'https://doi.org/10.13039/100000154',
|
|
422
|
+
'https://.org/002jdaq33': 'https://doi.org/10.13039/100000152',
|
|
423
|
+
'https://.org/025kzpk63': 'https://doi.org/10.13039/100000083',
|
|
424
|
+
'https://.org/04nh1dc89': 'https://doi.org/10.13039/100007523',
|
|
425
|
+
'https://.org/01mng8331': 'https://doi.org/10.13039/100000143',
|
|
426
|
+
'https://.org/02rdzmk74': 'https://doi.org/10.13039/100000144',
|
|
427
|
+
'https://.org/053a2cp42': 'https://doi.org/10.13039/100000145',
|
|
428
|
+
'https://.org/014bj5w56': 'https://doi.org/10.13039/100000081',
|
|
429
|
+
'https://.org/00whkrf32': 'https://doi.org/10.13039/100000082',
|
|
430
|
+
'https://.org/05s7cqk18': 'https://doi.org/10.13039/100000173',
|
|
431
|
+
'https://.org/02kd4km72': 'https://doi.org/10.13039/100000172',
|
|
432
|
+
'https://.org/03mamvh39': 'https://doi.org/10.13039/100000171',
|
|
433
|
+
'https://.org/00b6sbb32': 'https://doi.org/10.13039/100000084',
|
|
434
|
+
'https://.org/0471zv972': 'https://doi.org/10.13039/100000146',
|
|
435
|
+
'https://.org/028yd4c30': 'https://doi.org/10.13039/100000147',
|
|
436
|
+
'https://.org/01krpsy48': 'https://doi.org/10.13039/100000148',
|
|
437
|
+
'https://.org/050rnw378': 'https://doi.org/10.13039/100000149',
|
|
438
|
+
'https://.org/0388pet74': 'https://doi.org/10.13039/100000150',
|
|
439
|
+
'https://.org/03xyg3m20': 'https://doi.org/10.13039/100000151',
|
|
440
|
+
'https://.org/05p847d66': 'https://doi.org/10.13039/100000085',
|
|
441
|
+
'https://.org/037gd6g64': 'https://doi.org/10.13039/100000159',
|
|
442
|
+
'https://.org/05v01mk25': 'https://doi.org/10.13039/100000160',
|
|
443
|
+
'https://.org/05wqqhv83': 'https://doi.org/10.13039/100000141',
|
|
444
|
+
'https://.org/05nwjp114': 'https://doi.org/10.13039/100007352',
|
|
445
|
+
'https://.org/05fnzca26': 'https://doi.org/10.13039/100000162',
|
|
446
|
+
'https://.org/02trddg58': 'https://doi.org/10.13039/100000163',
|
|
447
|
+
'https://.org/029b7h395': 'https://doi.org/10.13039/100000086',
|
|
448
|
+
'https://.org/04mg8wm74': 'https://doi.org/10.13039/100000164',
|
|
449
|
+
'https://.org/01ar8dr59': 'https://doi.org/10.13039/100000165',
|
|
450
|
+
'https://.org/01pc7k308': 'https://doi.org/10.13039/100000078',
|
|
451
|
+
'https://.org/051fftw81': 'https://doi.org/10.13039/100000121',
|
|
452
|
+
'https://.org/04ap5x931': 'https://doi.org/10.13039/100000166',
|
|
453
|
+
'https://.org/00apvva27': 'https://doi.org/10.13039/100005716',
|
|
454
|
+
'https://.org/04nseet23': 'https://doi.org/10.13039/100000179',
|
|
455
|
+
'https://.org/04k9mqs78': 'https://doi.org/10.13039/100000106',
|
|
456
|
+
'https://.org/01k638r21': 'https://doi.org/10.13039/100000089',
|
|
457
|
+
'https://.org/01gmp5538': 'https://doi.org/10.13039/100005447',
|
|
458
|
+
'https://.org/01vnjbg30': 'https://doi.org/10.13039/100005449',
|
|
459
|
+
'https://.org/03h7mcc28': 'https://doi.org/10.13039/100000088',
|
|
460
|
+
'https://.org/05wgkzg12': 'https://doi.org/10.13039/100000169',
|
|
461
|
+
'https://.org/0445wmv88': 'https://doi.org/10.13039/100000170',
|
|
462
|
+
'https://.org/02dz2hb46': 'https://doi.org/10.13039/100000077',
|
|
463
|
+
'https://.org/034m1ez10': 'https://doi.org/10.13039/100000107',
|
|
464
|
+
'https://.org/02a65dj82': 'https://doi.org/10.13039/100005717',
|
|
465
|
+
'https://.org/020fhsn68': 'https://doi.org/10.13039/100000001',
|
|
466
|
+
'https://.org/03z9hh605': 'https://doi.org/10.13039/100000174',
|
|
467
|
+
'https://.org/04ya3kq71': 'https://doi.org/10.13039/100007521',
|
|
468
|
+
'https://.org/04evh7y43': 'https://doi.org/10.13039/100005443',
|
|
469
|
+
'https://.org/04h67aa53': 'https://doi.org/10.13039/100000177',
|
|
470
|
+
'https://.org/025dabr11': 'https://doi.org/10.13039/100005446',
|
|
471
|
+
'https://.org/04vw0kz07': 'https://doi.org/10.13039/100005448',
|
|
472
|
+
'https://.org/054ydxh33': 'https://doi.org/10.13039/100005554',
|
|
473
|
+
'https://.org/01sharn77': 'https://doi.org/10.13039/100006091',
|
|
474
|
+
'https://.org/02ch5q898': 'https://doi.org/10.13039/100000001',
|
|
445
475
|
|
|
446
476
|
# NASA ID Crosswalk
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
477
|
+
'https://.org/0171mag52': 'https://doi.org/10.13039/100006198',
|
|
478
|
+
'https://.org/027k65916': 'https://doi.org/10.13039/100006196',
|
|
479
|
+
'https://.org/027ka1x80': 'https://doi.org/10.13039/100000104',
|
|
480
|
+
'https://.org/02acart68': 'https://doi.org/10.13039/100006195',
|
|
481
|
+
'https://.org/059fqnc42': 'https://doi.org/10.13039/100006193',
|
|
482
|
+
'https://.org/01cyfxe35': 'https://doi.org/10.13039/100016595',
|
|
483
|
+
'https://.org/04xx4z452': 'https://doi.org/10.13039/100006203',
|
|
484
|
+
'https://.org/0399mhs52': 'https://doi.org/10.13039/100006199',
|
|
485
|
+
'https://.org/02epydz83': 'https://doi.org/10.13039/100006197',
|
|
486
|
+
'https://.org/03j9e2j92': 'https://doi.org/10.13039/100006205',
|
|
487
|
+
'https://.org/02s42x260': 'https://doi.org/10.13039/100000104',
|
|
488
|
+
'https://.org/01p7gwa14': 'https://doi.org/10.13039/100000104',
|
|
489
|
+
'https://.org/01qxmdg18': 'https://doi.org/10.13039/100000104',
|
|
490
|
+
'https://.org/006ndaj41': 'https://doi.org/10.13039/100000104',
|
|
491
|
+
'https://.org/03em45j53': 'https://doi.org/10.13039/100007346',
|
|
492
|
+
'https://.org/045t78n53': 'https://doi.org/10.13039/100000104',
|
|
493
|
+
'https://.org/00r57r863': 'https://doi.org/10.13039/100000104',
|
|
494
|
+
'https://.org/0401vze59': 'https://doi.org/10.13039/100007726',
|
|
495
|
+
'https://.org/04hccab49': 'https://doi.org/10.13039/100000104',
|
|
496
|
+
'https://.org/04437j066': 'https://doi.org/10.13039/100000104',
|
|
497
|
+
'https://.org/028b18z22': 'https://doi.org/10.13039/100000104',
|
|
498
|
+
'https://.org/00ryjtt64': 'https://doi.org/10.13039/100000104',
|
|
469
499
|
|
|
470
500
|
# DOE ID Crosswalk
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
}
|
|
501
|
+
'https://ror.org/01bj3aw27': 'https://doi.org/10.13039/100000015',
|
|
502
|
+
'https://ror.org/03q1rgc19': 'https://doi.org/10.13039/100006133',
|
|
503
|
+
'https://ror.org/02xznz413': 'https://doi.org/10.13039/100006134',
|
|
504
|
+
'https://ror.org/03sk1we31': 'https://doi.org/10.13039/100006168',
|
|
505
|
+
'https://ror.org/00f93gc02': 'https://doi.org/10.13039/100006177',
|
|
506
|
+
'https://ror.org/05tj7dm33': 'https://doi.org/10.13039/100006147',
|
|
507
|
+
'https://ror.org/0012c7r22': 'https://doi.org/10.13039/100006192',
|
|
508
|
+
'https://ror.org/00mmn6b08': 'https://doi.org/10.13039/100006132',
|
|
509
|
+
'https://ror.org/03ery9d53': 'https://doi.org/10.13039/100006120',
|
|
510
|
+
'https://ror.org/033jmdj81': 'https://doi.org/10.13039/100000015',
|
|
511
|
+
'https://ror.org/03rd4h240': 'https://doi.org/10.13039/100006130',
|
|
512
|
+
'https://ror.org/0054t4769': 'https://doi.org/10.13039/100006200',
|
|
513
|
+
'https://ror.org/03eecgp81': 'https://doi.org/10.13039/100006174',
|
|
514
|
+
'https://ror.org/00heb4d89': 'https://doi.org/10.13039/100006135',
|
|
515
|
+
'https://ror.org/05ek3m339': 'https://doi.org/10.13039/100006150',
|
|
516
|
+
'https://ror.org/00km40770': 'https://doi.org/10.13039/100006138',
|
|
517
|
+
'https://ror.org/02ah1da87': 'https://doi.org/10.13039/100006137',
|
|
518
|
+
'https://ror.org/05hsv7e61': 'https://doi.org/10.13039/100000015',
|
|
519
|
+
'https://ror.org/01c9ay627': 'https://doi.org/10.13039/100006165',
|
|
520
|
+
'https://ror.org/04z2gev20': 'https://doi.org/10.13039/100006183',
|
|
521
|
+
'https://ror.org/02z1qvq09': 'https://doi.org/10.13039/100006144',
|
|
522
|
+
'https://ror.org/03jf3w726': 'https://doi.org/10.13039/100006186',
|
|
523
|
+
'https://ror.org/04848jz84': 'https://doi.org/10.13039/100006142',
|
|
524
|
+
'https://ror.org/04s778r16': 'https://doi.org/10.13039/100006171',
|
|
525
|
+
'https://ror.org/04nnxen11': 'https://doi.org/10.13039/100000015',
|
|
526
|
+
'https://ror.org/05csy5p27': 'https://doi.org/10.13039/100010268',
|
|
527
|
+
'https://ror.org/05efnac71': 'https://doi.org/10.13039/100000015'
|
|
528
|
+
}.freeze
|
|
499
529
|
end
|
|
500
530
|
end
|
|
531
|
+
# rubocop:enable Metrics/ClassLength
|
data/lib/uc3-dmp-id/version.rb
CHANGED