taxamatch_rb 1.0.1 → 1.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 +9 -0
- data/.rspec +3 -0
- data/.rubocop.yml +9 -0
- data/.travis.yml +10 -0
- data/CHANGELOG +3 -0
- data/CODE_OF_CONDUCT.md +31 -0
- data/Gemfile +2 -17
- data/LICENSE.txt +21 -0
- data/README.md +53 -26
- data/Rakefile +11 -40
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/taxamatch_rb/base.rb +154 -0
- data/lib/taxamatch_rb/version.rb +7 -0
- data/lib/taxamatch_rb.rb +12 -172
- data/taxamatch_rb.gemspec +30 -57
- metadata +124 -48
- data/Gemfile.lock +0 -86
- data/LICENSE +0 -20
- data/Makefile +0 -157
- data/VERSION +0 -1
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -22
- data/spec/taxamatch_rb_spec.rb +0 -406
- data/spec/taxamatch_test.txt +0 -46
    
        data/lib/taxamatch_rb.rb
    CHANGED
    
    | @@ -1,176 +1,16 @@ | |
| 1 | 
            -
            # encoding:  | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
            require  | 
| 7 | 
            -
            require  | 
| 8 | 
            -
            require  | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
            if RUBY_VERSION < '1.9.1'
         | 
| 13 | 
            -
              raise 'IMPORTANT: Parsley-store gem  requires ruby >= 1.9.1'
         | 
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
            require "taxamatch_rb/version"
         | 
| 3 | 
            +
            require "damerau-levenshtein"
         | 
| 4 | 
            +
            require "taxamatch_rb/base"
         | 
| 5 | 
            +
            require "taxamatch_rb/atomizer"
         | 
| 6 | 
            +
            require "taxamatch_rb/normalizer"
         | 
| 7 | 
            +
            require "taxamatch_rb/phonetizer"
         | 
| 8 | 
            +
            require "taxamatch_rb/authmatch"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            if RUBY_VERSION < "1.9.1"
         | 
| 11 | 
            +
              fail "IMPORTANT: taxamatch_rb gem requires ruby >= 1.9.1"
         | 
| 14 12 | 
             
            end
         | 
| 15 13 |  | 
| 14 | 
            +
            # Taxamatch provides fuzzy comparison between two scientific names
         | 
| 16 15 | 
             
            module Taxamatch
         | 
| 17 | 
            -
             | 
| 18 | 
            -
              class Base
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                def initialize
         | 
| 21 | 
            -
                  @parser = Taxamatch::Atomizer.new
         | 
| 22 | 
            -
                  @dlm = DamerauLevenshtein
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                # takes two scientific names and returns true
         | 
| 27 | 
            -
                # if names match and false if they don't
         | 
| 28 | 
            -
                def taxamatch(str1, str2, return_boolean = true)
         | 
| 29 | 
            -
                  preparsed_1 = @parser.parse(str1)
         | 
| 30 | 
            -
                  preparsed_2 = @parser.parse(str2)
         | 
| 31 | 
            -
                  match = taxamatch_preparsed(preparsed_1, preparsed_2) rescue nil
         | 
| 32 | 
            -
                  return_boolean ? (!!match && match['match']) : match
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                # takes two hashes of parsed scientific names, analyses them and
         | 
| 36 | 
            -
                # returns back this function is useful when species strings are preparsed.
         | 
| 37 | 
            -
                def taxamatch_preparsed(preparsed_1, preparsed_2)
         | 
| 38 | 
            -
                  result = nil
         | 
| 39 | 
            -
                  if preparsed_1[:uninomial] && preparsed_2[:uninomial]
         | 
| 40 | 
            -
                    result =  match_uninomial(preparsed_1, preparsed_2)
         | 
| 41 | 
            -
                  end
         | 
| 42 | 
            -
                  if preparsed_1[:genus] && preparsed_2[:genus]
         | 
| 43 | 
            -
                    result =  match_multinomial(preparsed_1, preparsed_2)
         | 
| 44 | 
            -
                  end
         | 
| 45 | 
            -
                  if result && result['match']
         | 
| 46 | 
            -
                    result['match'] = match_authors(preparsed_1, preparsed_2) == -1 ?
         | 
| 47 | 
            -
                      false : true
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
                  return result
         | 
| 50 | 
            -
                end
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                def match_uninomial(preparsed_1, preparsed_2)
         | 
| 53 | 
            -
                  match_genera(preparsed_1[:uninomial], preparsed_2[:uninomial])
         | 
| 54 | 
            -
                end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
                def match_multinomial(preparsed_1, preparsed_2)
         | 
