code: def find_field(self, messages):
          
          try:
              if self.backend == self.Backend.python:
                  self._py_find_field(messages)
              elif self.backend == self.Backend.cython:
                  self._cy_find_field(messages)
              elif self.backend == self.Backend.plainc:
                  self._c_find_field(messages)
              else:
                  raise ValueError("Unsupported backend {}".format(self.backend))
          except NotImplementedError:
              logger.info("Skipped {} because not implemented yet".format(self.__class__.__name__))
docs: Wrapper method selecting the backend to assign the protocol field.
          Various strategies are possible e.g.:
          1) Heuristics e.g. for Preamble
          2) Scoring based e.g. for Length
          3) Fulltext search for addresses based on participant subgroups
  
          :param messages: messages a field shall be searched for
          :type messages: list of Message