def labeller(landmarkables, group_label, label_func):
    """
    Takes a list of landmarkable objects and a group label indicating which
    set of landmarks should have semantic meaning attached to them.
    The labelling function will add a new landmark group to each object that
    have been semantically annotated.

    Parameters
    ----------
    landmarkables: list of :class:`menpo.landmark.base.Landmarkable`
        List of landmarkable objects
    group_label: string
        The group label of the landmark group to apply semantic labels to.
    label_func: func
        A labelling function taken from this module. ``func`` should take a
        :class:`menpo.landmark.base.LandmarkGroup` and
        return a new LandmarkGroup with semantic labels applied.

    Returns
    -------
    landmarkables : list of :class:`menpo.landmark.base.Landmarkable`
        The list of modified landmarkables (this is just for convenience,
        the list will actually be modified in place)
    """
    landmark_groups = [label_func(landmarkable.landmarks[group_label])
                       for landmarkable in landmarkables]

    for (lanmarkable, group) in zip(landmarkables, landmark_groups):
        lanmarkable.landmarks[group.group_label] = group

    return landmarkables