def eliminate_insiders(components): '''eliminates all components whose bounding boxes lie inside of others. The components object is manipulated in place Args: components: Components instance ''' by_size = by_bbox_size(components) labels = DisjointSet(n_labels=len(by_size)) # pairwise check of bounding boxes. once per pair. for a in range(len(by_size)): for b in range(a + 1, len(by_size)): if is_inside(by_size[a], by_size[b]): labels.unite(a, b) survivors = labels.final_labels() components.chars = [by_size[i] for i in survivors] return