docs: def is_table(self):
          """
          Count the node's number of mention al ignment in both axes to determine
          if the node is a table.
          """
          if self.type_counts["text"] < 6 or "figure" in self.type_counts:
              return False
          for e in self.elems:
              # Characters written as curve are usually small, discard diagrams here
              if elem_type(e) == "curve" and e.height * e.width > 100:
                  return False
          # import re
          # space_re = '\\s+'
          # ws_arr = []
          # whitespace_aligned = False
          # for elem in self.elems:
          #     elem_ws = []
          #     for m in re.finditer(space_re, elem.get_text()):
          #         elem_ws.append(m.start())
          #     # print elem, elem_ws
          #     if(len(elem_ws)>0):
          #         ws_arr.append(elem_ws)
          # # print ws_arr
          # if(len(ws_arr)>0):
          #     count_arr = max([ws_arr.count(i) for i in ws_arr])
          #     if(float(count_arr)/len(ws_arr) > 0.75):
          #         return True
          if (
              self.sum_elem_bbox / (self.height * self.width)
          ) > self.table_area_threshold:
              return False
          has_many_x_align = False
          has_many_y_align = False
          for k, v in six.iteritems(self.feat_counts):
              font_key = k[0]
              if (
                  v >= 2 and "-" in font_key
              ):  # Text row or column with more than 2 elements
                  if font_key[-2] == "x":
                      has_many_x_align = True
                  if font_key[-2] == "y":
                      has_many_y_align = True
          return has_many_x_align and has_many_y_align