def to_dict(self): from nomenklatura.model.entity import Entity num_aliases = Entity.all(self).filter(Entity.canonical_id!=None).count() num_review = Entity.all(self).filter_by(reviewed=False).count() num_entities = Entity.all(self).count() num_invalid = Entity.all(self).filter_by(invalid=True).count() return { 'id': self.id, 'name': self.name, 'label': self.label, 'owner': self.owner.to_dict(), 'stats': { 'num_aliases': num_aliases, 'num_entities': num_entities, 'num_review': num_review, 'num_invalid': num_invalid }, 'ignore_case': self.ignore_case, 'match_aliases': self.match_aliases, 'public_edit': self.public_edit, 'normalize_text': self.normalize_text, 'enable_invalid': self.enable_invalid, 'created_at': self.created_at, 'updated_at': self.updated_at }
def to_dict(self): from nomenklatura.model.entity import Entity num_aliases = Entity.all(self).filter( Entity.canonical_id != None).count() num_review = Entity.all(self).filter_by(reviewed=False).count() num_entities = Entity.all(self).count() num_invalid = Entity.all(self).filter_by(invalid=True).count() return { 'id': self.id, 'name': self.name, 'label': self.label, 'owner': self.owner.to_dict(), 'stats': { 'num_aliases': num_aliases, 'num_entities': num_entities, 'num_review': num_review, 'num_invalid': num_invalid }, 'ignore_case': self.ignore_case, 'match_aliases': self.match_aliases, 'public_edit': self.public_edit, 'normalize_text': self.normalize_text, 'enable_invalid': self.enable_invalid, 'created_at': self.created_at, 'updated_at': self.updated_at }
def lookup(cls, dataset, data, account, match_entity=True, readonly=False): data = AliasLookupSchema().to_python(data) if match_entity: entity = Entity.by_name(dataset, data['name']) if entity is not None: return entity else: entity = None alias = cls.by_name(dataset, data['name']) if alias is not None: return alias choices = match_op(data['name'], dataset) choices = filter(lambda (c, v, s): s > 99.9, choices) if len(choices) == 1: c, entity_id, s = choices.pop() entity = Entity.by_id(dataset, entity_id) if readonly: return entity alias = cls() alias.creator = account alias.dataset = dataset alias.entity = entity alias.is_matched = entity is not None alias.name = data['name'] alias.data = data['data'] db.session.add(alias) db.session.flush() if entity is not None: add_candidate_to_cache(dataset, alias.name, entity.id) return alias
def lookup(cls, dataset, data, account, match_entity=True, readonly=False): data = AliasLookupSchema().to_python(data) if match_entity: entity = Entity.by_name(dataset, data['name']) if entity is not None: return entity else: entity = None alias = cls.by_name(dataset, data['name']) if alias is not None: return alias choices = match_op(data['name'], dataset) choices = filter(lambda (c,v,s): s > 99.9, choices) if len(choices)==1: c, entity_id, s = choices.pop() entity = Entity.by_id(dataset, entity_id) if readonly: return entity alias = cls() alias.creator = account alias.dataset = dataset alias.entity = entity alias.is_matched = entity is not None alias.name = data['name'] alias.data = data['data'] db.session.add(alias) db.session.flush() if entity is not None: add_candidate_to_cache(dataset, alias.name, entity.id) return alias
def __iter__(self): rp = db.engine.execute(self.lq) rows = rp.fetchall() ids = [r[0] for r in rows] entities = Entity.id_map(ids) for (id, score) in rows: yield {'score': int(score), 'entity': entities.get(id)}
def _to_python(self, value, state): if value == 'NEW': return value elif value == 'INVALID' and state.dataset.enable_invalid: return value entity = Entity.by_id(state.dataset, value) if entity is not None: return entity raise Invalid('No such entity.', value, None)
def match(self, dataset, data, account): state = AliasMatchState(dataset) data = AliasMatchSchema().to_python(data, state) self.is_matched = True self.matcher = account if data['choice'] == 'INVALID': self.entity = None self.is_invalid = True elif data['choice'] == 'NEW': self.entity = Entity.create(dataset, data, account) self.is_invalid = False else: self.entity = data['choice'] self.is_invalid = False db.session.add(self) db.session.flush()
def delete(self): from nomenklatura.model.entity import Entity Entity.all(self).delete() db.session.delete(self) db.session.flush()