protected WordPairAlignerSettings LoadSettings(Segmenter segmenter, FeatureSystem featSys, XElement elem) { var settings = new WordPairAlignerSettings(); var modeStr = (string)elem.Element(ConfigManager.Cog + "Mode"); if (modeStr != null) { switch (modeStr) { case "local": settings.Mode = AlignmentMode.Local; break; case "global": settings.Mode = AlignmentMode.Global; break; case "semi-global": settings.Mode = AlignmentMode.SemiGlobal; break; case "half-local": settings.Mode = AlignmentMode.HalfLocal; break; } } settings.ExpansionCompressionEnabled = (bool?)elem.Element(ConfigManager.Cog + "ExpansionCompressionEnabled") ?? false; XElement soundClassesElem = elem.Element(ConfigManager.Cog + "ContextualSoundClasses"); if (soundClassesElem != null && soundClassesElem.HasElements) { settings.ContextualSoundClasses = ConfigManager.LoadSoundClasses(segmenter, featSys, soundClassesElem); } return(settings); }
protected void SaveSettings(WordPairAlignerSettings settings, XElement elem) { string modeStr = null; switch (settings.Mode) { case AlignmentMode.Local: modeStr = "local"; break; case AlignmentMode.Global: modeStr = "global"; break; case AlignmentMode.SemiGlobal: modeStr = "semi-global"; break; case AlignmentMode.HalfLocal: modeStr = "half-local"; break; } elem.Add(new XElement(ConfigManager.Cog + "Mode", modeStr)); elem.Add(new XElement(ConfigManager.Cog + "ExpansionCompressionEnabled", settings.ExpansionCompressionEnabled)); if (settings.ContextualSoundClasses.Any()) { elem.Add(new XElement(ConfigManager.Cog + "ContextualSoundClasses", ConfigManager.SaveSoundClasses(settings.ContextualSoundClasses))); } }
public override IWordAligner Load(SpanFactory <ShapeNode> spanFactory, SegmentPool segmentPool, CogProject project, XElement elem) { WordPairAlignerSettings settings = LoadSettings(project.Segmenter, project.FeatureSystem, elem); XElement relevantFeaturesElem = elem.Element(ConfigManager.Cog + "RelevantFeatures"); Debug.Assert(relevantFeaturesElem != null); var relevantVowelFeatures = new List <SymbolicFeature>(); var relevantConsFeatures = new List <SymbolicFeature>(); var featureWeights = new Dictionary <SymbolicFeature, int>(); var valueMetrics = new Dictionary <FeatureSymbol, int>(); foreach (XElement featureElem in relevantFeaturesElem.Elements(ConfigManager.Cog + "RelevantFeature")) { var feature = project.FeatureSystem.GetFeature <SymbolicFeature>((string)featureElem.Attribute("ref")); if ((bool?)featureElem.Attribute("vowel") ?? false) { relevantVowelFeatures.Add(feature); } if ((bool?)featureElem.Attribute("consonant") ?? false) { relevantConsFeatures.Add(feature); } featureWeights[feature] = (int)featureElem.Attribute("weight"); foreach (XElement valueElem in featureElem.Elements(ConfigManager.Cog + "RelevantValue")) { FeatureSymbol symbol = feature.PossibleSymbols[(string)valueElem.Attribute("ref")]; valueMetrics[symbol] = (int)valueElem.Attribute("metric"); } } return(new Aline(segmentPool, relevantVowelFeatures, relevantConsFeatures, featureWeights, valueMetrics, settings)); }