Example #1
0
        public Arff Parse(StreamReader reader)
        {
            string line = null;
            Arff arff = new Arff ();

            bool parsingData = false;
            int attributeIdx = 0;

            while ((line = reader.ReadLine()) != null) {
                if (relation.IsMatch (line)) {
                    Match match = relation.Match (line);

                    arff.Relation = new Relation (match.Value);
                    continue;
                }

                if (attribute.IsMatch (line)) {
                    Match match = attribute.Match (line);

                    string name = match.Groups ["name"].Value;
                    List<Value> values = match
                        .Groups ["values"]
                        .Value
                        .Split (new char[] {','}, StringSplitOptions.None)
                        .ToList ()
                        .Select (x => new Value(x.Trim ()))
                        .ToList();

                    var att = new Attribute (attributeIdx, name, values);

                    arff.Attributes.Add (att);
                    arff.Target = att;

                    attributeIdx++;

                    continue;
                }

                if (data.IsMatch (line)) {
                    parsingData = true;
                    continue;
                }

                if (parsingData) {
                    arff.Data.Add (new Data (arff.Attributes, line));
                    continue;
                }
            }

            if (arff.Relation == null || arff.Attributes.Count == 0 || arff.Data.Count == 0) {
                throw new ParserException ();
            }

            // Remove the last attribute which is the Target attribute...
            arff.Attributes.RemoveAt (arff.Attributes.Count - 1);

            return arff;
        }
Example #2
0
        public static void Main(string[] args)
        {
            if (args.Length > 2 || args.Length == 0)
            {
                Console.WriteLine("Bad usage. Use:\t./decision-tree.exe <arff file> \t[prune]");
                Console.WriteLine("Example: \t./decision-tree.exe data/example.arff \tprune");
                Environment.Exit(1);
            }

            bool   prune    = false;
            string filename = args [0];

            if (args.Length == 2)
            {
                prune = args [1].Equals("prune");

                if (!prune)
                {
                    Console.WriteLine("Pruning is disabled, could not parse \"prune\".");
                }
            }

            if (!File.Exists(filename))
            {
                Console.WriteLine("File \"{0}\" does not exist.", filename);
                Environment.Exit(1);
            }

            Console.WriteLine("File: \t\t{0}\nPruning: \t{1}", filename, prune);

            ArffReader reader = new ArffReader();
            Arff       arff   = reader.Parse(new StreamReader(filename));

            Classifier c = new Classifier(arff, prune);

            c.DrawTree();
        }
Example #3
0
 public Classifier(Arff arff, bool prune = false)
 {
     this.arff    = arff;
     this.builder = new DecisionBuilder(this.arff);
     this.prune   = prune;
 }
Example #4
0
 public DecisionBuilder(Arff arff)
 {
     this.arff = arff;
 }
Example #5
0
 public Classifier(Arff arff, bool prune=false)
 {
     this.arff = arff;
     this.builder = new DecisionBuilder (this.arff);
     this.prune = prune;
 }
Example #6
0
        public Arff Parse(StreamReader reader)
        {
            string line = null;
            Arff   arff = new Arff();

            bool parsingData  = false;
            int  attributeIdx = 0;

            while ((line = reader.ReadLine()) != null)
            {
                if (relation.IsMatch(line))
                {
                    Match match = relation.Match(line);

                    arff.Relation = new Relation(match.Value);
                    continue;
                }

                if (attribute.IsMatch(line))
                {
                    Match match = attribute.Match(line);

                    string       name   = match.Groups ["name"].Value;
                    List <Value> values = match
                                          .Groups ["values"]
                                          .Value
                                          .Split(new char[] { ',' }, StringSplitOptions.None)
                                          .ToList()
                                          .Select(x => new Value(x.Trim()))
                                          .ToList();

                    var att = new Attribute(attributeIdx, name, values);

                    arff.Attributes.Add(att);
                    arff.Target = att;

                    attributeIdx++;

                    continue;
                }

                if (data.IsMatch(line))
                {
                    parsingData = true;
                    continue;
                }

                if (parsingData)
                {
                    arff.Data.Add(new Data(arff.Attributes, line));
                    continue;
                }
            }

            if (arff.Relation == null || arff.Attributes.Count == 0 || arff.Data.Count == 0)
            {
                throw new ParserException();
            }

            // Remove the last attribute which is the Target attribute...
            arff.Attributes.RemoveAt(arff.Attributes.Count - 1);

            return(arff);
        }
Example #7
0
 public DecisionBuilder(Arff arff)
 {
     this.arff = arff;
 }