Exemple #1
0
        private IEnumerable <IClause> TryFindClauses()
        {
            var possibleClauses = AdTree.GetAdTreesInAdTreeOrder().Where(x => AttributesModel.IsU(x.Morpheme.Attributes));

            // If U grammar character is present then there can be multiple clauses.
            if (possibleClauses.Any())
            {
                foreach (var possibleClause in possibleClauses)
                {
                    var isClauseOnRight = Clause.IsClause(possibleClause.Right, AttributesModel);
                    if (isClauseOnRight)
                    {
                        var clauseAdTree = possibleClause.Right.MakeDeepCopy();
                        var clause       = Factory.CreateClause(clauseAdTree, 0);
                        yield return(clause);
                    }

                    var isClauseOnLeft = Clause.IsClause(possibleClause.Left, AttributesModel);
                    if (isClauseOnLeft)
                    {
                        var clauseAdTree = possibleClause.Left.MakeDeepCopy();
                        var clause       = Factory.CreateClause(clauseAdTree, 0);
                        yield return(clause);
                    }
                }
            }
            else
            {
                if (Clause.IsClause(AdTree, AttributesModel))
                {
                    var clause = Factory.CreateClause(AdTree, StructureAttributes.Sentence.SimpleSentence);
                    yield return(clause);
                }
            }
        }
Exemple #2
0
        private ITerm TryGetPredicate()
        {
            ITerm result = null;

            var verb = AdTree.GetRightSequence().FirstOrDefault(x => AttributesModel.IsVerb(x.Morpheme.Attributes));

            if (verb != null)
            {
                IAdTree predicateAdTree;

                var verbValencies = AttributesModel.GetNumberOfValencies(verb.Morpheme.Attributes);
                if (verbValencies > 0)
                {
                    predicateAdTree = verb.GetSequenceToRoot()
                                      .First(x => x.AdPosition == null || AttributesModel.IsU(x.AdPosition.Morpheme.Attributes))
                                      .MakeDeepCopy();

                    // Remove the subject (i.e. remove the sub-adtree on the first valency)
                    var firstValency = predicateAdTree.GetRightSequence().FirstOrDefault(x => x.Pattern.ValencyPosition == 1);
                    if (firstValency != null)
                    {
                        firstValency.Left = null;
                    }
                }
                else
                {
                    predicateAdTree = verb.MakeDeepCopy();
                    result          = Factory.CreateTerm(verb, StructureAttributes.Term.Predicate);
                }

                result = Factory.CreateTerm(predicateAdTree, StructureAttributes.Term.Predicate);
            }

            return(result);
        }