def is_table(self):
if self.type_counts["<STR_LIT:text>"] < <NUM_LIT:6> or "<STR_LIT>" in self.type_counts:<EOL><INDENT>return False<EOL><DEDENT>for e in self.elems:<EOL><INDENT>if elem_type(e) == "<STR_LIT>" and e.height * e.width > <NUM_LIT:100>:<EOL><INDENT>return False<EOL><DEDENT><DEDENT>if (<EOL>self.sum_elem_bbox / (self.height * self.width)<EOL>) > self.table_area_threshold:<EOL><INDENT>return False<EOL><DEDENT>has_many_x_align = False<EOL>has_many_y_align = False<EOL>for k, v in six.iteritems(self.feat_counts):<EOL><INDENT>font_key = k[<NUM_LIT:0>]<EOL>if (<EOL>v >= <NUM_LIT:2> and "<STR_LIT:->" in font_key<EOL>):  <EOL><INDENT>if font_key[-<NUM_LIT:2>] == "<STR_LIT:x>":<EOL><INDENT>has_many_x_align = True<EOL><DEDENT>if font_key[-<NUM_LIT:2>] == "<STR_LIT:y>":<EOL><INDENT>has_many_y_align = True<EOL><DEDENT><DEDENT><DEDENT>return has_many_x_align and has_many_y_align<EOL>
Count the node's number of mention al ignment in both axes to determine
if the node is a table.