def get_block_relation_features(self, block1: SimpleBlock, block2: SimpleBlock): features = [] # Add block 1 type features.extend([0] * BasicBlockType.block_type_count()) features[block1.get_block_type().get_best_type().id()] = 1 # Add block 2 type features.extend([0] * BasicBlockType.block_type_count()) features[block2.get_block_type().get_best_type().id() + BasicBlockType.block_type_count()] = 1 # Are 2 blocks adjacent features.append(block1.is_adjacent(block2)) # Are 2 blocks separated by 1 row/column features.append(block1.are_blocks_within_x_row_or_column(2, block2)) # Are 2 blocks separated by 4 rows/columns features.append(block1.are_blocks_within_x_row_or_column(5, block2)) # Are 2 blocks horizontal features.append(block1.are_blocks_horizontal(block2)) # Are 2 blocks vertical features.append(block1.are_blocks_vertical(block2)) # Do the blocks have a block in between # cannot compute with this input # TODO: Does the block have any adjacent blocks? Important? return features
def add_mapping(self, label1, block1: SimpleBlock, label2, block2: SimpleBlock): mapping_type = "dimension_mapping" mapping = dict() mapping['type'] = mapping_type mapped_dimension = -1 if block1.are_blocks_vertical(block2): mapped_dimension = 1 elif block1.are_blocks_horizontal(block2): mapped_dimension = 0 mapping['value'] = "{}:{} <-> {}:{}".format(label1, mapped_dimension, label2, mapped_dimension) self.annotation['relationships']['mappings'].append(mapping)