コード例 #1
0
        // note that addFrontModifier, addPostModifier, addPreModifier are inherited
        // from PhraseElement
        // likewise getFrontModifiers, getPostModifiers, getPreModifiers

        /**
         * Add a modifier to a clause Use heuristics to decide where it goes
         *
         * @param modifier
         */


        public override void addModifier(object modifier)
        {
            // adverb is frontModifier if sentenceModifier
            // otherwise adverb is preModifier
            // string which is one lexicographic word is looked up in lexicon,
            // above rules apply if adverb
            // Everything else is postModifier

            if (modifier == null)
            {
                return;
            }

            // get modifier as NLGElement if possible
            INLGElement modifierElement = null;

            if (modifier is INLGElement)
            {
                modifierElement = (INLGElement)modifier;
            }
            else if (modifier is string)
            {
                var modifierString = (string)modifier;
                if (modifierString.length() > 0 && !modifierString.contains(" "))
                {
                    modifierElement = getFactory().createWord(modifier,
                                                              new LexicalCategory_ANY());
                }
            }

            // if no modifier element, must be a complex string
            if (modifierElement == null)
            {
                addPostModifier((string)modifier);
                return;
            }

            // AdvP is premodifer (probably should look at head to see if
            // sentenceModifier)
            if (modifierElement is AdvPhraseSpec)
            {
                addPreModifier(modifierElement);
                return;
            }

            // extract WordElement if modifier is a single word
            WordElement modifierWord = null;

            if (modifierElement != null && modifierElement is WordElement)
            {
                modifierWord = (WordElement)modifierElement;
            }
            else if (modifierElement != null && modifierElement is InflectedWordElement)
            {
                modifierWord = ((InflectedWordElement)modifierElement)
                               .getBaseWord();
            }

            if (modifierWord != null && (modifierWord.getCategory().enumType == (int)LexicalCategoryEnum.ADVERB))
            {
                // adverb rules
                if (modifierWord
                    .getFeatureAsBoolean(LexicalFeature.SENTENCE_MODIFIER))
                {
                    addFrontModifier(modifierWord);
                }
                else
                {
                    addPreModifier(modifierWord);
                }
                return;
            }

            // default case
            addPostModifier(modifierElement);
        }