コード例 #1
0
        /**
         * quick-and-dirty routine for getting morph variants should be replaced by
         * something better!
         *
         * @param word
         * @return
         */

        public HashSet <string> getVariants(WordElement word)
        {
            var variants = new HashSet <string>();

            variants.Add(word.getBaseForm());
            var category = word.getCategory();

            if (category is ILexicalCategory)
            {
                switch (category.enumType)
                {
                case (int)LexicalCategoryEnum.NOUN:
                    variants.add(getVariant(word, LexicalFeature.PLURAL, "s"));
                    break;

                case (int)LexicalCategoryEnum.ADJECTIVE:
                    variants
                    .add(getVariant(word, LexicalFeature.COMPARATIVE, "er"));
                    variants
                    .add(getVariant(word, LexicalFeature.SUPERLATIVE, "est"));
                    break;

                case (int)LexicalCategoryEnum.VERB:
                    variants.add(getVariant(word, LexicalFeature.PRESENT3S, "s"));
                    variants.add(getVariant(word, LexicalFeature.PAST, "ed"));
                    variants.add(getVariant(word, LexicalFeature.PAST_PARTICIPLE,
                                            "ed"));
                    variants.add(getVariant(word,
                                            LexicalFeature.PRESENT_PARTICIPLE, "ing"));
                    break;
                }
            }
            return(variants);
        }
コード例 #2
0
        /**
         * creates a duplicate WordElement from an existing WordElement
         *
         * @param currentWord
         *            - An existing WordElement
         */

        public WordElement(WordElement currentWord)
        {
            baseForm = currentWord.getBaseForm();
            setCategory(currentWord.getCategory());
            id          = currentWord.getId();
            inflVars    = currentWord.getInflectionalVariants();
            defaultInfl = (Inflection)currentWord.getDefaultInflectionalVariant();
            setFeatures(currentWord);
        }
コード例 #3
0
        // note that addFrontModifier, addPostModifier, addPreModifier are inherited from PhraseElement
        // likewise getFrontModifiers, getPostModifiers, getPreModifiers


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

        public override void addModifier(object modifier)
        {
            // adverb is preModifier
            // string which is one lexicographic word is looked up in lexicon,
            // if it is an adverb than it becomes a preModifier
            // 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;
            }

            // 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)
            {
                addPreModifier(modifierWord);
                return;
            }

            // default case
            addPostModifier(modifierElement);
        }
コード例 #4
0
        /**
         * Constructs a new inflected word from a WordElement
         *
         * @param word
         *            underlying wordelement
         */

        public InflectedWordElement(WordElement word)
        {
            setFeature(InternalFeature.BASE_WORD.ToString(), word);
            // AG: changed to use the default spelling variant
            // setFeature(LexicalFeature.BASE_FORM, word.getBaseForm());
            var defaultSpelling = word.getDefaultSpellingVariant();

            setFeature(LexicalFeature.BASE_FORM, defaultSpelling);
            setCategory(word.getCategory());
        }
コード例 #5
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);
        }