| 57 | 
            -
                  gen_match = match_genera(preparsed_1[:genus], preparsed_2[:genus])
         | 
| 58 | 
            -
                  sp_match = match_species(preparsed_1[:species], preparsed_2[:species])
         | 
| 59 | 
            -
                  total_length = preparsed_1[:genus][:string].size +
         | 
| 60 | 
            -
                    preparsed_2[:genus][:string].size +
         | 
| 61 | 
            -
                    preparsed_1[:species][:string].size +
         | 
| 62 | 
            -
                    preparsed_2[:species][:string].size
         | 
| 63 | 
            -
                  if preparsed_1[:infraspecies] && preparsed_2[:infraspecies]
         | 
| 64 | 
            -
                    infrasp_match = match_species(preparsed_1[:infraspecies][0],
         | 
| 65 | 
            -
                                                  preparsed_2[:infraspecies][0])
         | 
| 66 | 
            -
                    total_length += preparsed_1[:infraspecies][0][:string].size +
         | 
| 67 | 
            -
                      preparsed_2[:infraspecies][0][:string].size
         | 
| 68 | 
            -
                    match_hash = match_matches(gen_match, sp_match, infrasp_match)
         | 
| 69 | 
            -
                  elsif (preparsed_1[:infraspecies] && !preparsed_2[:infraspecies]) ||
         | 
| 70 | 
            -
                    (!preparsed_1[:infraspecies] && preparsed_2[:infraspecies])
         | 
| 71 | 
            -
                    match_hash = { 'match' => false,
         | 
| 72 | 
            -
                      'edit_distance' => 5,
         | 
| 73 | 
            -
                      'phonetic_match' => false }
         | 
| 74 | 
            -
                    total_length += preparsed_1[:infraspecies] ?
         | 
| 75 | 
            -
                      preparsed_1[:infraspecies][0][:string].size :
         | 
| 76 | 
            -
                      preparsed_2[:infraspecies][0][:string].size
         | 
| 77 | 
            -
                  else
         | 
| 78 | 
            -
                    match_hash = match_matches(gen_match, sp_match)
         | 
| 79 | 
            -
                  end
         | 
| 80 | 
            -
                  match_hash.merge({ 'score' =>
         | 
| 81 | 
            -
                                   (1 - match_hash['edit_distance']/(total_length/2)) })
         | 
| 82 | 
            -
                  match_hash
         | 
| 83 | 
            -
                end
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                def match_genera(genus1, genus2, opts = {})
         | 
| 86 | 
            -
                  genus1_length = genus1[:normalized].size
         | 
| 87 | 
            -
                  genus2_length = genus2[:normalized].size
         | 
| 88 | 
            -
                  opts = { with_phonetic_match: true }.merge(opts)
         | 
| 89 | 
            -
                  min_length = [genus1_length, genus2_length].min
         | 
| 90 | 
            -
                  unless opts[:with_phonetic_match]
         | 
| 91 | 
            -
                    genus1[:phonetized] = 'A'
         | 
| 92 | 
            -
                    genus2[:phonetized] = 'B'
         | 
| 93 | 
            -
                  end
         | 
| 94 | 
            -
                  match = false
         | 
| 95 | 
            -
                  ed = @dlm.distance(genus1[:normalized],
         | 
| 96 | 
            -
                                     genus2[:normalized], 1, 3) #TODO put block = 2
         | 
| 97 | 
            -
                  return { 'edit_distance' => ed,
         | 
| 98 | 
            -
                    'phonetic_match' => false,
         | 
| 99 | 
            -
                    'match' => false } if ed/min_length.to_f > 0.2
         | 
| 100 | 
            -
                  return { 'edit_distance' => ed,
         | 
| 101 | 
            -
                    'phonetic_match' => true,
         | 
| 102 | 
            -
                    'match' => true } if genus1[:phonetized] == genus2[:phonetized]
         | 
| 103 | 
            -
             | 
| 104 | 
            -
                  match = true if ed <= 3 && (min_length > ed * 2) &&
         | 
| 105 | 
            -
                    (ed < 2 || genus1[0] == genus2[0])
         | 
| 106 | 
            -
                  { 'edit_distance' => ed, 'match' => match, 'phonetic_match' => false }
         | 
| 107 | 
            -
                end
         | 
| 108 | 
            -
             | 
| 109 | 
            -
                def match_species(sp1, sp2, opts = {})
         | 
| 110 | 
            -
                  sp1_length = sp1[:normalized].size
         | 
