Example #1
0
        public static void selectfeatures(Pair<string, float>[] featureweights, Pair<string, string>[] labels, string inputFile, string outputFile)
        {
            orderfeatures(featureweights, inputFile);
            opgroup[] featureIdx = new opgroup[featureweights.Length];
            for (int i = 0; i < featureweights.Length; ++i)
            {
                featureIdx[i] = new opgroup(featureweights[i].first);
            }
            globvars.labels = labels;
            SetMatchAttrFile(inputFile, featureIdx);
            FileStream fso = new FileStream(outputFile, FileMode.Create, FileAccess.Write);
            StreamWriter tfso = new StreamWriter(fso);
            FileStream fs = new FileStream(inputFile, FileMode.Open, FileAccess.Read);
            XmlTextReader xi = new XmlTextReader(fs);
            XmlTextWriter xo = new XmlTextWriter(tfso);
            xo.Indentation = 1;
            xo.IndentChar = '\t';
            xo.Formatting = Formatting.Indented;
            while (xi.Read())
            {
                if (xi.NodeType == XmlNodeType.Element && xi.IsStartElement())
                {
                    if (xi.Name == "dataset")
                    {
                        xo.WriteStartElement(xi.Name); // dataset
                        xo.WriteAttributes(xi, true);
                        break;
                    }
                }
                else
                {
                    xo.WriteNode(xi, true);
                }
            }
            xo.WriteStartElement("header");
            xo.WriteStartElement("attributes");
            for (int i = 0; i < featureweights.Length; ++i)
            {
                string s = featureweights[i].first;
                float curweight = featureweights[i].second;
                xo.WriteStartElement("attribute");
                if (s == "class")
                {
                    xo.WriteAttributeString("class", "yes");
                    xo.WriteAttributeString("name", "class");
                    xo.WriteAttributeString("type", "nominal");
                    xo.WriteStartElement("labels");
                    foreach (string x in labels.GetUnique())
                    {
                        xo.WriteElementString("label", x);
                    }
                    xo.WriteEndElement(); // labels
                    xo.WriteEndElement(); // attribute
                }
                else
                {
                    xo.WriteAttributeString("name", s);
                    xo.WriteAttributeString("type", "numeric");
                    xo.WriteStartElement("metadata");
                    xo.WriteStartElement("property");
                    xo.WriteAttributeString("name", "weight");
                    xo.WriteValue(curweight);
                    xo.WriteEndElement(); // property
                    xo.WriteEndElement(); // metadata
                    xo.WriteEndElement(); // attribute
                }
            }

            while (xi.Read())
            {
                if (xi.NodeType == XmlNodeType.EndElement)
                {
                    if (xi.Name == "attributes")
                    {
                        xo.WriteEndElement();
                    }
                    else if (xi.Name == "header")
                    {
                        xo.WriteEndElement();
                        break;
                    }
                }
            }
            while (xi.Read())
            {
                if (xi.NodeType == XmlNodeType.Element && xi.IsStartElement())
                {
                    xo.WriteStartElement(xi.Name);
                    xo.WriteAttributes(xi, true);
                    if (xi.Name == "instances")
                        break;
                }
            }
            int vcount = 0;
            while (xi.Read())
            {
                if (xi.Name == "instance")
                {
                    if (xi.IsStartElement())
                    {
                        vcount = 0;
                        xo.WriteStartElement(xi.Name);
                        xo.WriteAttributes(xi, true);
                    }
                    else if (xi.NodeType == XmlNodeType.EndElement)
                    {
                        foreach (opgroup x in featureIdx)
                        {
                            xo.WriteElementString("value", x.GetVal());
                        }
                        xo.WriteEndElement();
                    }
                }
                else if (xi.Name == "value" && xi.IsStartElement())
                {
                    while (xi.Value == string.Empty)
                        xi.Read();
                    featureIdx.SetValAtIdx(vcount, xi.Value);
                    ++vcount;
                }
            }
            xi.Close();
            fs.Close();
            xo.Close();
            tfso.Close();
            fso.Close();
        }
Example #2
0
 public static void SetMatchAttrFile(string inputFile, opgroup[] featureIdx)
 {
     int curidx = 0;
     FileStream fs = new FileStream(inputFile, FileMode.Open, FileAccess.Read);
     XmlTextReader xi = new XmlTextReader(fs);
     while (xi.Read())
     {
         if (xi.IsStartElement())
         {
             if (xi.Name == "attribute")
             {
                 string attrname = xi.GetAttribute("name");
                 if (attrname != null)
                 {
                     if (featureIdx.Contains(attrname))
                     {
                         featureIdx.SetMatchAttr(attrname, curidx);
                     }
                 }
                 ++curidx;
             }
         }
     }
     xi.Close();
     fs.Close();
 }