docs: def _get_column_boundaries(self):
          '''Use the guessed ends to guess the boundaries of the plain
          text columns.
          '''
          # Try to figure out the most common column boundaries.
          ends = self._get_column_ends()
          if not ends:
              # If there aren't even any nontrivial sequences of whitespace
              # dividing text, there may be just one column. In which case,
              # Return a single span, effectively the whole line.
              return [slice(None, None)]
  
          most_common = []
          threshold = self.threshold
          for k, v in collections.Counter(ends.values()).most_common():
              if k >= threshold:
                  most_common.append(k)
  
          if most_common:
              boundaries = []
              for k, v in ends.items():
                  if v in most_common:
                      boundaries.append(k)
          else:
              # Here there weren't enough boundaries to guess the most common
              # ones, so just use the apparent boundaries. In other words, we
              # have only 1 row. Potentially a source of inaccuracy.
              boundaries = ends.keys()
  
          # Convert the boundaries into a list of span slices.
          boundaries.sort()
          last_boundary = boundaries[-1]
          boundaries = zip([0] + boundaries, boundaries)
          boundaries = list(itertools.starmap(slice, boundaries))
  
          # And get from the last boundary to the line ending.
          boundaries.append(slice(last_boundary, None))
          return boundaries