Ejemplo n.º 1
0
        public void SimpleRuleNotUnapplied()
        {
            var any = FeatureStruct.New().Symbol(HCFeatureSystem.Segment).Value;

            var prule = new MetathesisRule
            {
                Name    = "rule1",
                Pattern = Pattern <Word, ShapeNode> .New()
                          .Group("1", group => group.Annotation(Char(Table3, "i")))
                          .Group("2", group => group.Annotation(Char(Table3, "u"))).Value,
                LeftSwitchName  = "2",
                RightSwitchName = "1"
            };

            Morphophonemic.PhonologicalRules.Add(prule);

            var iSuffix = new AffixProcessRule
            {
                Name  = "i_suffix",
                Gloss = "3SG"
            };

            Morphophonemic.MorphologicalRules.Add(iSuffix);
            iSuffix.Allomorphs.Add(new AffixProcessAllomorph
            {
                Lhs = { Pattern <Word, ShapeNode> .New("1").Annotation(any).OneOrMore.Value },
                Rhs = { new CopyFromInput("1"), new InsertSegments(Table3, "i") }
            });

            var morpher = new Morpher(SpanFactory, TraceManager, Language);

            AssertMorphsEqual(morpher.ParseWord("pui"), "52 3SG");
        }
Ejemplo n.º 2
0
        public void ComplexRule()
        {
            var any = FeatureStruct.New().Symbol(HCFeatureSystem.Segment).Value;

            var rule1 = new MetathesisRule
            {
                Name    = "rule1",
                Pattern = Pattern <Word, ShapeNode> .New()
                          .Group("1", group => group.Annotation(Char(Table3, "i")))
                          .Group("middle", group => group.Annotation(Char(Table3, "+")))
                          .Group("2", group => group.Annotation(Char(Table3, "u")))
                          .Group("rightEnv", group => group.Annotation(HCFeatureSystem.RightSideAnchor)).Value,
                LeftSwitchName  = "2",
                RightSwitchName = "1"
            };

            Morphophonemic.PhonologicalRules.Add(rule1);

            var uSuffix = new AffixProcessRule
            {
                Name  = "u_suffix",
                Gloss = "3SG"
            };

            Morphophonemic.MorphologicalRules.Add(uSuffix);
            uSuffix.Allomorphs.Add(new AffixProcessAllomorph
            {
                Lhs = { Pattern <Word, ShapeNode> .New("1").Annotation(any).OneOrMore.Value },
                Rhs = { new CopyFromInput("1"), new InsertSegments(Table3, "+u") }
            });

            var morpher = new Morpher(SpanFactory, TraceManager, Language);

            AssertMorphsEqual(morpher.ParseWord("mui"), "53 3SG");
        }
Ejemplo n.º 3
0
        public void SimpleRule()
        {
            var rule1 = new MetathesisRule
            {
                Name    = "rule1",
                Pattern = Pattern <Word, ShapeNode> .New()
                          .Group("1", group => group.Annotation(Char(Table3, "i")))
                          .Group("2", group => group.Annotation(Char(Table3, "u"))).Value,
                LeftSwitchName  = "2",
                RightSwitchName = "1"
            };

            Morphophonemic.PhonologicalRules.Add(rule1);

            var morpher = new Morpher(SpanFactory, TraceManager, Language);

            AssertMorphsEqual(morpher.ParseWord("mui"), "51");
        }
Ejemplo n.º 4
0
        private void LoadMetathesisRule(XElement metathesisElem)
        {
            var metathesisRule = new MetathesisRule
            {
                Name = (string) metathesisElem.Element("Name"),
                Direction = GetDirection((string) metathesisElem.Attribute("multipleApplicationOrder")),
                LeftSwitchName = "r",
                RightSwitchName = "l"
            };

            var groupNames = new Dictionary<string, string>
            {
                {(string) metathesisElem.Attribute("leftSwitch"), "r"},
                {(string) metathesisElem.Attribute("rightSwitch"), "l"}
            };
            metathesisRule.Pattern = LoadPhoneticTemplate(metathesisElem.Elements("StructuralDescription").Elements("PhoneticTemplate").Single(),
                new Dictionary<string, Tuple<string, SymbolicFeature>>(), null, groupNames);

            _language.PhonologicalRules.Add(metathesisRule);
            _prules[(string) metathesisElem.Attribute("id")] = metathesisRule;
        }