def readFile(self, path): lines = [line.rstrip('\n') for line in open(path)] for line in lines: tokens = line.split(' ') if len(tokens) < 3: raise Exception( "There are not enough information about an certain attribute" ) if tokens[0] != "@ATTRIBUTE": raise Exception( "First token in each line must be <@ATTRIBUTE>") name = tokens[1] last_token = tokens[len(tokens) - 1] if tokens[2] == "NUMERIC": newAttribute = Attribute.Numeric(name) elif tokens[2][0] == '{' and last_token[len(last_token) - 1] == '}': categoriesLine = line.split('{')[1].split('}')[0] categories = [] for x in categoriesLine.split(','): categories.append(Attribute.Value(x)) if len(categories) < 2: raise Exception( "Each categorical attribute must have at least 2 categories" ) newAttribute = Attribute.Category(name, categories) else: raise Exception("Invalid structure") if newAttribute.name != "class": self.attributes.append(newAttribute) else: if self.classAttribute is not None: raise Exception( "There can not be more than 1 class attribute") self.classAttribute = newAttribute