Class: Html2rss::AutoSource::Segmenter::Cluster::OverlapResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/auto_source/segmenter/cluster.rb

Overview

Filters layout wrapper groups and resolves 1-to-1 nested card wrappers.

Constant Summary collapse

MAX_GROUPS =

Cap pairwise work on dense class grids.

40

Instance Method Summary collapse

Constructor Details

#initialize(index:) ⇒ OverlapResolver

Returns a new instance of OverlapResolver.

Parameters:



88
89
90
91
92
# File 'lib/html2rss/auto_source/segmenter/cluster.rb', line 88

def initialize(index:)
  @index = index
  @layout_tags = SST::Tags::LAYOUT_NAMES
  @scorer = Scoring::ClusterScorer.new
end

Instance Method Details

#filter_1_to_1_overlap(groups) ⇒ Hash{String => Array<SST::Node>}

Parameters:

Returns:



105
106
107
108
109
110
111
112
113
114
115
# File 'lib/html2rss/auto_source/segmenter/cluster.rb', line 105

def filter_1_to_1_overlap(groups)
  discarded = {}
  groups.each_key do |cls_a|
    groups.each_key do |cls_b|
      next if cls_a == cls_b || discarded[cls_a] || discarded[cls_b]

      resolve_1_to_1_overlap(cls_a, cls_b, groups, discarded)
    end
  end
  groups.reject { |cls, _| discarded[cls] }
end

#filter_containers(groups) ⇒ Hash{String => Array<SST::Node>}

Parameters:

Returns:



96
97
98
99
100
101
# File 'lib/html2rss/auto_source/segmenter/cluster.rb', line 96

def filter_containers(groups)
  capped = cap_groups(groups)
  capped.reject do |cls_a, nodes_a|
    capped.any? { |cls_b, nodes_b| cls_a != cls_b && container_of?(nodes_a, nodes_b) }
  end
end