class GnListResolver::ResultProcessor
Processes data received from the GN Resolver
Attributes
input[R]
writer[R]
Public Class Methods
new(writer, stats, with_classification = false)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 8 def initialize(writer, stats, with_classification = false) @with_classification = with_classification @parser = ScientificNameParser.new @stats = stats @writer = writer @input = {} end
Public Instance Methods
process(result, original_data)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 16 def process(result, original_data) @original_data = original_data result.each do |d| d.results.empty? ? write_empty_result(d) : write_result(d) end end
Private Instance Methods
canonical(name_string)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 93 def canonical(name_string) parsed = @parser.parse(name_string)[:scientificName] return nil if parsed[:canonical].nil? || parsed[:hybrid] parsed[:canonical] rescue StandardError @parser = ScientificNameParser.new nil end
classification(result)
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/gn_list_resolver/result_processor.rb, line 109 def classification(result) return nil if result.classification.path.to_s.strip == "" path = result.classification.path.split("|") ranks_data = result.classification.path_ranks ranks = ranks_data ? ranks_data.split("|") : [] if path.size == ranks.size path = path.zip(ranks).map { |e| "#{e[0]}(#{e[1]})" } end path.join(", ") end
collect_stats(datum)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 49 def collect_stats(datum) match_type_min = datum.results.min_by { |d| d.match_type.score } match_type_value = if match_type_min.nil? MATCH_TYPE_EMPTY else match_type_min.match_type.kind.to_sym end @stats.stats[:matches][match_type_value] += 1 end
compile_empty_result(datum)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 31 def compile_empty_result(datum) res = @original_data[datum.supplied_id] res += [MATCH_TYPES[MATCH_TYPE_EMPTY], 0, datum.supplied_input, nil, nil, nil, nil, @input[datum.supplied_id][:rank], nil, nil, nil, nil, nil] res << nil if @with_classification res end
compile_result(datum, result, match_size)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 59 def compile_result(datum, result, match_size) @original_data[datum.supplied_id] + prepare_data(datum, result, match_size) end
current_name(result)
click to toggle source
rubocop:enable all
# File lib/gn_list_resolver/result_processor.rb, line 80 def current_name(result) if result.accepted_name.nil? result.name.value else result.accepted_name.name.value end end
matched_rank(result)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 102 def matched_rank(result) return nil unless result.classification.path_ranks result.classification.path_ranks.split("|").last end
prepare_data(datum, result, match_size)
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/gn_list_resolver/result_processor.rb, line 66 def prepare_data(datum, result, match_size) res = [MATCH_TYPES[result.match_type.kind.to_sym], match_size, datum.supplied_input, result.name.value, canonical(datum.supplied_input), result_canonical(result), result.match_type.edit_distance, @input[datum.supplied_id][:rank], matched_rank(result), result.synonym, current_name(result), result.score.value ? result.score.value.round(3) : nil, result.taxon_id] res << classification(result) if @with_classification res end
result_canonical(result)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 88 def result_canonical(result) return nil unless result.canonical_name result.canonical_name.value end
write_empty_result(datum)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 25 def write_empty_result(datum) @stats.stats[:matches][MATCH_TYPE_EMPTY] += 1 res = compile_empty_result(datum) @writer.write(res) end
write_result(datum)
click to toggle source
# File lib/gn_list_resolver/result_processor.rb, line 41 def write_result(datum) collect_stats(datum) match_size = datum.results.size datum.results.each do |result| @writer.write(compile_result(datum, result, match_size)) end end