import logging logger = logging.getLogger(__name__) class Instance(): """ `Instance` is the collection of multiple `Field` """ def __init__(self, fields): """This function initializes instance Arguments: fields {list} -- field list """ self.fields = list(fields) self.instance = {} for field in self.fields: self.instance[field.namespace] = [] self.vocab_dict = {} self.vocab_index() def __getitem__(self, namespace): if namespace not in self.instance: logger.error("can not find the namespace {} in instance.".format(namespace)) raise RuntimeError("can not find the namespace {} in instance.".format(namespace)) else: self.instance.get(namespace, None) def __iter__(self): return iter(self.fields) def __len__(self): return len(self.fields) def add_fields(self, fields): """This function adds fields to instance Arguments: field {Field} -- field list """ for field in fields: if field.namesapce not in self.instance: self.fields.append(field) self.instance[field.namesapce] = [] else: logger.warning('Field {} has been added before.'.format(field.name)) self.vocab_index() def count_vocab_items(self, counter, sentences): """This funtion constructs multiple namespace in counter Arguments: counter {dict} -- counter sentences {list} -- text content after preprocessing """ for field in self.fields: field.count_vocab_items(counter, sentences) def index(self, vocab, sentences): """This funtion indexes token using vocabulary, then update instance Arguments: vocab {Vocabulary} -- vocabulary sentences {list} -- text content after preprocessing """ for field in self.fields: field.index(self.instance, vocab, sentences) def get_instance(self): """This function get instance Returns: dict -- instance """ return self.instance def get_size(self): """This funtion gets the size of instance Returns: int -- instance size """ return len(self.instance[self.fields[0].namespace]) def vocab_index(self): """This function constructs vocabulary dict of fields """ for field in self.fields: if hasattr(field, 'vocab_namespace'): self.vocab_dict[field.namespace] = field.vocab_namespace def get_vocab_dict(self): """This function gets the vocab dict of instance Returns: dict -- vocab dict """ return self.vocab_dict