/** * 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); }
/** * 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); }
// 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); }
/** * 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()); }
// 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); }