Esempio n. 1
0
        /**
         * The main method for realising coordinated phrases.
         *
         * @param parent
         *            the <code>SyntaxProcessor</code> that called this method.
         * @param phrase
         *            the <code>CoordinatedPhrase</code> to be realised.
         * @return the realised <code>NLGElement</code>.
         */

        public static INLGElement realise(SyntaxProcessor parent,
                                          CoordinatedPhraseElement phrase)
        {
            ListElement realisedElement = null;

            if (phrase != null)
            {
                realisedElement = new ListElement();
                PhraseHelper.realiseList(parent, realisedElement, phrase
                                         .getPreModifiers(), DiscourseFunction.PRE_MODIFIER);

                var coordinated = new CoordinatedPhraseElement();

                List <INLGElement> children = phrase.getChildren();
                var conjunction             = phrase.getFeatureAsString(Feature.CONJUNCTION.ToString());
                coordinated.setFeature(Feature.CONJUNCTION.ToString(), conjunction);
                coordinated.setFeature(Feature.CONJUNCTION_TYPE.ToString(), phrase
                                       .getFeature(Feature.CONJUNCTION_TYPE.ToString()));

                InflectedWordElement conjunctionElement = null;

                if (children != null && children.size() > 0)
                {
                    if (phrase.getFeatureAsBoolean(Feature.RAISE_SPECIFIER.ToString())
                        )
                    {
                        raiseSpecifier(children);
                    }

                    var child = phrase.getLastCoordinate();
                    if (child is SPhraseSpec)
                    {
                        ((SPhraseSpec)child).setFeature(Feature.POSSESSIVE.ToString(), phrase
                                                        .getFeature(Feature.POSSESSIVE.ToString()));
                    }
                    else
                    {
                        child.setFeature(Feature.POSSESSIVE.ToString(), phrase
                                         .getFeature(Feature.POSSESSIVE.ToString()));
                    }

                    child = children.get(0);

                    setChildFeatures(phrase, child);

                    coordinated.addCoordinate(parent.realise(child));
                    for (var index = 1; index < children.size(); index++)
                    {
                        child = children.get(index);
                        setChildFeatures(phrase, child);
                        if (child is SPhraseSpec)
                        {
                            if (phrase.getFeatureAsBoolean(Feature.AGGREGATE_AUXILIARY.ToString())
                                )
                            {
                                ((SPhraseSpec)child).setFeature(InternalFeature.REALISE_AUXILIARY.ToString(),
                                                                false);
                            }
                        }
                        else
                        {
                            if (phrase.getFeatureAsBoolean(Feature.AGGREGATE_AUXILIARY.ToString())
                                )
                            {
                                child.setFeature(InternalFeature.REALISE_AUXILIARY.ToString(),
                                                 false);
                            }
                        }

                        if (child.isA(PhraseCategoryEnum.CLAUSE))
                        {
                            ((SPhraseSpec)child)
                            .setFeature(
                                Feature.SUPRESSED_COMPLEMENTISER.ToString(),
                                phrase
                                .getFeature(Feature.SUPRESSED_COMPLEMENTISER.ToString()));
                        }

                        //skip conjunction if it's null or empty string
                        if (conjunction != null && conjunction.length() > 0)
                        {
                            conjunctionElement = new InflectedWordElement(
                                conjunction, new LexicalCategory_CONJUNCTION());
                            conjunctionElement.setFeature(
                                InternalFeature.DISCOURSE_FUNCTION.ToString(),
                                DiscourseFunction.CONJUNCTION);
                            coordinated.addCoordinate(conjunctionElement);
                        }

                        coordinated.addCoordinate(parent.realise(child));
                    }
                    realisedElement.addComponent(coordinated);
                }

                PhraseHelper.realiseList(parent, realisedElement, phrase
                                         .getPostModifiers(), DiscourseFunction.POST_MODIFIER);
                PhraseHelper.realiseList(parent, realisedElement, phrase
                                         .getComplements(), DiscourseFunction.COMPLEMENT);
            }
            return(realisedElement);
        }
