void LoadMRule(XmlElement mruleNode) { string id = mruleNode.GetAttribute("id"); string name = mruleNode.SelectSingleNode("Name").InnerText; AffixalMorphologicalRule mrule = new AffixalMorphologicalRule(id, name, m_curMorpher); XmlElement glossElem = mruleNode.SelectSingleNode("Gloss") as XmlElement; if (glossElem != null) mrule.Gloss = new Gloss(glossElem.GetAttribute("id"), glossElem.InnerText, m_curMorpher); string multApp = mruleNode.GetAttribute("multipleApplication"); if (!string.IsNullOrEmpty(multApp)) mrule.MaxNumApps = Convert.ToInt32(multApp); mrule.RequiredPOSs = LoadPOSs(mruleNode.GetAttribute("requiredPartsOfSpeech")); string outPOSId = mruleNode.GetAttribute("outputPartOfSpeech"); PartOfSpeech outPOS = null; if (!string.IsNullOrEmpty(outPOSId)) { outPOS = m_curMorpher.GetPOS(outPOSId); if (outPOS == null) throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownPOS, outPOSId), outPOSId); } mrule.OutPOS = outPOS; mrule.RequiredHeadFeatures = LoadSynFeats(mruleNode.SelectSingleNode("RequiredHeadFeatures"), m_curMorpher.HeadFeatureSystem); mrule.RequiredFootFeatures = LoadSynFeats(mruleNode.SelectSingleNode("RequiredFootFeatures"), m_curMorpher.FootFeatureSystem); mrule.OutHeadFeatures = LoadSynFeats(mruleNode.SelectSingleNode("OutputHeadFeatures"), m_curMorpher.HeadFeatureSystem); mrule.OutFootFeatures = LoadSynFeats(mruleNode.SelectSingleNode("OutputFootFeatures"), m_curMorpher.FootFeatureSystem); HCObjectSet<Feature> obligHeadFeats = new HCObjectSet<Feature>(); string obligHeadIdsStr = mruleNode.GetAttribute("outputObligatoryFeatures"); if (!string.IsNullOrEmpty(obligHeadIdsStr)) { string[] obligHeadIds = obligHeadIdsStr.Split(' '); foreach (string obligHeadId in obligHeadIds) { Feature feature = m_curMorpher.HeadFeatureSystem.GetFeature(obligHeadId); if (feature == null) throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownFeat, obligHeadId), obligHeadId); obligHeadFeats.Add(feature); } } mrule.ObligatoryHeadFeatures = obligHeadFeats; mrule.IsBlockable = mruleNode.GetAttribute("blockable") == "true"; XmlNodeList subruleList = mruleNode.SelectNodes("MorphologicalSubrules/MorphologicalSubruleStructure[@isActive='yes']"); foreach (XmlNode subruleNode in subruleList) { try { LoadMSubrule(subruleNode as XmlElement, mrule); } catch (LoadException le) { if (m_quitOnError) throw le; } } if (mrule.SubruleCount > 0) m_curMorpher.AddMorphologicalRule(mrule); }
MorphCoOccurrence LoadAlloCoOccur(XmlElement coOccurNode) { MorphCoOccurrence.AdjacencyType adjacency = GetAdjacencyType(coOccurNode.GetAttribute("adjacency")); string[] allomorphIds = coOccurNode.GetAttribute("allomorphs").Split(' '); HCObjectSet<HCObject> allomorphs = new HCObjectSet<HCObject>(); foreach (string allomorphId in allomorphIds) { Allomorph allomorph = m_curMorpher.GetAllomorph(allomorphId); if (allomorph == null) throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownAllo, allomorphId), allomorphId); allomorphs.Add(allomorph); } return new MorphCoOccurrence(allomorphs, MorphCoOccurrence.ObjectType.ALLOMORPH, adjacency); }
MorphCoOccurrence LoadMorphCoOccur(XmlElement coOccurNode) { MorphCoOccurrence.AdjacencyType adjacency = GetAdjacencyType(coOccurNode.GetAttribute("adjacency")); string[] morphemeIds = coOccurNode.GetAttribute("morphemes").Split(' '); HCObjectSet<HCObject> morphemes = new HCObjectSet<HCObject>(); foreach (string morphemeId in morphemeIds) { Morpheme morpheme = m_curMorpher.GetMorpheme(morphemeId); if (morpheme == null) throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownMorpheme, morphemeId), morphemeId); morphemes.Add(morpheme); } return new MorphCoOccurrence(morphemes, MorphCoOccurrence.ObjectType.MORPHEME, adjacency); }
IEnumerable<PartOfSpeech> LoadPOSs(string posIdsStr) { HCObjectSet<PartOfSpeech> result = new HCObjectSet<PartOfSpeech>(); if (!string.IsNullOrEmpty(posIdsStr)) { string[] posIds = posIdsStr.Split(' '); foreach (string posId in posIds) { PartOfSpeech pos = m_curMorpher.GetPOS(posId); if (pos == null) throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownPOS, posId), posId); result.Add(pos); } } return result; }
void LoadAffixTemplate(XmlElement tempNode, HCObjectSet<MorphologicalRule> templateRules) { string id = tempNode.GetAttribute("id"); string name = tempNode.SelectSingleNode("Name").InnerText; AffixTemplate template = new AffixTemplate(id, name, m_curMorpher); string posIdsStr = tempNode.GetAttribute("requiredPartsOfSpeech"); template.RequiredPOSs = LoadPOSs(posIdsStr); XmlNodeList slotList = tempNode.SelectNodes("Slot[@isActive='yes']"); foreach (XmlNode slotNode in slotList) { XmlElement slotElem = slotNode as XmlElement; string slotId = slotElem.GetAttribute("id"); string slotName = slotElem.SelectSingleNode("Name").InnerText; Slot slot = new Slot(slotId, slotName, m_curMorpher); string ruleIdsStr = slotElem.GetAttribute("morphologicalRules"); string[] ruleIds = ruleIdsStr.Split(' '); MorphologicalRule lastRule = null; foreach (string ruleId in ruleIds) { MorphologicalRule rule = m_curMorpher.GetMorphologicalRule(ruleId); if (rule != null) { slot.AddRule(rule); lastRule = rule; templateRules.Add(rule); } else { if (m_quitOnError) throw CreateUndefinedObjectException(string.Format(HCStrings.kstidUnknownMRule, ruleId), ruleId); } } string optionalStr = slotElem.GetAttribute("optional"); if (string.IsNullOrEmpty(optionalStr) && lastRule is RealizationalRule) slot.IsOptional = (lastRule as RealizationalRule).RealizationalFeatures.NumFeatures > 0; else slot.IsOptional = optionalStr == "true"; template.AddSlot(slot); } m_curMorpher.AddAffixTemplate(template); }
public ClosedValueInstance(FeatureValue value) { m_values = new HCObjectSet<FeatureValue>(); m_values.Add(value); }