| 111 | 
            -
                  sp2_length = sp2[:normalized].size
         | 
| 112 | 
            -
                  opts = { with_phonetic_match: true }.merge(opts)
         | 
| 113 | 
            -
                  min_length = [sp1_length, sp2_length].min
         | 
| 114 | 
            -
                  unless opts[:with_phonetic_match]
         | 
| 115 | 
            -
                    sp1[:phonetized] = 'A'
         | 
| 116 | 
            -
                    sp2[:phonetized] = 'B'
         | 
| 117 | 
            -
                  end
         | 
| 118 | 
            -
                  sp1[:phonetized] = Taxamatch::Phonetizer.normalize_ending sp1[:phonetized]
         | 
| 119 | 
            -
                  sp2[:phonetized] = Taxamatch::Phonetizer.normalize_ending sp2[:phonetized]
         | 
| 120 | 
            -
                  match = false
         | 
| 121 | 
            -
                  ed = @dlm.distance(sp1[:normalized],
         | 
| 122 | 
            -
                                     sp2[:normalized], 1, 4) #TODO put block 4
         | 
| 123 | 
            -
                  return { 'edit_distance' => ed,
         | 
| 124 | 
            -
                    'phonetic_match' => false,
         | 
| 125 | 
            -
                    'match' => false } if ed/min_length.to_f > 0.3334
         | 
| 126 | 
            -
                  return {'edit_distance' => ed,
         | 
| 127 | 
            -
                    'phonetic_match' => true,
         | 
| 128 | 
            -
                    'match' => true} if sp1[:phonetized] == sp2[:phonetized]
         | 
| 129 | 
            -
             | 
| 130 | 
            -
                  match = true if ed <= 4 &&
         | 
| 131 | 
            -
                    (min_length >= ed * 2) &&
         | 
| 132 | 
            -
                    (ed < 2 || sp1[:normalized][0] == sp2[:normalized][0]) &&
         | 
| 133 | 
            -
                    (ed < 4 || sp1[:normalized][0...3] == sp2[:normalized][0...3])
         | 
| 134 | 
            -
                  { 'edit_distance' => ed, 'match' => match, 'phonetic_match' => false }
         | 
| 135 | 
            -
                end
         | 
| 136 | 
            -
             | 
| 137 | 
            -
                def match_authors(preparsed_1, preparsed_2)
         | 
| 138 | 
            -
                  p1 = { normalized_authors: [], years: [] }
         | 
| 139 | 
            -
                  p2 = { normalized_authors: [], years: [] }
         | 
| 140 | 
            -
                  if preparsed_1[:infraspecies] || preparsed_2[:infraspecies]
         | 
| 141 | 
            -
                    p1 = preparsed_1[:infraspecies].last if preparsed_1[:infraspecies]
         | 
| 142 | 
            -
                    p2 = preparsed_2[:infraspecies].last if preparsed_2[:infraspecies]
         | 
| 143 | 
            -
                  elsif preparsed_1[:species] || preparsed_2[:species]
         | 
| 144 | 
            -
                    p1 = preparsed_1[:species] if preparsed_1[:species]
         | 
| 145 | 
            -
                    p2 = preparsed_2[:species] if preparsed_2[:species]
         | 
| 146 | 
            -
                  elsif preparsed_1[:uninomial] && preparsed_2[:uninomial]
         | 
| 147 | 
            -
                    p1 = preparsed_1[:uninomial]
         | 
| 148 | 
            -
                    p2 = preparsed_2[:uninomial]
         | 
| 149 | 
            -
                  end
         | 
| 150 | 
            -
                  au1 = p1[:normalized_authors]
         | 
| 151 | 
            -
                  au2 = p2[:normalized_authors]
         | 
| 152 | 
            -
                  yr1 = p1[:years]
         | 
| 153 | 
            -
                  yr2 = p2[:years]
         | 
| 154 | 
            -
                  return 0 if au1.empty? || au2.empty?
         | 
| 155 | 
            -
                  score = Taxamatch::Authmatch.authmatch(au1, au2, yr1, yr2)
         | 
| 156 | 
            -
                  score == 0 ? -1 : 1
         | 
| 157 | 
            -
                end
         | 
| 158 | 
            -
             | 
| 159 | 
            -
                def match_matches(genus_match, species_match, infraspecies_match = nil)
         | 
| 160 | 
            -
                  match = species_match
         | 
| 161 | 
            -
                  if infraspecies_match
         | 
| 162 | 
            -
                    match['edit_distance'] += infraspecies_match['edit_distance']
         | 
