Exemplo n.º 1
0
        public override IAnswer Process(IQuestionProcessingContext context)
        {
            var allStatements = context.SemanticNetwork.Statements.Enumerate(context.ActiveContexts);

            IEnumerable <IStatement> statements;
            var parentChild = Statement as IParentChild <IConcept>;

            if (parentChild != null)
            {
                statements = allStatements.FindPath(Statement.GetType(), parentChild.Parent, parentChild.Child);
            }
            else
            {
                var statement = allStatements.FirstOrDefault(p => p.Equals(Statement));
                statements = statement != null ? new[] { statement } : Array.Empty <IStatement>();
            }

            var result = new UnstructuredContainer();

            System.Boolean isTrue = statements.Any();
            result.Append(
                language => Strings.ParamAnswer,
                new Dictionary <String, IKnowledge> {
                { Strings.ParamAnswer, isTrue.ToLogicalValue() }
            });
            result.Append(isTrue ? Statement.DescribeTrue() : Statement.DescribeFalse());
            return(new BooleanAnswer(
                       isTrue,
                       result,
                       new Explanation(statements)));
        }
 public virtual StringBuilder Represent(UnstructuredContainer text, ILanguage language)
 {
     return(representContainer(
                text,
                language,
                (lineNumber, lineCount) => String.Empty));
 }
        private IText formatAnswer(
            ICollection <IConcept> parents,
            IDictionary <IConcept, Tuple <IConcept, IConcept> > signValueStatements)
        {
            var result = new UnstructuredContainer(new FormattedText(
                                                       language => language.GetExtension <ILanguageSetModule>().Questions.Answers.CompareConceptsResult,
                                                       new Dictionary <String, IKnowledge>
            {
                { Strings.ParamConcept1, Concept1 },
                { Strings.ParamConcept2, Concept2 },
            })).AppendBulletsList(parents.Enumerate());

            if (signValueStatements.Count > 0)
            {
                foreach (var sign in signValueStatements)
                {
                    WriteOneLine(result, sign.Key, sign.Value.Item1, sign.Value.Item2);
                }
            }
            else
            {
                WriteNotEmptyResultWithoutData(result);
            }

            return(result);
        }
Exemplo n.º 4
0
        public void CreateEmptyUnstructuredContainer()
        {
            // act
            var container = new UnstructuredContainer();

            // assert
            Assert.AreEqual(0, container.Items.Count);
        }
Exemplo n.º 5
0
        public static ITextContainer Append(this IText text1, IText text2)
        {
            var container = text1 as UnstructuredContainer;

            if (container == null)
            {
                container = new UnstructuredContainer(text1);
            }
            return(container.Append(text2));
        }
Exemplo n.º 6
0
        public static IText DescribeRules(this ISemanticNetwork semanticNetwork)
        {
            var result = new UnstructuredContainer();

            foreach (var statement in semanticNetwork.Statements)
            {
                result.Append(statement.DescribeTrue());
            }
            return(result);
        }
Exemplo n.º 7
0
 public virtual StringBuilder Represent(UnstructuredContainer text, ILanguage language)
 {
     return(representContainer(
                text,
                language,
                String.Empty,
                String.Empty,
                String.Empty,
                String.Empty));
 }
Exemplo n.º 8
0
        public void CreateOneItemUnstructuredContainer()
        {
            // arrange
            var item = new SpaceText();

            // act
            var container = new UnstructuredContainer(item);

            // assert
            Assert.AreSame(item, container.Items.Single());
        }
Exemplo n.º 9
0
        private static StatementAnswer createAnswer(ComparisonStatement statement, IQuestionProcessingContext <ComparisonQuestion> context, ICollection <IStatement> transitiveStatements = null)
        {
            var resultStatement = statement.SwapOperandsToMatchOrder(context.Question);

            var text = new UnstructuredContainer();

            text.Append(resultStatement.DescribeTrue());

            var explanation = transitiveStatements == null
                                ? new Explanation(statement)
                                : new Explanation(transitiveStatements);

            return(new StatementAnswer(resultStatement, text, explanation));
        }
Exemplo n.º 10
0
        public void CreateManyItemsUnstructuredContainer()
        {
            // arrange
            var items = new List <IText>
            {
                new SpaceText(),
                new LineBreakText(),
                new FormattedText(language => string.Empty),
            };

            // act
            var container = new UnstructuredContainer(items);

            // assert
            Assert.IsTrue(items.SequenceEqual(container.Items));
        }
Exemplo n.º 11
0
        public void EnsureAnyLevelOfTextBlockIsSupported(IStructuredTextRepresenter representer)
        {
            // arrange
            string searchingToken = "QWERTY";
            IText  text           = new FormattedText(language => searchingToken);

            // act
            for (int i = 0; i < 10; i++)
            {
                text = new UnstructuredContainer(text);
                string representation = representer.Represent(text, Language.Default).ToString();

                // assert
                Assert.IsTrue(representation.Contains(searchingToken));
            }
        }
