Ejemplo n.º 1
0
        public void RelativeFrequencyTest()
        {
            Ontology.EraseConcepts();
            Parser.ParseAndExecute("a cat is a kind of person",
                                   "persian, tabby (10), and siamese are kinds of cat",
                                   "a cat is grey, white, ginger (10), or black.",
                                   "a cat can be haughty",
                                   "a cat can be cuddly",
                                   "a cat can be crazy",
                                   "a persian can be matted");
            var cat    = Ontology.CommonNoun("cat");
            var tabby  = Ontology.CommonNoun("tabby");
            var ginger = Ontology.Adjective("ginger");

            Assert.AreEqual(tabby, cat.Subkinds[1]);
            //cat.SubkindFrequencies[1] = 10; // tabby
            var g           = new Generator(cat);
            var tabbyCount  = 0;
            var gingerCount = 0;

            for (var n = 0; n < 1000; n++)
            {
                var i = g.Generate();
                if (i.IsA(i.Individuals[0], tabby))
                {
                    tabbyCount++;
                }
                if (i.IsA(i.Individuals[0], ginger))
                {
                    gingerCount++;
                }
            }
            Assert.IsTrue(tabbyCount > 700);
            Assert.IsTrue(tabbyCount < 1000);
            Assert.IsTrue(gingerCount > 700);
            Assert.IsTrue(gingerCount < 1000);
        }
Ejemplo n.º 2
0
        public void OverlappingAdjectivesTest()
        {
            var o = new Ontology(nameof(OverlappingAdjectivesTest));

            o.ParseAndExecute("x, y, and z are kinds of thing",
                              "a x is between 4 and 5 of b, c, d, e, f, or g",
                              "a y is between 1 and 2 of b, c, d, e, f, or g",
                              "a z is any 3 of b, c, d, e, f, or g");
            var adjectives = new[] { "b", "c", "d", "e", "f", "g" }.Select(a => o.Adjective(a)).ToArray();
            var g = o.CommonNoun("thing").MakeGenerator();

            for (var i = 0; i < 100; i++)
            {
                var thing = g.Generate().PossibleIndividuals[0];
                var count = adjectives.Count(a => thing.IsA(a));
                Assert.IsTrue(
                    (thing.IsA("x") && count >= 4 && count <= 5) ||
                    (thing.IsA("y") && count >= 1 && count <= 2) ||
                    (thing.IsA("z") && count == 3)
                    );
            }
        }
Ejemplo n.º 3
0
 /// <inheritdoc />
 protected override Adjective GetConcept()
 {
     var(text, relativeFrequency) = Parser.ParseRelativeFrequencyFromText(Text);
     RelativeFrequency            = relativeFrequency;
     return(Ontology.Adjective(text) ?? new Adjective(Ontology, text));
 }