class ExampleClusters: def __init__(self): self.idxs = set() self.lists = {} @staticmethod def get_key(sense, example): sense_idx = sense.original_idx structure_name = example.get_structure() key = "{}-{}".format(sense_idx, structure_name) return key def _first_empty_cluster(self): idx = 1 while True: if idx not in self.idxs: self._register_index(idx) return idx idx += 1 def _register_index(self, idx): self.idxs.add(idx) def _rebuild_lists(self, model): self.lists = {} self.idxs = set() for sense in model.entry.senses: for example in sense.examples: structure = example.get_structure() cluster = example.get_cluster() if cluster is None: continue key = ExampleClusters.get_key(sense, example) if key not in self.lists: self.lists[key] = set() self.lists[key].add(cluster) self.idxs.add(cluster) for key in self.lists.keys(): self.lists[key] = sorted(self.lists[key], key=lambda x: int(x)) def _get_list(self, sense, example): key = ExampleClusters.get_key(sense, example) if key in self.lists: return self.lists[key] else: return [] @staticmethod def first_empty_cluster(): return ec._first_empty_cluster() @staticmethod def register_index(idx): return ec._register_index(idx) @staticmethod def rebuild_lists(model): return ec._rebuild_lists(model) @staticmethod def get_list(sense, example): return ec._get_list(sense, example) ec = ExampleClusters()