| 163 | 
            -
                    match['match'] &&= infraspecies_match['match']
         | 
| 164 | 
            -
                    match['phonetic_match'] &&= infraspecies_match['phonetic_match']
         | 
| 165 | 
            -
                  end
         | 
| 166 | 
            -
                  match['edit_distance'] += genus_match['edit_distance']
         | 
| 167 | 
            -
                  if match['edit_distance'] > (infraspecies_match ? 6 : 4)
         | 
| 168 | 
            -
                    match['match'] = false
         | 
| 169 | 
            -
                  end
         | 
| 170 | 
            -
                  match['match'] &&= genus_match['match']
         | 
| 171 | 
            -
                  match['phonetic_match'] &&= genus_match['phonetic_match']
         | 
| 172 | 
            -
                  match
         | 
| 173 | 
            -
                end
         | 
| 174 | 
            -
             | 
| 175 | 
            -
              end
         | 
| 176 16 | 
             
            end
         | 
    
        data/taxamatch_rb.gemspec
    CHANGED
    
    | @@ -1,62 +1,35 @@ | |
| 1 | 
            -
            #  | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
            lib = File.expand_path('../lib', __FILE__)
         | 
| 3 | 
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            +
            require 'taxamatch_rb/version'
         | 
| 5 5 |  | 
| 6 | 
            -
            Gem::Specification.new do | | 
| 7 | 
            -
               | 
| 8 | 
            -
               | 
| 6 | 
            +
            Gem::Specification.new do |gem|
         | 
| 7 | 
            +
              gem.name          = "taxamatch_rb"
         | 
| 8 | 
            +
              gem.version       = Taxamatch::VERSION
         | 
| 9 | 
            +
              gem.authors       = ["Dmitry Mozzherin"]
         | 
| 10 | 
            +
              gem.email         = ["dmozzherin@gmail.com"]
         | 
| 9 11 |  | 
| 10 | 
            -
               | 
| 11 | 
            -
               | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
               | 
| 15 | 
            -
               | 
| 16 | 
            -
                "LICENSE",
         | 
| 17 | 
            -
                "README.md"
         | 
| 18 | 
            -
              ]
         | 
| 19 | 
            -
              s.files = [
         | 
| 20 | 
            -
                "CHANGELOG",
         | 
| 21 | 
            -
                "Gemfile",
         | 
| 22 | 
            -
                "Gemfile.lock",
         | 
| 23 | 
            -
                "LICENSE",
         | 
| 24 | 
            -
                "Makefile",
         | 
| 25 | 
            -
                "README.md",
         | 
| 26 | 
            -
                "Rakefile",
         | 
| 27 | 
            -
                "VERSION",
         | 
| 28 | 
            -
                "lib/taxamatch_rb.rb",
         | 
| 29 | 
            -
                "lib/taxamatch_rb/atomizer.rb",
         | 
| 30 | 
            -
                "lib/taxamatch_rb/authmatch.rb",
         | 
| 31 | 
            -
                "lib/taxamatch_rb/normalizer.rb",
         | 
| 32 | 
            -
                "lib/taxamatch_rb/phonetizer.rb",
         | 
| 33 | 
            -
                "spec/spec.opts",
         | 
| 34 | 
            -
                "spec/spec_helper.rb",
         | 
| 35 | 
            -
                "spec/taxamatch_rb_spec.rb",
         | 
| 36 | 
            -
                "spec/taxamatch_test.txt",
         | 
| 37 | 
            -
                "taxamatch_rb.gemspec"
         | 
| 38 | 
            -
              ]
         | 
| 39 | 
            -
              s.homepage = "http://github.com/GlobalNamesArchitecture/taxamatch_rb"
         | 
| 40 | 
            -
              s.require_paths = ["lib"]
         | 
| 41 | 
            -
              s.rubygems_version = "1.8.25"
         | 
| 42 | 
            -
              s.summary = "Implementation of Tony Rees Taxamatch algorithms"
         | 
| 12 | 
            +
              gem.summary       = %q{Fuzzy matching of scientific names}
         | 
| 13 | 
            +
              gem.description   = "The purpose of Taxamatch gem is to facilitate fuzzy" \
         | 
| 14 | 
            +
                                  "comparison of two scientific name renderings to find" \
         | 
| 15 | 
            +
                                  "out if they actually point to the same scientific name."
         | 
| 16 | 
            +
              gem.homepage      = "https://github.com/GlobalNamesArchitecture/taxamatch_rb"
         | 
| 17 | 
            +
              gem.license       = "MIT"
         | 
| 43 18 |  | 
| 44 | 
            -
               | 
