Пример #1
0
        public void NestedRelationalAttributes()
        {
            string arff = @"@relation relationName

@attribute a1 relational
  @attribute a2 numeric
  @attribute a3 relational
    @attribute a4 string
    @attribute a5 numeric
  @end a3
  @attribute a4 string
@end a1
";

            AssertWriter(arff, arffWriter =>
            {
                arffWriter.WriteRelationName("relationName");
                arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Relational(
                                                                new ArffAttribute("a2", ArffAttributeType.Numeric),
                                                                new ArffAttribute("a3", ArffAttributeType.Relational(
                                                                                      new ArffAttribute("a4", ArffAttributeType.String),
                                                                                      new ArffAttribute("a5", ArffAttributeType.Numeric))),
                                                                new ArffAttribute("a4", ArffAttributeType.String))));
            });
        }
Пример #2
0
        public void NestedRelationalValues()
        {
            string arff = @"@relation relationName

@attribute a1 relational
  @attribute a2 numeric
  @attribute a3 relational
    @attribute a4 {v1,v2,v3}
    @attribute a5 numeric
  @end a3
  @attribute a6 string
@end a1
@attribute a7 numeric

@data
'1,\'v1,2\\r\\nv2,3\',abc\r\n4,\'v3,5\\r\\nv1,6\',def',7
";

            object[] instance = { new object[][] { new object[] { 1.0, new object[][] { new object[] { 0, 2.0 }, new object[] { 1, 3.0 } }, "abc" }, new object[] { 4.0, new object[][] { new object[] { 2, 5.0 }, new object[] { 0, 6.0 } }, "def" } }, 7.0 };

            AssertWriter(arff, arffWriter =>
            {
                arffWriter.WriteRelationName("relationName");
                arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Relational(
                                                                new ArffAttribute("a2", ArffAttributeType.Numeric),
                                                                new ArffAttribute("a3", ArffAttributeType.Relational(
                                                                                      new ArffAttribute("a4", ArffAttributeType.Nominal("v1", "v2", "v3")),
                                                                                      new ArffAttribute("a5", ArffAttributeType.Numeric))),
                                                                new ArffAttribute("a6", ArffAttributeType.String))));
                arffWriter.WriteAttribute(new ArffAttribute("a7", ArffAttributeType.Numeric));
                arffWriter.WriteInstance(instance);
            });
        }
Пример #3
0
        public void SimpleAttributes()
        {
            string arff = @"@relation relationName

@attribute a1 numeric
@attribute a2 string
@attribute a3 {v1,v2,v3}
@attribute a4 date
@attribute a5 date hh:mm:ss
@attribute a6 relational
  @attribute a7 numeric
  @attribute a8 string
@end a6
";

            AssertWriter(arff, arffWriter =>
            {
                arffWriter.WriteRelationName("relationName");
                arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Numeric));
                arffWriter.WriteAttribute(new ArffAttribute("a2", ArffAttributeType.String));
                arffWriter.WriteAttribute(new ArffAttribute("a3", ArffAttributeType.Nominal("v1", "v2", "v3")));
                arffWriter.WriteAttribute(new ArffAttribute("a4", ArffAttributeType.Date()));
                arffWriter.WriteAttribute(new ArffAttribute("a5", ArffAttributeType.Date("hh:mm:ss")));
                arffWriter.WriteAttribute(new ArffAttribute("a6", ArffAttributeType.Relational(
                                                                new ArffAttribute("a7", ArffAttributeType.Numeric),
                                                                new ArffAttribute("a8", ArffAttributeType.String))));
            });
        }
Пример #4
0
        public void MissingValues()
        {
            string arff = @"@relation relationName
                            @attribute a1 numeric
                            @attribute a2 integer
                            @attribute a3 real
                            @attribute a4 string
                            @attribute a5 date
                            @attribute a6 date yyyy-MM-dd
                            @attribute a7 {v1,'v2',""v3""}
                            @attribute a8 string
                            @data
                            ?,?,?,?,?,?,?,'?'";

            AssertReader(arff,
                         expectedRelationName: "relationName",
                         expectedAttributes: new[] {
                new ArffAttribute("a1", ArffAttributeType.Numeric),
                new ArffAttribute("a2", ArffAttributeType.Numeric),
                new ArffAttribute("a3", ArffAttributeType.Numeric),
                new ArffAttribute("a4", ArffAttributeType.String),
                new ArffAttribute("a5", ArffAttributeType.Date()),
                new ArffAttribute("a6", ArffAttributeType.Date("yyyy-MM-dd")),
                new ArffAttribute("a7", ArffAttributeType.Nominal("v1", "v2", "v3")),
                new ArffAttribute("a8", ArffAttributeType.String)
            },
                         expectedInstances: new object[][] {
                new object[] { null, null, null, null, null, null, null, "?" }
            });
        }
