abstractor 4.4.2 → 4.4.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 07d9074db71c7f0389203998331177b329015321
4
- data.tar.gz: 266b2bfeb642c6613ff23e12da66d904c90723f9
3
+ metadata.gz: 8e287ee46744b138166b5013a594f17488f48592
4
+ data.tar.gz: 00931cda0cb5d0d6fc03c263cf26da3fe130c120
5
5
  SHA512:
6
- metadata.gz: fa9449c55a6b1600596d86fbaa55da291955a17e71a8f463cfa386687270e04654339d0e2e39441fbf7a418fb06d5e835124412c79092ae1ba6df6f092a2dd97
7
- data.tar.gz: 1628fd3acdc7f26b12325cfb6666fed656937386faee9bb2b5de865f7d0744a2227e008f146fe2c454a7bfc450102f0ab74572f1a398e98023eb5a8be4507fa7
6
+ metadata.gz: 697b42f689aa4d88915d5431d62f96255bb16bab03166a0a2ae55bbee53f437be36cb8661c97e6f41c45797fb9d3ec52d4f8f762ab495571c43e8130fef948e0
7
+ data.tar.gz: 297cbf1b6752fec3e279bd22d48abc634f911278ca3738d2dc36e6ba2079fb512aa762a32b7197309d24a66628377cd0e0ea666036d4f2c908023d41fab3ad6e
@@ -253,104 +253,127 @@ module Abstractor
253
253
  abstractor_text = Abstractor::AbstractorAbstractionSource.abstractor_text(source)
254
254
  parser = Abstractor::Parser.new(abstractor_text)
255
255
 
256
+ sentences = []
257
+ # get all matching sentences
256
258
  abstractor_abstraction_schema.predicate_variants.each do |predicate_variant|
257
259
  ranges = parser.range_all(Regexp.escape(predicate_variant), word_boundary: false)
258
260
  ranges.each do |range|
259
261
  sentence = parser.find_sentence(range)
260
- if sentence
261
- is_abstracted = abstract_canonical_name_value(about, abstractor_abstraction, abstractor_abstraction_source, source, parser, sentence, predicate_variant)
262
- abstract_sentential_name_value(about, abstractor_abstraction, abstractor_abstraction_source, source, parser, sentence, predicate_variant) unless is_abstracted
263
- end
262
+ sentences << sentence if sentence
264
263
  end
265
264
  end
265
+ sentences.uniq.each do |sentence|
266
+ skip_sentinental = abstract_canonical_name_value(about, abstractor_abstraction, abstractor_abstraction_source, source, parser, sentence)
267
+ abstract_sentential_name_value(about, abstractor_abstraction, abstractor_abstraction_source, source, parser, sentence) unless skip_sentinental
268
+ end
266
269
  end
267
270
  create_unknown_abstractor_suggestion_name_only(about, abstractor_abstraction, abstractor_abstraction_source)
268
271
  create_unknown_abstractor_suggestion(about, abstractor_abstraction, abstractor_abstraction_source)
269
272
  end
270
273
 
271
- def abstract_canonical_name_value(about, abstractor_abstraction, abstractor_abstraction_source, source, parser, sentence, predicate_variant)
272
- is_abstracted = false
273
- if abstractor_abstraction_schema.abstractor_object_type && (abstractor_abstraction_schema.abstractor_object_type.number? || abstractor_abstraction_schema.abstractor_object_type.number_list?)
274
- object_regex = Abstractor::Enum::NUMERIC_REGEX
274
+ def abstract_canonical_name_value(about, abstractor_abstraction, abstractor_abstraction_source, source, parser, sentence)
275
+ skip_sentinental = false
276
+ abstractor_abstraction_schema.predicate_variants.each do |predicate_variant|
277
+ if abstractor_abstraction_schema.abstractor_object_type && (abstractor_abstraction_schema.abstractor_object_type.number? || abstractor_abstraction_schema.abstractor_object_type.number_list?)
278
+ object_regex = Abstractor::Enum::NUMERIC_REGEX
275
279
 
276
- match_values = ["#{Regexp.escape(predicate_variant)}:\s*#{object_regex}", "#{Regexp.escape(predicate_variant)}#{object_regex}"]
277
- match_values.each do |match_value|
278
- matches = parser.sentence_match_scan(sentence[:sentence], match_value, word_boundary: true).uniq
279
- if abstractor_abstraction_schema.abstractor_object_type.number_list?
280
- # filter matched numbers by list of available values
281
- abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
282
- abstractor_object_value.object_variants.each do |object_variant|
283
- matches.each do |match|
284
- if object_variant == match[:object_value]
285
- suggest(abstractor_abstraction, abstractor_abstraction_source, match.to_s, match.to_s, source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], abstractor_object_value, nil, nil, nil, nil)
280
+ match_values = ["#{Regexp.escape(predicate_variant)}:\s*#{object_regex}", "#{Regexp.escape(predicate_variant)}#{object_regex}"]
281
+ match_values.each do |match_value|
282
+ matches = parser.sentence_match_scan(sentence[:sentence], match_value, word_boundary: true).uniq
283
+ if abstractor_abstraction_schema.abstractor_object_type.number_list?
284
+ # filter matched numbers by list of available values
285
+ abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
286
+ abstractor_object_value.object_variants.each do |object_variant|
287
+ matches.each do |match|
288
+ if object_variant == match[:object_value]
289
+ skip_sentinental = suggest(abstractor_abstraction, abstractor_abstraction_source, match.to_s, match.to_s, source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], abstractor_object_value, nil, nil, nil, nil)
290
+ end
286
291
  end