Esempio n. 2
0
        /**
         * Sets the common features from the phrase to the child element.
         *
         * @param phrase
         *            the <code>CoordinatedPhraseElement</code>
         * @param child
         *            a single coordinated <code>NLGElement</code> within the
         *            coordination.
         */

        private static void setChildFeatures(CoordinatedPhraseElement phrase,
                                             INLGElement child)
        {
            SPhraseSpec twinchild;

            if (child is SPhraseSpec)
            {
                if (phrase.hasFeature(Feature.PROGRESSIVE.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(Feature.PROGRESSIVE.ToString(), phrase
                                                    .getFeature(Feature.PROGRESSIVE.ToString()));
                }
                if (phrase.hasFeature(Feature.PERFECT.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(Feature.PERFECT.ToString(), phrase
                                                    .getFeature(Feature.PERFECT.ToString()));
                }
                if (phrase.hasFeature(InternalFeature.SPECIFIER.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(InternalFeature.SPECIFIER.ToString(), phrase
                                                    .getFeature(InternalFeature.SPECIFIER.ToString()));
                }
                if (phrase.hasFeature(LexicalFeature.GENDER))
                {
                    ((SPhraseSpec)child).setFeature(LexicalFeature.GENDER, phrase
                                                    .getFeature(LexicalFeature.GENDER));
                }
                if (phrase.hasFeature(Feature.NUMBER.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(Feature.NUMBER.ToString(), phrase.getFeature(Feature.NUMBER.ToString()));
                }
                if (phrase.hasFeature(Feature.TENSE.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(Feature.TENSE.ToString(), phrase.getFeatureTense(Feature.TENSE.ToString()));
                }
                if (phrase.hasFeature(Feature.PERSON.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(Feature.PERSON.ToString(), phrase.getFeature(Feature.PERSON.ToString()));
                }
                if (phrase.hasFeature(Feature.NEGATED.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(Feature.NEGATED.ToString(), phrase.getFeature(Feature.NEGATED.ToString()));
                }
                if (phrase.hasFeature(Feature.MODAL.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(Feature.MODAL.ToString(), phrase.getFeature(Feature.MODAL.ToString()));
                }
                if (phrase.hasFeature(InternalFeature.DISCOURSE_FUNCTION.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(InternalFeature.DISCOURSE_FUNCTION.ToString(), phrase
                                                    .getFeature(InternalFeature.DISCOURSE_FUNCTION.ToString()));
                }
                if (phrase.hasFeature(Feature.FORM.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(Feature.FORM.ToString(), phrase.getFeature(Feature.FORM.ToString()));
                }
                if (phrase.hasFeature(InternalFeature.CLAUSE_STATUS.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(InternalFeature.CLAUSE_STATUS.ToString(), phrase
                                                    .getFeature(InternalFeature.CLAUSE_STATUS.ToString()));
                }
                if (phrase.hasFeature(Feature.INTERROGATIVE_TYPE.ToString()))
                {
                    ((SPhraseSpec)child).setFeature(InternalFeature.IGNORE_MODAL.ToString(), true);
                }
            }
            else
            {
                if (phrase.hasFeature(Feature.PROGRESSIVE.ToString()))
                {
                    child.setFeature(Feature.PROGRESSIVE.ToString(), phrase
                                     .getFeature(Feature.PROGRESSIVE.ToString()));
                }
                if (phrase.hasFeature(Feature.PERFECT.ToString()))
                {
                    child.setFeature(Feature.PERFECT.ToString(), phrase
                                     .getFeature(Feature.PERFECT.ToString()));
                }
                if (phrase.hasFeature(InternalFeature.SPECIFIER.ToString()))
                {
                    child.setFeature(InternalFeature.SPECIFIER.ToString(), phrase
                                     .getFeature(InternalFeature.SPECIFIER.ToString()));
                }
                if (phrase.hasFeature(LexicalFeature.GENDER))
                {
                    child.setFeature(LexicalFeature.GENDER, phrase
                                     .getFeature(LexicalFeature.GENDER));
                }
                if (phrase.hasFeature(Feature.NUMBER.ToString()))
                {
                    child.setFeature(Feature.NUMBER.ToString(), phrase.getFeature(Feature.NUMBER.ToString()));
                }
                if (phrase.hasFeature(Feature.TENSE.ToString()))
                {
                    child.setFeature(Feature.TENSE.ToString(), phrase.getFeatureTense(Feature.TENSE.ToString()));
                }
                if (phrase.hasFeature(Feature.PERSON.ToString()))
                {
                    child.setFeature(Feature.PERSON.ToString(), phrase.getFeature(Feature.PERSON.ToString()));
                }
                if (phrase.hasFeature(Feature.NEGATED.ToString()))
                {
                    child.setFeature(Feature.NEGATED.ToString(), phrase.getFeature(Feature.NEGATED.ToString()));
                }
                if (phrase.hasFeature(Feature.MODAL.ToString()))
                {
                    child.setFeature(Feature.MODAL.ToString(), phrase.getFeature(Feature.MODAL.ToString()));
                }
                if (phrase.hasFeature(InternalFeature.DISCOURSE_FUNCTION.ToString()))
                {
                    child.setFeature(InternalFeature.DISCOURSE_FUNCTION.ToString(), phrase
                                     .getFeature(InternalFeature.DISCOURSE_FUNCTION.ToString()));
                }
                if (phrase.hasFeature(Feature.FORM.ToString()))
                {
                    child.setFeature(Feature.FORM.ToString(), phrase.getFeature(Feature.FORM.ToString()));
                }
                if (phrase.hasFeature(InternalFeature.CLAUSE_STATUS.ToString()))
                {
                    child.setFeature(InternalFeature.CLAUSE_STATUS.ToString(), phrase
                                     .getFeature(InternalFeature.CLAUSE_STATUS.ToString()));
                }
                if (phrase.hasFeature(Feature.INTERROGATIVE_TYPE.ToString()))
                {
                    child.setFeature(InternalFeature.IGNORE_MODAL.ToString(), true);
                }
            }
        }