Beispiel #1
0
        internal override bool IsWordValid(Morpher morpher, Word word)
        {
            if (!base.IsWordValid(morpher, word))
            {
                return(false);
            }

            if (IsBound && word.Allomorphs.Count == 1)
            {
                if (morpher.TraceManager.IsTracing)
                {
                    morpher.TraceManager.ParseFailed(morpher.Language, word, FailureReason.BoundRoot, this, null);
                }
                return(false);
            }

            if (StemName != null && !StemName.IsRequiredMatch(word.SyntacticFeatureStruct))
            {
                if (morpher.TraceManager.IsTracing)
                {
                    morpher.TraceManager.ParseFailed(morpher.Language, word, FailureReason.RequiredStemName, this, StemName);
                }
                return(false);
            }

            foreach (RootAllomorph otherAllo in ((LexEntry)Morpheme).Allomorphs.Where(a => a != this && a.StemName != null))
            {
                if (!otherAllo.StemName.IsExcludedMatch(word.SyntacticFeatureStruct, StemName))
                {
                    if (morpher.TraceManager.IsTracing)
                    {
                        morpher.TraceManager.ParseFailed(morpher.Language, word, FailureReason.ExcludedStemName, this, otherAllo.StemName);
                    }
                    return(false);
                }
            }

            return(true);
        }
Beispiel #2
0
 public bool IsExcludedMatch(FeatureStruct fs, StemName stemName)
 {
     return(_regions.Except(stemName == null ? Enumerable.Empty <FeatureStruct>() : stemName.Regions, FreezableEqualityComparer <FeatureStruct> .Default).All(r => !r.Subsumes(fs)));
 }
Beispiel #3
0
 public bool IsExcludedMatch(FeatureStruct fs, StemName stemName)
 {
     return _regions.Except(stemName == null ? Enumerable.Empty<FeatureStruct>() : stemName.Regions, FreezableEqualityComparer<FeatureStruct>.Default).All(r => !r.Subsumes(fs));
 }
        private void LoadStemName(XElement stemNameElem)
        {
            var posIDs = (string) stemNameElem.Attribute("partsOfSpeech");
            FeatureSymbol[] pos = posIDs.Split(' ').Select(id => _posFeature.PossibleSymbols[id]).ToArray();
            var regions = new List<FeatureStruct>();
            foreach (XElement regionElem in stemNameElem.Elements("Regions").Elements("Region"))
            {
                var fs = new FeatureStruct();
                fs.AddValue(_posFeature, pos);
                XElement headFeatElem = regionElem.Element("AssignedHeadFeatures");
                if (headFeatElem != null)
                    fs.AddValue(_headFeature, LoadFeatureStruct(headFeatElem, _language.SyntacticFeatureSystem));
                XElement footFeatElem = regionElem.Element("AssignedFootFeatures");
                if (footFeatElem != null)
                    fs.AddValue(_footFeature, LoadFeatureStruct(footFeatElem, _language.SyntacticFeatureSystem));
                fs.Freeze();
                regions.Add(fs);
            }

            var stemName = new StemName(regions) {Name = (string) stemNameElem.Element("Name")};
            _language.StemNames.Add(stemName);
            _stemNames[(string) stemNameElem.Attribute("id")] = stemName;
        }