| 45 | 
            -
             | 
| 19 | 
            +
              gem.files         = `git ls-files -z`.split("\x0").
         | 
| 20 | 
            +
                                  reject { |f| f.match(%r{^(test|spec|features)/}) }
         | 
| 21 | 
            +
              gem.bindir        = "exe"
         | 
| 22 | 
            +
              gem.executables   = gem.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 23 | 
            +
              gem.require_paths = ["lib"]
         | 
| 46 24 |  | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
                  s.add_runtime_dependency(%q<json>, ["~> 1.7.7"])
         | 
| 51 | 
            -
                else
         | 
| 52 | 
            -
                  s.add_dependency(%q<biodiversity>, ["~> 3.1.0"])
         | 
| 53 | 
            -
                  s.add_dependency(%q<damerau-levenshtein>, ["~> 0.5.4"])
         | 
| 54 | 
            -
                  s.add_dependency(%q<json>, ["~> 1.7.7"])
         | 
| 55 | 
            -
                end
         | 
| 56 | 
            -
              else
         | 
| 57 | 
            -
                s.add_dependency(%q<biodiversity>, ["~> 3.1.0"])
         | 
| 58 | 
            -
                s.add_dependency(%q<damerau-levenshtein>, ["~> 0.5.4"])
         | 
| 59 | 
            -
                s.add_dependency(%q<json>, ["~> 1.7.7"])
         | 
| 60 | 
            -
              end
         | 
| 61 | 
            -
            end
         | 
| 25 | 
            +
              gem.add_runtime_dependency "biodiversity", "~> 3.1"
         | 
| 26 | 
            +
              gem.add_runtime_dependency "damerau-levenshtein", "~> 1.0"
         | 
| 27 | 
            +
              gem.add_runtime_dependency "json", "~> 1.8"
         | 
| 62 28 |  | 
| 29 | 
            +
              gem.add_development_dependency "bundler", "~> 1.6"
         | 
| 30 | 
            +
              gem.add_development_dependency "rake", "~> 10.4"
         | 
| 31 | 
            +
              gem.add_development_dependency "rspec", "~> 3.2"
         | 
| 32 | 
            +
              gem.add_development_dependency "cucumber", "~> 2.0"
         | 
| 33 | 
            +
              gem.add_development_dependency "coveralls", "~> 0.8"
         | 
| 34 | 
            +
              gem.add_development_dependency "rubocop", "~> 0.30"
         | 
| 35 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,116 +1,192 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: taxamatch_rb
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0 | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 1.1.0
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - Dmitry Mozzherin
         | 
| 9 8 | 
             
            autorequire: 
         | 
| 10 | 
            -
            bindir:  | 
| 9 | 
            +
            bindir: exe
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 11 | 
            +
            date: 2015-04-21 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 14 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 14 | 
             
              name: biodiversity
         | 
| 16 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            -
                none: false
         | 
| 18 16 | 
             
                requirements:
         | 
| 19 | 
            -
                - - ~>
         | 
| 17 | 
            +
                - - "~>"
         | 
| 20 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            -
                    version: 3.1 | 
| 19 | 
            +
                    version: '3.1'
         | 
| 22 20 | 
             
              type: :runtime
         | 
| 23 21 | 
             
              prerelease: false
         | 
| 24 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                none: false
         | 
| 26 23 | 
             
                requirements:
         | 
| 27 | 
            -
                - - ~>
         | 
| 24 | 
            +
                - - "~>"
         | 
| 28 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            -
                    version: 3.1 | 
| 26 | 
            +
                    version: '3.1'
         | 
| 30 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 28 | 
             
              name: damerau-levenshtein
         | 
| 32 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            -
                none: false
         | 
| 34 30 | 
             
                requirements:
         | 
| 35 | 
            -
                - - ~>
         | 
| 31 | 
            +
                - - "~>"
         | 
| 36 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 37 | 
            -
                    version: 0 | 
| 33 | 
            +
                    version: '1.0'
         | 
| 38 34 | 
             
              type: :runtime
         | 
| 39 35 | 
             
              prerelease: false
         | 
| 40 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            -
                none: false
         | 
| 42 37 | 
             
                requirements:
         | 
| 43 | 
            -
                - - ~>
         | 
| 38 | 
            +
                - - "~>"
         | 
| 44 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 45 | 
            -
                    version: 0 | 
| 40 | 
            +
                    version: '1.0'
         | 
| 46 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 47 42 | 
             
              name: json
         | 
| 48 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            -
                none: false
         | 
