keyword_matcher 0.5.0 → 0.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: eca50e5c62bdaeea87511401010241d7680e90e994a5178174ea8ff73a413da9
4
- data.tar.gz: 88e5e6c5a51b83d41e7697420c1df4cc7688bcfd117213c58c7d43734ca2da4e
3
+ metadata.gz: 9193a0b98145b71457b73c624d518432ce50da959b6725d10bdc714aabd537ce
4
+ data.tar.gz: f2dfa8a1e7c48f711ee97369feec3633134283bae94b4d67f8a64b7e16799080
5
5
  SHA512:
6
- metadata.gz: 4810deef32717d2eaabc2a43e351c24f98c2ed400cd841a43a09289c56613840a26882e82db48e5272a9f8ada36fb798102e81d283f0dee329f180b31fd004bd
7
- data.tar.gz: b88391172b5053cf4b16f925c890ed7fa7dc063286d00d62749e43413bd97b7e5fd1103983967a94b7ad604fb3d5de2a169d8e879c71af383e5074e6e432112d
6
+ metadata.gz: b966edcfd13292288ddd392b403420685a4ec8f7bc82ede00cf8ad8acda8fe394848f8a73d4085ec85e557253821f83605a2dd347a5160c75f1fd732e531adc3
7
+ data.tar.gz: 5a5b3cb2c9e991a0677a34fab264171c3fe1aa297b513f265ecaf892db13a1475afe938baea1202d137b5059656c05bde54b1b6cdef52b708ce69aec622a576f
data/.rubocop.yml CHANGED
@@ -10,8 +10,6 @@ Lint/AmbiguousBlockAssociation:
10
10
  Enabled: false
11
11
  Lint/EmptyWhen:
12
12
  Enabled: false
13
- Style/MethodMissing:
14
- Enabled: false
15
13
  Style/SymbolProc:
16
14
  Enabled: false
17
15
  Style/NumericPredicate:
@@ -1,5 +1,4 @@
1
-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'keyword_matcher/version'
5
4
 
@@ -19,12 +18,12 @@ Gem::Specification.new do |spec|
19
18
  spec.bindir = 'exe'
20
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
20
  spec.require_paths = ['lib']
22
- spec.required_ruby_version = '>= 2.4.0'
21
+ spec.required_ruby_version = ['>= 2.4.0', '< 2.6.0']
23
22
 
24
23
  spec.add_runtime_dependency 'activesupport', '~> 5.0'
25
24
  spec.add_runtime_dependency 'damerau-levenshtein', '~> 1.3'
26
25
  spec.add_development_dependency 'bundler', '~> 1.16'
27
26
  spec.add_development_dependency 'rake', '~> 10.0'
28
27
  spec.add_development_dependency 'rspec', '~> 3.0'
29
- spec.add_development_dependency 'rubocop', '~> 0.49.0'
28
+ spec.add_development_dependency 'rubocop', '~> 0.61.1'
30
29
  end
@@ -26,6 +26,7 @@ module KeywordMatcher
26
26
 
27
27
  def not_groups