Пример #5
0
        public void RelationalInstancesReadCorrectly()
        {
            string arff = @"@relation relationName
                            @attribute a1 relational
                              @attribute a2 {v1,v2,v3}
                              @attribute a3 relational
                                @attribute a4 string
                                @attribute a5 {v4,v5,v6}
                              @end a3
                            @end a1
                            @data
                            'v1,\'abc,v6,{1.5}\\r\\ndef,v5\'\r\nv2,\'ghi,v4\\r\\njkl,v6\',{2.5}'";

            AssertReader(arff,
                         expectedRelationName: "relationName",
                         expectedAttributes: new[] {
                new ArffAttribute("a1", ArffAttributeType.Relational(
                                      new ArffAttribute("a2", ArffAttributeType.Nominal("v1", "v2", "v3")),
                                      new ArffAttribute("a3", ArffAttributeType.Relational(
                                                            new ArffAttribute("a4", ArffAttributeType.String),
                                                            new ArffAttribute("a5", ArffAttributeType.Nominal("v4", "v5", "v6"))))))
            },
                         expectedInstances: new object[][] {
                new object[] { new object[][] { new object[] { 0, new object[][] { new object[] { "abc", 2 }, new object[] { "def", 1 } } }, new object[] { 1, new object[][] { new object[] { "ghi", 0 }, new object[] { "jkl", 2 } } } } }
            });
        }