287
292
  end
288
293
  end
289
- end
290
- else
291
- matches.each do |match|
292
- is_abstracted = suggest(abstractor_abstraction, abstractor_abstraction_source, match.to_s, match.to_s, source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], match[:object_value], nil, nil, nil, nil)
294
+ else
295
+ matches.each do |match|
296
+ skip_sentinental = suggest(abstractor_abstraction, abstractor_abstraction_source, match.to_s, match.to_s, source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], match[:object_value], nil, nil, nil, nil)
297
+ end
293
298
  end
294
299
  end
295
- end
296
- else
297
- abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
298
- abstractor_object_value.object_variants.each do |object_variant|
299
- match_values = ["#{Regexp.escape(predicate_variant)}:\s*#{Regexp.escape(object_variant)}", "#{Regexp.escape(predicate_variant)}#{Regexp.escape(object_variant)}"]
300
- match_values.each do |match_value|
301
- matches = parser.sentence_scan(sentence[:sentence], match_value, word_boundary: true).uniq
302
- matches.each do |match|
303
- is_abstracted = suggest(abstractor_abstraction, abstractor_abstraction_source, match, match, source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], abstractor_object_value, nil, nil, nil, nil)
300
+ else
301
+ abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
302
+ abstractor_object_value.object_variants.each do |object_variant|
303
+ match_values = ["#{Regexp.escape(predicate_variant)}:\s*#{Regexp.escape(object_variant)}", "#{Regexp.escape(predicate_variant)}#{Regexp.escape(object_variant)}"]
304
+ match_values.each do |match_value|
305
+ matches = parser.sentence_scan(sentence[:sentence], match_value, word_boundary: true).uniq
306
+ matches.each do |match|
307
+ suggest(abstractor_abstraction, abstractor_abstraction_source, match, match, source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], abstractor_object_value, nil, nil, nil, nil)
308
+ end
304
309
  end
305
310
  end
306
311
  end
307
312
  end
308
313
  end
309
- is_abstracted
314
+ skip_sentinental
310
315
  end
311
316
 
312
- def abstract_sentential_name_value(about, abstractor_abstraction, abstractor_abstraction_source, source, parser, sentence, predicate_variant)
313
- is_abstracted = false
314
- if abstractor_abstraction_schema.abstractor_object_type && (abstractor_abstraction_schema.abstractor_object_type.number? || abstractor_abstraction_schema.abstractor_object_type.number_list?)
315
- object_regex = object_regex = Abstractor::Enum::NUMERIC_REGEX
316
- match = parser.match_sentence(sentence[:sentence], object_regex)
317
- if match
318
- scoped_sentence = Abstractor::NegationDetection.parse_negation_scope(sentence[:sentence])
319
- reject = (
320
- Abstractor::NegationDetection.negated_match_value?(scoped_sentence[:scoped_sentence], predicate_variant) ||
321
- Abstractor::NegationDetection.manual_negated_match_value?(sentence[:sentence], predicate_variant) ||
322
- Abstractor::NegationDetection.negated_match_value?(scoped_sentence[:scoped_sentence], match[:object_value]) ||
323
- Abstractor::NegationDetection.manual_negated_match_value?(sentence[:sentence], match[:object_value])
324
- )
325
- if !reject
326
- if abstractor_abstraction_schema.abstractor_object_type.number_list?
327
- # filter matched numbers by list of available values
328
- abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
329
- abstractor_object_value.object_variants.each do |object_variant|
330
- if object_variant == match[:object_value]
331
- suggest(abstractor_abstraction, abstractor_abstraction_source, sentence[:sentence], sentence[:sentence], source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], abstractor_object_value, nil, nil, nil, nil)
332
- end
317
+ def abstract_sentential_name_value(about, abstractor_abstraction, abstractor_abstraction_source, source, parser, sentence)
318
+ abstractor_abstraction_schema.predicate_variants.each do |predicate_variant|
319
+ if match = parser.match_sentence(sentence[:sentence], predicate_variant)
320
+ if abstractor_abstraction_schema.abstractor_object_type && (abstractor_abstraction_schema.abstractor_object_type.number? || abstractor_abstraction_schema.abstractor_object_type.number_list?)
321
+ object_regex = object_regex = Abstractor::Enum::NUMERIC_REGEX
322
+ filtered_matches = parser.sentence_match_scan(sentence[:sentence], object_regex).reject{|m| m.begin(0) > match.begin(0) && m.end(0) < match.end(0)}
323
+ if filtered_matches.any?
324
+ closest_post_match = filtered_matches.select{|m| m.begin(0) > match.end(0)}.first
325
+ closest_pre_match = filtered_matches.select{|m| m.end(0) < match.begin(0)}.last
326
+
327
+ closest_match = nil
328
+ if closest_post_match && closest_pre_match
329
+ if closest_post_match.begin(0) - match.end(0) > match.begin(0) - closest_pre_match.end(0) and sentence[:sentence][closest_pre_match.end(0)..match.begin(0)] !~ /[,;]/
330
+ closest_match = closest_pre_match
331
+ else
332
+ closest_match = closest_post_match
333
333
  end