| 50 44 | 
             
                requirements:
         | 
| 51 | 
            -
                - - ~>
         | 
| 45 | 
            +
                - - "~>"
         | 
| 52 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            -
                    version: 1. | 
| 47 | 
            +
                    version: '1.8'
         | 
| 54 48 | 
             
              type: :runtime
         | 
| 55 49 | 
             
              prerelease: false
         | 
| 56 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            -
                none: false
         | 
| 58 51 | 
             
                requirements:
         | 
| 59 | 
            -
                - - ~>
         | 
| 52 | 
            +
                - - "~>"
         | 
| 60 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: 1. | 
| 62 | 
            -
             | 
| 63 | 
            -
               | 
| 64 | 
            -
             | 
| 54 | 
            +
                    version: '1.8'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: bundler
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - "~>"
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '1.6'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - "~>"
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '1.6'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: rake
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - "~>"
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '10.4'
         | 
| 76 | 
            +
              type: :development
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - "~>"
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '10.4'
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: rspec
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - "~>"
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '3.2'
         | 
| 90 | 
            +
              type: :development
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - "~>"
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: '3.2'
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            +
              name: cucumber
         | 
| 99 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            +
                requirements:
         | 
| 101 | 
            +
                - - "~>"
         | 
| 102 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            +
                    version: '2.0'
         | 
| 104 | 
            +
              type: :development
         | 
| 105 | 
            +
              prerelease: false
         | 
| 106 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
                requirements:
         | 
| 108 | 
            +
                - - "~>"
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: '2.0'
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: coveralls
         | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - "~>"
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '0.8'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                requirements:
         | 
| 122 | 
            +
                - - "~>"
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            +
                    version: '0.8'
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              name: rubocop
         | 
| 127 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 | 
            +
                requirements:
         | 
| 129 | 
            +
                - - "~>"
         | 
| 130 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            +
                    version: '0.30'
         | 
| 132 | 
            +
              type: :development
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 | 
            +
                requirements:
         | 
| 136 | 
            +
                - - "~>"
         | 
| 137 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            +
                    version: '0.30'
         | 
| 139 | 
            +
            description: The purpose of Taxamatch gem is to facilitate fuzzycomparison of two
         | 
| 140 | 
            +
              scientific name renderings to findout if they actually point to the same scientific
         | 
| 141 | 
            +
              name.
         | 
| 142 | 
            +
            email:
         | 
| 143 | 
            +
            - dmozzherin@gmail.com
         | 
| 65 144 | 
             
            executables: []
         | 
| 66 145 | 
             
            extensions: []
         | 
| 67 | 
            -
            extra_rdoc_files:
         | 
| 68 | 
            -
            - LICENSE
         | 
| 69 | 
            -
            - README.md
         | 
| 146 | 
            +
            extra_rdoc_files: []
         | 
| 70 147 | 
             
            files:
         | 
| 148 | 
            +
            - ".gitignore"
         | 
| 149 | 
            +
            - ".rspec"
         | 
| 150 | 
            +
            - ".rubocop.yml"
         | 
| 151 | 
            +
            - ".travis.yml"
         | 
| 71 152 | 
             
            - CHANGELOG
         | 
| 153 | 
            +
            - CODE_OF_CONDUCT.md
         | 
| 72 154 | 
             
            - Gemfile
         | 
| 73 | 
            -
            -  | 
| 74 | 
            -
            - LICENSE
         | 
| 75 | 
            -
            - Makefile
         | 
| 155 | 
            +
            - LICENSE.txt
         | 
| 76 156 | 
             
            - README.md
         | 
| 77 157 | 
             
            - Rakefile
         | 
| 78 | 
            -
            -  | 
| 158 | 
            +
            - bin/console
         | 
| 159 | 
            +
            - bin/setup
         | 
| 79 160 | 
             
            - lib/taxamatch_rb.rb
         | 
| 80 161 | 
             
            - lib/taxamatch_rb/atomizer.rb
         | 
| 81 162 | 
             
            - lib/taxamatch_rb/authmatch.rb
         | 
| 163 | 
            +
            - lib/taxamatch_rb/base.rb
         | 
| 82 164 | 
             
            - lib/taxamatch_rb/normalizer.rb
         | 
| 83 165 | 
             
            - lib/taxamatch_rb/phonetizer.rb
         | 
| 84 | 
            -
            -  | 
| 85 | 
            -
            - spec/spec_helper.rb
         | 
| 86 | 
            -
            - spec/taxamatch_rb_spec.rb
         | 
| 87 | 
            -
            - spec/taxamatch_test.txt
         | 
