def __init__(self, values, unknown=None): super(Labels, self).__init__() check.check_set(values) self.unknown = unknown self._empty = None self._encoding = {} self._decoding = {} labels_prefix = [] if unknown is not None: self._encoding[unknown] = 0 self._decoding[0] = self.unknown labels_prefix = [unknown] i = len(self._encoding) labels = sorted([label for label in values]) for value in labels: if unknown is None or value != unknown: self._encoding[check.check_not_none(value)] = i self._decoding[i] = value i += 1 assert len(self._encoding) == len(self._decoding), "%d != %d" % (len(self._encoding), len(self._decoding)) # Include unknown in the correct position if it's being represented in the labels. self._labels = labels_prefix + labels self._encoding_copy = {k: v for k, v in self._encoding.items()}
def encode(self, value, handle_unknown=False): try: return self._encoding[check.check_not_none(value)] except KeyError as e: if handle_unknown: return self._encoding[self.unknown] else: raise e
def encode(self, value, handle_oov=False): try: return self._encoding[check.check_not_none(value)] except KeyError as e: if handle_oov: return self._encoding[self.oov_mapper(value)] else: raise e
def __init__(self, values, special_values=None, oov_mapper=lambda word: None): super(Labels, self).__init__() check.check_set(values) check.check_set(special_values, noneable=True) self.oov_mapper = check.check_function(oov_mapper) self._empty = None self._encoding = {} self._decoding = {} labels_prefix = [] i = 0 if special_values is not None: for special in sorted(special_values): self._encoding[check.check_not_none(special)] = i self._decoding[i] = special labels_prefix += [special] i += 1 labels = sorted([label for label in values]) for value in labels: if value in self._encoding: raise ValueError( "values and special_values must be disjoint - found both to contain '%s'." % value) self._encoding[check.check_not_none(value)] = i self._decoding[i] = value i += 1 assert len(self._encoding) == len(self._decoding), "%d != %d" % (len( self._encoding), len(self._decoding)) # Include special values in the front of the labels. self._labels = labels_prefix + labels self._encoding_copy = {k: v for k, v in self._encoding.items()}
def __init__(self, values, unknown=None): check.check_instance(values, set) self.unknown = unknown self._empty = None self._encoding = {} self._decoding = {} if unknown is not None: self._encoding[unknown] = 0 self._decoding[0] = self.unknown i = len(self._encoding) for value in values: self._encoding[check.check_not_none(value)] = i self._decoding[i] = value i += 1
def decode(self, value): return self._decoding[check.check_not_none(value)]
def __init__(self, word): self.word = check.check_not_empty(check.check_not_none(word)) self.literal = canonicalize_word(word)