inci_score 4.5.2 → 4.6.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 +4 -4
- data/config/catalog.yml +5 -0
- data/lib/inci_score/config.rb +0 -1
- data/lib/inci_score/ingredient.rb +11 -13
- data/lib/inci_score/recognizer_rules.rb +11 -4
- data/lib/inci_score/version.rb +1 -1
- metadata +1 -2
- data/config/cir +0 -6172
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7c1ec290c92d1fb34798dbd04ec8f93a6ad1db12fd124ff2f7d0c4a50c108aa7
|
|
4
|
+
data.tar.gz: dad169f8a2486aeeac3a22df47097235d965b9435350d4800d662c9022f0a36c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
data/lib/inci_score/config.rb
CHANGED
|
@@ -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
|
-
|
|
26
|
-
parenthesis
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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 <
|
|
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 +
|
|
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
|
|
data/lib/inci_score/version.rb
CHANGED
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.
|
|
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
|