| 166 | 
            +
            - lib/taxamatch_rb/version.rb
         | 
| 88 167 | 
             
            - taxamatch_rb.gemspec
         | 
| 89 | 
            -
            homepage:  | 
| 90 | 
            -
            licenses: | 
| 168 | 
            +
            homepage: https://github.com/GlobalNamesArchitecture/taxamatch_rb
         | 
| 169 | 
            +
            licenses:
         | 
| 170 | 
            +
            - MIT
         | 
| 171 | 
            +
            metadata: {}
         | 
| 91 172 | 
             
            post_install_message: 
         | 
| 92 173 | 
             
            rdoc_options: []
         | 
| 93 174 | 
             
            require_paths:
         | 
| 94 175 | 
             
            - lib
         | 
| 95 176 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 96 | 
            -
              none: false
         | 
| 97 177 | 
             
              requirements:
         | 
| 98 | 
            -
              - -  | 
| 178 | 
            +
              - - ">="
         | 
| 99 179 | 
             
                - !ruby/object:Gem::Version
         | 
| 100 180 | 
             
                  version: '0'
         | 
| 101 | 
            -
                  segments:
         | 
| 102 | 
            -
                  - 0
         | 
| 103 | 
            -
                  hash: 1177825761849915556
         | 
| 104 181 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 105 | 
            -
              none: false
         | 
| 106 182 | 
             
              requirements:
         | 
| 107 | 
            -
              - -  | 
| 183 | 
            +
              - - ">="
         | 
| 108 184 | 
             
                - !ruby/object:Gem::Version
         | 
| 109 185 | 
             
                  version: '0'
         | 
| 110 186 | 
             
            requirements: []
         | 
| 111 187 | 
             
            rubyforge_project: 
         | 
| 112 | 
            -
            rubygems_version:  | 
| 188 | 
            +
            rubygems_version: 2.4.5
         | 
| 113 189 | 
             
            signing_key: 
         | 
| 114 | 
            -
            specification_version:  | 
| 115 | 
            -
            summary:  | 
| 190 | 
            +
            specification_version: 4
         | 
| 191 | 
            +
            summary: Fuzzy matching of scientific names
         | 
| 116 192 | 
             
            test_files: []
         | 
    
        data/Gemfile.lock
    DELETED
    
    | @@ -1,86 +0,0 @@ | |
| 1 | 
            -
            GEM
         | 
| 2 | 
            -
              remote: https://rubygems.org/
         | 
| 3 | 
            -
              specs:
         | 
| 4 | 
            -
                activesupport (3.2.13)
         | 
| 5 | 
            -
                  i18n (= 0.6.1)
         | 
| 6 | 
            -
                  multi_json (~> 1.0)
         | 
| 7 | 
            -
                biodiversity (3.1.0)
         | 
| 8 | 
            -
                  parallel
         | 
| 9 | 
            -
                  parallel (~> 0.6)
         | 
| 10 | 
            -
                  rake (~> 10.0)
         | 
| 11 | 
            -
                  treetop
         | 
| 12 | 
            -
                  treetop (~> 1.4)
         | 
| 13 | 
            -
                  unicode_utils (~> 1.4)
         | 
| 14 | 
            -
                builder (3.2.0)
         | 
| 15 | 
            -
                columnize (0.3.6)
         | 
| 16 | 
            -
                cucumber (1.3.1)
         | 
| 17 | 
            -
                  builder (>= 2.1.2)
         | 
| 18 | 
            -
                  diff-lcs (>= 1.1.3)
         | 
| 19 | 
            -
                  gherkin (~> 2.12.0)
         | 
| 20 | 
            -
                  multi_json (~> 1.3)
         | 
| 21 | 
            -
                damerau-levenshtein (0.5.4)
         | 
| 22 | 
            -
                debugger (1.5.0)
         | 
| 23 | 
            -
                  columnize (>= 0.3.1)
         | 
| 24 | 
            -
                  debugger-linecache (~> 1.2.0)
         | 
| 25 | 
            -
                  debugger-ruby_core_source (~> 1.2.0)
         | 
| 26 | 
            -
                debugger-linecache (1.2.0)
         | 
| 27 | 
            -
                debugger-ruby_core_source (1.2.0)
         | 
| 28 | 
            -
                diff-lcs (1.2.4)
         | 
| 29 | 
            -
                gherkin (2.12.0)
         | 
| 30 | 
            -
                  multi_json (~> 1.3)
         | 
| 31 | 
            -
                git (1.2.5)
         | 