Пример #6
0
        public void InstancesReadCorrectly()
        {
            string arff = @"@relation relationName
                            @attribute a1 numeric
                            @attribute a2 integer
                            @attribute a3 real
                            @attribute a4 string
                            @attribute a5 date
                            @attribute a6 date yyyy-MM-dd
                            @attribute a7 {v1,'v2',""v3""}
                            @data
                            -6.54,42,0.0,string,2016-06-11T19:30:05,2016-06-11,v3";

            AssertReader(arff,
                         expectedRelationName: "relationName",
                         expectedAttributes: new[] {
                new ArffAttribute("a1", ArffAttributeType.Numeric),
                new ArffAttribute("a2", ArffAttributeType.Numeric),
                new ArffAttribute("a3", ArffAttributeType.Numeric),
                new ArffAttribute("a4", ArffAttributeType.String),
                new ArffAttribute("a5", ArffAttributeType.Date()),
                new ArffAttribute("a6", ArffAttributeType.Date("yyyy-MM-dd")),
                new ArffAttribute("a7", ArffAttributeType.Nominal("v1", "v2", "v3"))
            },
                         expectedInstances: new object[][] {
                new object[] { -6.54, 42.0, 0.0, "string", DateTime.ParseExact("2016-06-11T19:30:05", "yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture), DateTime.ParseExact("2016-06-11", "yyyy-MM-dd", CultureInfo.InvariantCulture), 2 }
            });
        }
Пример #7
0
        public void AttributesReadCorrectly()
        {
            string arff = @"@relation relationName
                            @attribute a1 numeric
                            @attribute a2 integer
                            @attribute a3 real
                            @attribute a4 string
                            @attribute a5 date
                            @attribute a6 date yyyy-MM-dd
                            @attribute a7 {v1,'v2',""v3""}
                            @attribute a8 relational
                              @attribute a9 numeric
                              @attribute a10 relational
                                @attribute a11 string
                              @end a10
                            @end a8
                            @data";

            AssertReader(arff,
                         expectedRelationName: "relationName",
                         expectedAttributes: new[] {
                new ArffAttribute("a1", ArffAttributeType.Numeric),
                new ArffAttribute("a2", ArffAttributeType.Numeric),
                new ArffAttribute("a3", ArffAttributeType.Numeric),
                new ArffAttribute("a4", ArffAttributeType.String),
                new ArffAttribute("a5", ArffAttributeType.Date()),
                new ArffAttribute("a6", ArffAttributeType.Date("yyyy-MM-dd")),
                new ArffAttribute("a7", ArffAttributeType.Nominal("v1", "v2", "v3")),
                new ArffAttribute("a8", ArffAttributeType.Relational(
                                      new ArffAttribute("a9", ArffAttributeType.Numeric),
                                      new ArffAttribute("a10", ArffAttributeType.Relational(
                                                            new ArffAttribute("a11", ArffAttributeType.String)))))
            });
        }
Пример #8
0
        public void Whitespace()
        {
            string arff = "\r\n\n\t @relation\t'\\trelation Name'\n\r\n \r\n@attribute      a1\t \tnumeric\t\r@attribute a2{ 'v1'  , v2,v3  }\n @data \r\n \r\n";

            AssertReader(arff,
                         expectedRelationName: "\trelation Name",
                         expectedAttributes: new[] {
                new ArffAttribute("a1", ArffAttributeType.Numeric),
                new ArffAttribute("a2", ArffAttributeType.Nominal("v1", "v2", "v3"))
            });
        }
Пример #9
0
        public void EmptyNominalAttribute()
        {
            string arff = @"@relation relationName
                            @attribute a1 {}
                            @data";

            AssertReader(arff,
                         expectedRelationName: "relationName",
                         expectedAttributes: new[] {
                new ArffAttribute("a1", ArffAttributeType.Nominal())
            });
        }
Пример #10
0
        public void SparseInstancesWithInstanceWeightsWrittenCorrectly()
        {
            string arff = @"@relation relationName

@attribute a1 numeric
@attribute a2 string
@attribute a3 {v1,v2,v3}
@attribute a4 date
@attribute a5 date hh:mm:ss
@attribute a6 relational
  @attribute a7 numeric
  @attribute a8 numeric
@end a6

@data
{0 1.5,1 'abc,def',2 v3,3 2017-01-29T18:39:18,4 06:39:18,5 '2,-3.5\r\n3,4.5'},{0.44}
{1 '',3 1970-01-01T00:00:00,4 12:00:00,5 '0,0\r\n0,0'},{0.87}
";

            DateTime date1 = DateTime.ParseExact("2017-01-29T18:39:18", "yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture);
            DateTime date2 = new DateTime(1970, 1, 1, 0, 0, 0);

            object[] instance1 = { 1.5, "abc,def", 2, date1, date1, new[] { new object[] { 2.0, -3.5 }, new object[] { 3.0, 4.5 } } };
            object[] instance2 = { 0.0, string.Empty, 0, date2, date2, new[] { new object[] { 0.0, 0.0 }, new object[] { 0.0, 0.0 } } };

            AssertWriter(arff, arffWriter =>
            {
                arffWriter.WriteRelationName("relationName");
                arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Numeric));
                arffWriter.WriteAttribute(new ArffAttribute("a2", ArffAttributeType.String));
                arffWriter.WriteAttribute(new ArffAttribute("a3", ArffAttributeType.Nominal("v1", "v2", "v3")));
                arffWriter.WriteAttribute(new ArffAttribute("a4", ArffAttributeType.Date()));
                arffWriter.WriteAttribute(new ArffAttribute("a5", ArffAttributeType.Date("hh:mm:ss")));
                arffWriter.WriteAttribute(new ArffAttribute("a6", ArffAttributeType.Relational(
                                                                new ArffAttribute("a7", ArffAttributeType.Numeric),
                                                                new ArffAttribute("a8", ArffAttributeType.Numeric))));
                arffWriter.WriteInstance(instance1, true, 0.44);
                arffWriter.WriteInstance(instance2, true, 0.87);
            });
        }
Пример #11
0
        public void InstancesWrittenCorrectly()
        {
            string arff = @"@relation relationName

@attribute a1 numeric
@attribute a2 string
@attribute a3 {v1,v2,v3}
@attribute a4 date
@attribute a5 date hh:mm:ss
@attribute a6 relational
  @attribute a7 numeric
  @attribute a8 numeric
@end a6

@data
1.5,'abc,def',v3,2017-01-29T18:39:18,06:39:18,'2,-3.5\r\n3,4.5'
";

            DateTime date = DateTime.ParseExact("2017-01-29T18:39:18", "yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture);

            object[] instance = { 1.5, "abc,def", 2, date, date, new[] { new object[] { 2.0, -3.5 }, new object[] { 3.0, 4.5 } } };

            AssertWriter(arff, arffWriter =>
            {
                arffWriter.WriteRelationName("relationName");
                arffWriter.WriteAttribute(new ArffAttribute("a1", ArffAttributeType.Numeric));
                arffWriter.WriteAttribute(new ArffAttribute("a2", ArffAttributeType.String));
                arffWriter.WriteAttribute(new ArffAttribute("a3", ArffAttributeType.Nominal("v1", "v2", "v3")));
                arffWriter.WriteAttribute(new ArffAttribute("a4", ArffAttributeType.Date()));
                arffWriter.WriteAttribute(new ArffAttribute("a5", ArffAttributeType.Date("hh:mm:ss")));
                arffWriter.WriteAttribute(new ArffAttribute("a6", ArffAttributeType.Relational(
                                                                new ArffAttribute("a7", ArffAttributeType.Numeric),
                                                                new ArffAttribute("a8", ArffAttributeType.Numeric))));
                arffWriter.WriteInstance(instance);
            });
        }
Пример #12
0
        public void QuotingHandledCorrectly()
        {
            string arff = @"@relation relationName
                            @attribute a1 {',',""{"",'}','?'}
                            @attribute a2 {',',""{"",'}','?'}
                            @attribute a3 string
                            @attribute a4 string
                            @data
                            ',',""?"","","",' '
                            ?,?,'?',""?""";

            AssertReader(arff,
                         expectedRelationName: "relationName",
                         expectedAttributes: new[] {
                new ArffAttribute("a1", ArffAttributeType.Nominal(",", "{", "}", "?")),
                new ArffAttribute("a2", ArffAttributeType.Nominal(",", "{", "}", "?")),
                new ArffAttribute("a3", ArffAttributeType.String),
                new ArffAttribute("a4", ArffAttributeType.String)
            },
                         expectedInstances: new object[][] {
                new object[] { 0, 3, ",", " " },
                new object[] { null, null, "?", "?" }
            });
        }