inci_score 4.5.2 → 4.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b62e565ea7191b030ebcdf3b278130065ecb325743bf4ca618e0c8e7d7559a8
4
- data.tar.gz: 0fcbf56e6edb8a314c202200e89d8f53428b009472440d7a1e92815be90b9df9
3
+ metadata.gz: 7c1ec290c92d1fb34798dbd04ec8f93a6ad1db12fd124ff2f7d0c4a50c108aa7
4
+ data.tar.gz: dad169f8a2486aeeac3a22df47097235d965b9435350d4800d662c9022f0a36c
5
5
  SHA512:
6
- metadata.gz: 7f4040838f05e804090a2482d3b6ea03c1c4575e5133a0989af9f733c373f6c1c507426196fca5eba539c4fbe5c3322a62e623a1630c8ade6dfe2f056a616938
7
- data.tar.gz: c14b303bae2a60c0f16b1df28e95e77cf2b32caaa33086d8852edf8486dfccbaf29bb361a7d8c2150eb32a569890c84a812369f13bdd38f61df979a76f18abd2
6
+ metadata.gz: 34394e8b825952f6ff98696ba899592f23a0acd8e3b95331c1d645903ac9795569dc6e115ff1dca5df0ae4aee551b54aae0e32b91faa302b4338b4e37769d797
7
+ data.tar.gz: 1b932c8c80adfc5b0989383a7c31c7b78432890dd3b86c54c887b1d3146f6629332cb7abd16e50b70343113bf3beb76233f4cd0d77fd684e26e7377ca0a8ee7f
data/config/catalog.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  aqua: 0
3
3
  water: 0
4
+ aroma: 2
4
5
  parfum: 3
5
6
  fragrance: 3
6
7
  phosphatidylcholine: 1
@@ -1580,6 +1581,7 @@ fagus sylvatica: 0
1580
1581
  farnesol: 2
1581
1582
  farnesyl acetate: 0
1582
1583
  fast green fcf: 4
1584
+ fava tonka: 1
1583
1585
  fermented vegetable extract: 0
1584
1586
  ferric chloride: 0
1585
1587
  ferula assa foetida: 0
@@ -3370,6 +3372,7 @@ pentasodium aminotrimethylene phosphonate: 3
3370
3372
  pentasodium pentetate: 3
3371
3373
  pentasodium triphosphate: 2
3372
3374
  pentetic acid: 3
3375
+ pentylene glycol: 2
3373
3376
  perfluorodecalin: 3
3374
3377
  perfluoropolymethylisopropyl ether: 3
3375
3378
  perfluorotetralin: 3
@@ -4832,6 +4835,8 @@ thymus extract: 4
4832
4835
  thymus hydrolysate: 4
4833
4836
  thymus serpyllum: 0
4834
4837
  thymus vulgaris: 0
4838
+ thymus vulgaris leaf oil: 0
4839
+ thymus vulgaris leaf water: 0
4835
4840
  tilia americana: 0
4836
4841
  tilia cordata: 0
4837
4842
  tilia vulgaris: 0
@@ -5,7 +5,6 @@ require 'yaml'
5
5
  module InciScore
6
6
  module Config
7
7
  CATALOG = YAML::load_file(File::expand_path('../../../config/catalog.yml', __FILE__)).freeze
8
- CIR = File.readlines(File::expand_path('../../../config/cir', __FILE__)).freeze
9
8
  HAZARDS = YAML::load_file(File::expand_path('../../../config/hazards.yml', __FILE__)).freeze
10
9
  end
11
10
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  module InciScore
4
4
  class Ingredient
5
- SLASH = '/'
6
5
  SLASH_RULE = /(?<!ate)\//.freeze
7
6
  PARENTHESIS = %w[( ) [ ]].freeze
8
7
  PARENTHESIS_RULE = /(\(.+\)|\[.+\])/.freeze
@@ -11,24 +10,23 @@ module InciScore
11
10
 
12
11
  def initialize(raw)
13
12
  @raw = raw.to_s
14
- @values = fetch_values
13
+ @values = fetch_values.uniq
15
14
  freeze
16
15
  end
17
16
 
18
- def to_s
19
- values.join(SLASH)
20
- end
21
-
22
17
  private
23
18
 
24
19
  def fetch_values
25
- if parenthesis?
26
- parenthesis = PARENTHESIS.join
27
- parenthesis_values = raw.match(PARENTHESIS_RULE).captures.map { |c| c.delete(parenthesis) }
28
- deparenthesized = raw.sub(PARENTHESIS_RULE, '').sub(/\s{2,}/, ' ').strip
29
- [deparenthesized].concat(parenthesis_values)
30
- else
31
- raw.split(SLASH_RULE).map(&:strip)
20
+ [raw].tap do |vals|
21
+ if parenthesis?
22
+ parenthesis = PARENTHESIS.join
23
+ parenthesis_values = raw.match(PARENTHESIS_RULE).captures.map { |c| c.delete(parenthesis) }
24
+ deparenthesized = raw.sub(PARENTHESIS_RULE, '').sub(/\s{2,}/, ' ').strip
25
+ vals << deparenthesized
26
+ vals.concat(parenthesis_values)
27
+ else
28
+ vals.concat(raw.split(SLASH_RULE).map(&:strip))
29
+ end
32
30
  end
33
31
  end
34
32
 
@@ -28,24 +28,31 @@ module InciScore
28
28
  extend self
29
29
 
30
30
  Result = Struct.new(:name, :distance, :score) do
31
- def tolerable?(size)
32
- distance < TOLERANCE && distance <= (size-1)
31
+ def tolerable?(size, tolerance)
32
+ distance < tolerance && distance <= (size-1)
33
33
  end
34
34
  end
35
35
 
36
36
  def call(src)
37
37
  return if src.empty?
38
38
  size = src.size
39
+ t = tolerance(size)
39
40
  farthest = Result.new(nil, size)
40
41
  initial = src[0]
41
42
  result = Config::CATALOG.reduce(farthest) do |nearest, (name, score)|
42
43
  next nearest unless name.start_with?(initial)
43
- next nearest if name.size > (size + TOLERANCE)
44
+ next nearest if name.size > (size + t)
44
45
  d = src.distance(name)
45
46
  nearest = Result.new(name, d, score) if d < nearest.distance
46
47
  nearest
47
48
  end
48
- Component.new(result.name, result.score) if result.tolerable?(size)
49
+ Component.new(result.name, result.score) if result.tolerable?(size, t)
50
+ end
51
+
52
+ private
53
+
54
+ def tolerance(size)
55
+ Math.log(size, 1.8).round
49
56
  end
50
57
  end
51
58
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InciScore
4
- VERSION = '4.5.2'
4
+ VERSION = '4.6.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inci_score
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.2
4
+ version: 4.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - costajob
@@ -106,7 +106,6 @@ files:
106
106
  - README.md
107
107
  - bin/inci_score
108
108
  - config/catalog.yml
109
- - config/cir
110
109
  - config/hazards.yml
111
110
  - ext/levenshtein.c
112
111
  - lib/inci_score.rb