Class: Hashira::Duplication::Clusterer

Inherits:
Object
  • Object
show all
Defined in:
lib/hashira/duplication/clusterer.rb

Constant Summary collapse

PREFILTER =
12
BASE_MASS =
16
NEAR_MASS =
40
PAIR =
2
PENALTY_PER_RECURRENCE =
2

Instance Method Summary collapse

Constructor Details

#initialize(fragments) ⇒ Clusterer

Returns a new instance of Clusterer.



10
11
12
13
# File 'lib/hashira/duplication/clusterer.rb', line 10

def initialize(fragments)
  @fragments = fragments.select { |fragment| fragment.mass >= PREFILTER }
  @sets = Hashira::Duplication::UnionFind.new
end

Instance Method Details

#clustersObject



15
16
17
18
19
# File 'lib/hashira/duplication/clusterer.rb', line 15

def clusters
  @fragments.group_by(&:types).each_value { |group| chain(group) }
  Hashira::Duplication::NearMiss.new(@fragments).pairs.each { |left, right| @sets.union(left, right) }
  Hashira::Duplication::Maximal.new(sized).reduced
end