Exemplo n.º 12
0
        public static IText CheckConsistency(this ISemanticNetwork semanticNetwork)
        {
            var result = new UnstructuredContainer();

            // 1. check all duplicates
            checkStatementDuplicates(semanticNetwork, result);

            // 2. check specific statements
            foreach (var statementDefinition in Repositories.Statements.Definitions.Values)
            {
                statementDefinition.CheckConsistency(semanticNetwork, result);
            }

            if (result.Items.Count == 0)
            {
                result.Append(language => language.Statements.Consistency.CheckOk);
            }
            return(result);
        }
Exemplo n.º 13
0
        public static IText GetDescriptionWithExplanation(this IAnswer answer)
        {
            if (answer.Explanation.Statements.Count > 0)
            {
                var explanedResult = new UnstructuredContainer(answer.Description);

                explanedResult.AppendLineBreak();
                explanedResult.Append(new Text.Primitives.FormattedText(language => language.Questions.Answers.Explanation));

                foreach (var statement in answer.Explanation.Statements)
                {
                    explanedResult.Append(statement.DescribeTrue());
                }

                return(explanedResult);
            }
            else
            {
                return(answer.Description);
            }
        }
Exemplo n.º 14
0
        private static StatementsAnswer <ProcessesStatement> createAnswer(ICollection <ProcessesStatement> statements, IQuestionProcessingContext <ProcessesQuestion> context, ICollection <IStatement> transitiveStatements = null)
        {
            var resultStatements = new HashSet <ProcessesStatement>();
            var text             = new UnstructuredContainer();

            foreach (var statement in statements)
            {
                var resultStatement = statement.SwapOperandsToMatchOrder(context.Question);
                if (resultStatements.All(s => s.SequenceSign != resultStatement.SequenceSign))
                {
                    resultStatements.Add(resultStatement);
                    text.Append(resultStatement.DescribeTrue());
                }
                addStatementConsequences(resultStatements, resultStatement, context);
            }

            var explanation = transitiveStatements == null
                                ? new Explanation(statements)
                                : new Explanation(transitiveStatements);

            return(new StatementsAnswer <ProcessesStatement>(resultStatements, text, explanation));
        }
Exemplo n.º 15
0
        public IAnswer SelectAllConcepts(
            Func <StatementT, IConcept> resultConceptSelector,
            Func <QuestionT, IConcept> titleConceptSelector,
            String titleConceptCaption,
            Func <ILanguage, String> answerFormat,
            Func <IEnumerable <IConcept>, IEnumerable <IConcept> > conceptsFilter = null)
        {
            ProcessChildrenIfNeed();

            if (Statements.Any())
            {
                if (conceptsFilter == null)
                {
                    conceptsFilter = concepts => concepts;
                }

                var resultConcepts = conceptsFilter(Statements.Select(resultConceptSelector)).ToList();

                var format = new UnstructuredContainer(new FormattedText(
                                                           language => answerFormat(Context.Language),
                                                           new Dictionary <String, IKnowledge>
                {
                    { titleConceptCaption, titleConceptSelector(Context.Question) },
                })).AppendBulletsList(resultConcepts.Enumerate());

                var answer = new ConceptsAnswer(
                    resultConcepts,
                    format,
                    new Explanation(Statements.OfType <IStatement>()));

                answer.Explanation.Expand(AdditionalTransitives);

                return(answer);
            }
            else
            {
                return(Answer.CreateUnknown());
            }
        }
Exemplo n.º 16
0
        public void CheckTypedToUntypedAndViceVersaTransformations()
        {
            // arrange

            var concept1 = ConceptCreationHelper.CreateConcept();
            var concept2 = ConceptCreationHelper.CreateConcept();

            var resultStatementsTyped = new IsStatement[]
            {
                new IsStatement(null, concept1, concept2),
                new IsStatement(null, concept2, concept1),
            };

            var resultStatementsUntyped = resultStatementsTyped.OfType <IStatement>().ToArray();

            var text = new UnstructuredContainer();

            var explanationStatements = new IStatement[]
            {
                new HasPartStatement(null, concept1, concept2),
                new HasPartStatement(null, concept2, concept1),
            };

            var typedAnswer   = new StatementsAnswer <IsStatement>(resultStatementsTyped, text, new Explanation(explanationStatements));
            var untypedAnswer = new StatementsAnswer(resultStatementsUntyped, text, new Explanation(explanationStatements));

            // act
            var genericAnswer  = typedAnswer.MakeGeneric();
            var explicitAnswer = untypedAnswer.MakeExplicit <IsStatement>();

            // assert
            Assert.IsTrue(typedAnswer.Result.SequenceEqual(explicitAnswer.Result));
            Assert.IsTrue(typedAnswer.Explanation.Statements.SequenceEqual(explicitAnswer.Explanation.Statements));

            Assert.IsTrue(untypedAnswer.Result.SequenceEqual(genericAnswer.Result));
            Assert.IsTrue(untypedAnswer.Explanation.Statements.SequenceEqual(genericAnswer.Explanation.Statements));
        }