| 32 | 
            -
                i18n (0.6.1)
         | 
| 33 | 
            -
                jeweler (1.8.4)
         | 
| 34 | 
            -
                  bundler (~> 1.0)
         | 
| 35 | 
            -
                  git (>= 1.2.5)
         | 
| 36 | 
            -
                  rake
         | 
| 37 | 
            -
                  rdoc
         | 
| 38 | 
            -
                json (1.7.7)
         | 
| 39 | 
            -
                metaclass (0.0.1)
         | 
| 40 | 
            -
                mocha (0.13.3)
         | 
| 41 | 
            -
                  metaclass (~> 0.0.1)
         | 
| 42 | 
            -
                multi_json (1.7.3)
         | 
| 43 | 
            -
                parallel (0.7.0)
         | 
| 44 | 
            -
                polyglot (0.3.3)
         | 
| 45 | 
            -
                rake (10.0.4)
         | 
| 46 | 
            -
                rake-compiler (0.8.3)
         | 
| 47 | 
            -
                  rake
         | 
| 48 | 
            -
                rdoc (4.0.1)
         | 
| 49 | 
            -
                  json (~> 1.4)
         | 
| 50 | 
            -
                rspec (2.13.0)
         | 
| 51 | 
            -
                  rspec-core (~> 2.13.0)
         | 
| 52 | 
            -
                  rspec-expectations (~> 2.13.0)
         | 
| 53 | 
            -
                  rspec-mocks (~> 2.13.0)
         | 
| 54 | 
            -
                rspec-core (2.13.1)
         | 
| 55 | 
            -
                rspec-expectations (2.13.0)
         | 
| 56 | 
            -
                  diff-lcs (>= 1.1.3, < 2.0)
         | 
| 57 | 
            -
                rspec-mocks (2.13.1)
         | 
| 58 | 
            -
                ruby-prof (0.13.0)
         | 
| 59 | 
            -
                shoulda (3.5.0)
         | 
| 60 | 
            -
                  shoulda-context (~> 1.0, >= 1.0.1)
         | 
| 61 | 
            -
                  shoulda-matchers (>= 1.4.1, < 3.0)
         | 
| 62 | 
            -
                shoulda-context (1.1.1)
         | 
| 63 | 
            -
                shoulda-matchers (2.1.0)
         | 
| 64 | 
            -
                  activesupport (>= 3.0.0)
         | 
| 65 | 
            -
                treetop (1.4.14)
         | 
| 66 | 
            -
                  polyglot
         | 
| 67 | 
            -
                  polyglot (>= 0.3.1)
         | 
| 68 | 
            -
                unicode_utils (1.4.0)
         | 
| 69 | 
            -
             | 
| 70 | 
            -
            PLATFORMS
         | 
| 71 | 
            -
              ruby
         | 
| 72 | 
            -
             | 
| 73 | 
            -
            DEPENDENCIES
         | 
| 74 | 
            -
              biodiversity (~> 3.1.0)
         | 
| 75 | 
            -
              bundler (~> 1.3)
         | 
| 76 | 
            -
              cucumber (~> 1.3)
         | 
| 77 | 
            -
              damerau-levenshtein (~> 0.5.4)
         | 
| 78 | 
            -
              debugger (~> 1.5)
         | 
| 79 | 
            -
              jeweler (~> 1.8)
         | 
| 80 | 
            -
              json (~> 1.7.7)
         | 
| 81 | 
            -
              mocha (~> 0.13)
         | 
| 82 | 
            -
              rake (~> 10.0)
         | 
| 83 | 
            -
              rake-compiler (~> 0.8)
         | 
| 84 | 
            -
              rspec (~> 2.13)
         | 
| 85 | 
            -
              ruby-prof (~> 0.13)
         | 
| 86 | 
            -
              shoulda (~> 3.5)
         | 
    
        data/LICENSE
    DELETED
    
    | @@ -1,20 +0,0 @@ | |
| 1 | 
            -
            Copyright (c) 2009-2013 Marine Biological Laboratory
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 4 | 
            -
            a copy of this software and associated documentation files (the
         | 
| 5 | 
            -
            "Software"), to deal in the Software without restriction, including
         | 
| 6 | 
            -
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 7 | 
            -
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 8 | 
            -
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 9 | 
            -
            the following conditions:
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            The above copyright notice and this permission notice shall be
         | 
| 12 | 
            -
            included in all copies or substantial portions of the Software.
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 15 | 
            -
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 16 | 
            -
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 17 | 
            -
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 18 | 
            -
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 19 | 
            -
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 20 | 
            -
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         |