28
28
  return [] unless title.downcase.match?(/\r?\n#{OPERATOR_NOT}\r?\n/)
29
+
29
30
  title.downcase.match(/\r?\n#{OPERATOR_NOT}.*/m).to_s.split(/\r?\n#{OPERATOR_NOT}\r?\n/).map do |v|
30
31
  v.split("\n").reject(&:blank?).map(&:split)
31
32
  end.reject(&:blank?)
@@ -18,6 +18,7 @@ module KeywordMatcher
18
18
 
19
19
  def negation_found?
20
20
  return if group.not.blank?
21
+
21
22
  in_any?(group.not)
22
23
  end
23
24
 
@@ -26,8 +27,8 @@ module KeywordMatcher
26
27
  values.map do |terms|
27
28
  match = false
28
29
  terms.each do |term|
29
- words.each do |w|
30
- match = true if condition(term, w)
30
+ words.each do |word|
31
+ match = true if condition(term, word)
31
32
  end
32
33
  end
33
34
  match
@@ -35,14 +36,15 @@ module KeywordMatcher
35
36
  end.include?(true)
36
37
  end
37
38
 
38
- def matched?(term, w)
39
- return w == (quoted?(term) ? term[1..-2] : term) if precise?(term)
40
- ::DamerauLevenshtein.distance(term, w) <= FUZZINESS
39
+ def matched?(term, word)
40
+ return word == (quoted?(term) ? term[1..-2] : term) if precise?(term)
41
+
42
+ ::DamerauLevenshtein.distance(term, word) <= FUZZINESS
41
43
  end
42
44
 
43
- def condition(term, w)
45
+ def condition(term, word)
44
46
  synonym = find_synonym(term)
45
- synonym.present? ? (matched?(term, w) || matched?(synonym, w)) : matched?(term, w)
47
+ synonym.present? ? (matched?(term, word) || matched?(synonym, word)) : matched?(term, word)
46
48
  end
47
49
 
48
50
  def find_synonym(term)
@@ -2,9 +2,7 @@ module KeywordMatcher
2
2
  class Prophet
3
3
  attr_reader :phrase
4
4
 
5
- PRECISION = 0.5
6
- SPLIT = 0.2
7
- SEPARATOR = %r{[\s\(\)\/*:"'\\\/\$\.,=]+}
5
+ SEPARATOR = %r{[\s\(\)\/*:"#'\[\];<>\\\/\$\.,=]+}.freeze
8
6
  MEASURES = 'кг|г|л|мл|уп|ед|шт|мг|пак'.freeze
9
7
 
10
8
  def initialize(phrase)
@@ -15,19 +13,20 @@ module KeywordMatcher
15
13
  prepare
16
14
  .split(SEPARATOR)
17
15
  .map(&:strip)
18
- .map(&:downcase)
19
- .reject { |w| w =~ /\d{5,}/ }
20
16
  .reject(&:blank?)
21
17
  end
22
18
 
23
19
  def prepare
24
- phrase.gsub(/(\p{Ll}{2,})(\d+\S)/, '\1 \2') # split text contains > 1 character from digits
20
+ phrase.gsub(/\d{5,}/, '') # remove gteq five-digit
21
+ .gsub(/(\p{Ll}{2,})(\d+\S)/, '\1 \2') # split text contains > 1 character from digits
25
22
  .gsub(/%([\p{L}\d])/, '% \1') # add space after percents
26
23
  .gsub(/(\d)[\.,](\d)/, '\1-\2') # replace separator between digits from , or . to -
27
24
  .gsub(/(\d)[\.,\s]+(#{MEASURES})\.?/i, '\1\2') # replace gaps between numbers and measures
28
25
  .gsub(/(\p{Ll})(\p{Lu})/, '\1 \2') # split camelcase string
29
26
  .gsub(/(\d)-0+(#{MEASURES})/i, '\1\2') # remove trailing zeroes after measures
30
- .gsub(/([а-яa-z])(\d+)(#{MEASURES})/i, '\1 \2\3')
27
+ .gsub(/([а-яa-z])(\d+)(#{MEASURES})/i, '\1 \2\3') # add space between word and measure
28
+ .gsub(/(\d+)(#{MEASURES})([x|х])/i, '\1\2 \3') # add space before amount
29
+ .gsub(/([а-я])([a-z]{2,})/i, '\1 \2') # add space between alternating Russian English
31
30
  .downcase
32
31
  end
33
32
  end
@@ -1,3 +1,3 @@
1
1
  module KeywordMatcher
2
- VERSION = '0.5.0'.freeze
2
+ VERSION = '0.6.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keyword_matcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Novikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-27 00:00:00.000000000 Z
11
+ date: 2018-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.49.0
89
+ version: 0.61.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.49.0
96
+ version: 0.61.1
97
97
  description:
98
98
  email:
99
99
  - ivan.novikov@saltpepper.ru
@@ -132,6 +132,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
132
132
  - - ">="
133
133
  - !ruby/object:Gem::Version
134
134
  version: 2.4.0
135
+ - - "<"
136
+ - !ruby/object:Gem::Version
137
+ version: 2.6.0
135
138
  required_rubygems_version: !ruby/object:Gem::Requirement
136
139
  requirements:
137
140
  - - ">="