71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
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()
|