Beispiel #1
0
        protected override void onInstanceActivated(ConceptInstance instance, BeamGenerator generator)
        {
            var criterion       = generator.GetValue(instance, _parameter);
            var criterionValues = generator.GetPropertyValues(criterion);

            criterionValues.Remove(Concept2.OnSetListener); // TODO internal property removal should be done in more systematic way
            criterionValues.Remove(Concept2.HasProperty);
            criterionValues.Remove(Concept2.HasPropertyValue);

            var requiredProperties = new HashSet <Concept2>(criterionValues.Values.Select(i => i.Concept));

            requiredProperties.Add(criterion.Concept);

            var result         = FindRelevantConcepts(generator, requiredProperties);
            var isSubjectClass = generator.GetInverseConceptValues(Concept2.InstanceOf, criterion).Any();


            if (result.Count == 0)
            {
                if (isSubjectClass)
                {
                    generator.Push(new StaticScoreEvent(0.1));
                }
                else
                {
                    generator.Push(new StaticScoreEvent(-0.1));
                }

                generator.Push(new InstanceOutputEvent(new ConceptInstance(Concept2.NotFound)));
            }
            else if (result.Count == 1)
            {
                generator.Push(new StaticScoreEvent(0.5));
                generator.Push(new InstanceOutputEvent(result.First()));
            }
            else
            {
                if (generator.IsProperty(criterion.Concept))
                {
                    generator.Push(new StaticScoreEvent(-0.15));
                }

                var needRefinementInstance = new ConceptInstance(Concept2.NeedsRefinement);
                generator.SetValue(needRefinementInstance, Concept2.Subject, criterion);
                generator.SetValue(criterion, Concept2.OnSetListener, instance);
                generator.Push(new InstanceOutputEvent(needRefinementInstance));
            }
        }