You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lexonomy_custom_editor/src/model/example_clusters.py

71 lines
2.0 KiB

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()