334
+ else
335
+ closest_match = closest_post_match
336
+ closest_match ||= closest_pre_match
334
337
  end
335
- else
336
- is_abstracted = suggest(abstractor_abstraction, abstractor_abstraction_source, sentence[:sentence], sentence[:sentence], source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], match[:object_value], nil, nil, nil, nil)
337
- end
338
- end
339
- end
340
- else
341
- abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
342
- abstractor_object_value.object_variants.each do |object_variant|
343
- match = parser.match_sentence(sentence[:sentence], Regexp.escape(object_variant))
344
- if match
338
+
345
339
  scoped_sentence = Abstractor::NegationDetection.parse_negation_scope(sentence[:sentence])
346
340
  reject = (
347
341
  Abstractor::NegationDetection.negated_match_value?(scoped_sentence[:scoped_sentence], predicate_variant) ||
348
342
  Abstractor::NegationDetection.manual_negated_match_value?(sentence[:sentence], predicate_variant) ||
349
- Abstractor::NegationDetection.negated_match_value?(scoped_sentence[:scoped_sentence], object_variant) ||
350
- Abstractor::NegationDetection.manual_negated_match_value?(sentence[:sentence], object_variant)
343
+ Abstractor::NegationDetection.negated_match_value?(scoped_sentence[:scoped_sentence], closest_match[:object_value]) ||
344
+ Abstractor::NegationDetection.manual_negated_match_value?(sentence[:sentence], closest_match[:object_value])
351
345
  )
352
346
  if !reject
353
- is_abstracted = suggest(abstractor_abstraction, abstractor_abstraction_source, sentence[:sentence], sentence[:sentence], source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], abstractor_object_value, nil, nil, nil, nil)
347
+ if abstractor_abstraction_schema.abstractor_object_type.number_list?
348
+ # filter matched numbers by list of available values
349
+ abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
350
+ abstractor_object_value.object_variants.each do |object_variant|
351
+ if object_variant == closest_match[:object_value]
352
+ suggest(abstractor_abstraction, abstractor_abstraction_source, sentence[:sentence], sentence[:sentence], source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], abstractor_object_value, nil, nil, nil, nil)
353
+ end
354
+ end
355
+ end
356
+ else
357
+ suggest(abstractor_abstraction, abstractor_abstraction_source, sentence[:sentence], sentence[:sentence], source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], closest_match[:object_value], nil, nil, nil, nil)
358
+ end
359
+ end
360
+ end
361
+ else
362
+ abstractor_abstraction_schema.abstractor_object_values.each do |abstractor_object_value|
363
+ abstractor_object_value.object_variants.each do |object_variant|
364
+ match = parser.match_sentence(sentence[:sentence], Regexp.escape(object_variant))
365
+ if match
366
+ scoped_sentence = Abstractor::NegationDetection.parse_negation_scope(sentence[:sentence])
367
+ reject = (
368
+ Abstractor::NegationDetection.negated_match_value?(scoped_sentence[:scoped_sentence], predicate_variant) ||
369
+ Abstractor::NegationDetection.manual_negated_match_value?(sentence[:sentence], predicate_variant) ||
370
+ Abstractor::NegationDetection.negated_match_value?(scoped_sentence[:scoped_sentence], object_variant) ||
371
+ Abstractor::NegationDetection.manual_negated_match_value?(sentence[:sentence], object_variant)
372
+ )
373
+ if !reject
374
+ suggest(abstractor_abstraction, abstractor_abstraction_source, sentence[:sentence], sentence[:sentence], source[:source_id], source[:source_type].to_s, source[:source_method], source[:section_name], abstractor_object_value, nil, nil, nil, nil)
375
+ end
376
+ end
354
377
  end
355
378
  end
356
379
  end
@@ -1,3 +1,3 @@
1
1
  module Abstractor
2
- VERSION = '4.4.2'
2
+ VERSION = '4.4.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abstractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.2
4
+ version: 4.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Gurley, Yulia Bushmanova
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-02 00:00:00.000000000 Z
11
+ date: 2015-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails