Beispiel #1
0
        private void AddSegDef(CharacterDefinitionTable table, FeatureSystem phoneticFeatSys, string strRep, params string[] symbols)
        {
            var fs = new FeatureStruct();

            foreach (string symbolID in symbols)
            {
                FeatureSymbol symbol = phoneticFeatSys.GetSymbol(symbolID);
                fs.AddValue(symbol.Feature, new SymbolicFeatureValue(symbol));
            }
            table.AddSegment(strRep, fs);
        }
 private void AddSegDef(CharacterDefinitionTable table, FeatureSystem phoneticFeatSys, string strRep, params string[] symbols)
 {
     var fs = new FeatureStruct();
     foreach (string symbolID in symbols)
     {
         FeatureSymbol symbol = phoneticFeatSys.GetSymbol(symbolID);
         fs.AddValue(symbol.Feature, new SymbolicFeatureValue(symbol));
     }
     table.AddSegment(strRep, fs);
 }
Beispiel #3
0
        private void TestBinaryOperation <TResult>(IEqualityComparer <TResult> comparer, Func <FeatureStruct, FeatureStruct, TResult> resultsSelector,
                                                   Func <FeatureStruct, FeatureStruct, VariableBindings, TResult> varResultsSelector, params Func <FeatureSystem, TResult>[] expectedSelectors)
        {
            // simple
            var featSys = new FeatureSystem
            {
                new SymbolicFeature("a", new FeatureSymbol("a1"), new FeatureSymbol("a2"), new FeatureSymbol("a3")),
                new SymbolicFeature("b", new FeatureSymbol("b1"), new FeatureSymbol("b2"), new FeatureSymbol("b3")),
                new SymbolicFeature("c", new FeatureSymbol("c1"), new FeatureSymbol("c2"), new FeatureSymbol("c3"))
            };

            featSys.Freeze();

            FeatureStruct fs1 = FeatureStruct.NewMutable(featSys).Symbol("a1").Symbol("b1").Value;
            FeatureStruct fs2 = FeatureStruct.NewMutable(featSys).Symbol("a2").Symbol("c2").Value;

            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[0](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Symbol("a1", "a2").Symbol("b1").Symbol("c2").Value;
            fs2 = FeatureStruct.NewMutable(featSys).Symbol("a2").Symbol("c2").Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[1](featSys)).Using(comparer));

            // complex
            featSys = new FeatureSystem
            {
                new ComplexFeature("cx1"),
                new SymbolicFeature("a", new FeatureSymbol("a1"), new FeatureSymbol("a2"), new FeatureSymbol("a3")),
                new ComplexFeature("cx2"),
                new SymbolicFeature("b", new FeatureSymbol("b1"), new FeatureSymbol("b2"), new FeatureSymbol("b3")),
                new ComplexFeature("cx3"),
                new SymbolicFeature("c", new FeatureSymbol("c1"), new FeatureSymbol("c2"), new FeatureSymbol("c3")),
                new ComplexFeature("cx4"),
                new SymbolicFeature("d", new FeatureSymbol("d1"), new FeatureSymbol("d2"), new FeatureSymbol("d3"))
            };
            featSys.Freeze();

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1.Symbol("a1"))
                  .Feature("cx2").EqualTo(cx2 => cx2.Symbol("b1"))
                  .Feature("cx4").EqualTo(cx4 => cx4.Symbol("d1")).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1.Symbol("a2"))
                  .Feature("cx3").EqualTo(cx2 => cx2.Symbol("c2"))
                  .Feature("cx4").EqualTo(cx4 => cx4.Symbol("d2", "d3")).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[2](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1.Symbol("a1", "a2"))
                  .Feature("cx2").EqualTo(cx2 => cx2.Symbol("b1"))
                  .Feature("cx4").EqualTo(cx4 => cx4.Symbol("d1")).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1.Symbol("a2"))
                  .Feature("cx3").EqualTo(cx2 => cx2.Symbol("c2"))
                  .Feature("cx4").EqualTo(cx4 => cx4.Symbol("d1", "d2")).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[3](featSys)).Using(comparer));

            // re-entrant
            featSys = new FeatureSystem
            {
                new ComplexFeature("cx1"),
                new SymbolicFeature("a", new FeatureSymbol("a1"), new FeatureSymbol("a2"), new FeatureSymbol("a3"), new FeatureSymbol("a4")),
                new ComplexFeature("cx2")
            };
            featSys.Freeze();

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1.Symbol("a1"))
                  .Feature("cx2").ReferringTo(1).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx2").EqualTo(cx2 => cx2.Symbol("a2")).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[4](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1.Symbol("a1", "a2")).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx2").EqualTo(1, cx2 => cx2.Symbol("a1", "a3"))
                  .Feature("cx1").ReferringTo(1).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[5](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1.Symbol("a1", "a2")).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx2").EqualTo(cx2 => cx2.Symbol(1, "a1", "a3"))
                  .Feature("cx1").EqualTo(cx1 => cx1.Feature("a").ReferringTo(1)).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[6](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1.Symbol("a1"))
                  .Feature("cx2").ReferringTo(1).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx2").EqualTo(1, cx2 => cx2.Symbol("a1", "a2"))
                  .Feature("cx1").ReferringTo(1).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[7](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1.Symbol("a1", "a2"))
                  .Feature("cx2").ReferringTo(1).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx2").EqualTo(1, cx2 => cx2.Symbol("a2", "a3", "a4"))
                  .Feature("cx1").ReferringTo(1).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[8](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1.Symbol(1, "a1", "a2"))
                  .Feature("cx2").EqualTo(cx2 => cx2.Feature("a").ReferringTo(1)).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx2").EqualTo(cx2 => cx2.Symbol(1, "a2", "a3", "a4"))
                  .Feature("cx1").EqualTo(cx1 => cx1.Feature("a").ReferringTo(1)).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[9](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1.Symbol("a1", "a2")).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx2").EqualTo(1, cx2 => cx2.Symbol("a3"))
                  .Feature("cx1").ReferringTo(1).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[10](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1.Symbol("a1"))
                  .Feature("cx2").ReferringTo(1).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx2").EqualTo(1, cx2 => cx2.Symbol("a2", "a3", "a4"))
                  .Feature("cx1").ReferringTo(1).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[11](featSys)).Using(comparer));

            // cyclic
            featSys = new FeatureSystem
            {
                new ComplexFeature("cx1"),
                new SymbolicFeature("a", new FeatureSymbol("a1"), new FeatureSymbol("a2"), new FeatureSymbol("a3")),
                new SymbolicFeature("b", new FeatureSymbol("b1"), new FeatureSymbol("b2"), new FeatureSymbol("b3")),
                new SymbolicFeature("c", new FeatureSymbol("c1"), new FeatureSymbol("c2"), new FeatureSymbol("c3")),
                new ComplexFeature("cx2")
            };
            featSys.Freeze();

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1
                                                                           .Symbol("a1").Symbol("b1")).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1
                                                                           .Symbol("a2").Feature("cx2").ReferringTo(1)).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[12](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1
                                                                           .Symbol("a1", "a2").Feature("cx2").ReferringTo(1)).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1
                                                                           .Symbol("a2").Symbol("b2")).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[13](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1
                                                                           .Symbol("a1", "a2").Symbol("b1").Feature("cx2").EqualTo(cx2 => cx2.Symbol("c1"))).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1
                                                                           .Symbol("a2").Feature("cx2").ReferringTo(1)).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[14](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(cx1 => cx1
                                                                           .Symbol("a1").Symbol("b1").Feature("cx2").EqualTo(cx2 => cx2.Symbol("c1", "c2"))).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1
                                                                           .Symbol("a2").Symbol("c2").Feature("cx2").ReferringTo(1)).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[15](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1
                                                                           .Symbol("a1").Symbol("b1").Symbol("c1").Feature("cx2").ReferringTo(1)).Value;
            fs2 = FeatureStruct.NewMutable(featSys).Feature("cx1").EqualTo(1, cx1 => cx1
                                                                           .Symbol("a2").Symbol("c2").Feature("cx2").ReferringTo(1)).Value;
            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[16](featSys)).Using(comparer));

            // variable
            featSys = new FeatureSystem
            {
                new SymbolicFeature("a", new FeatureSymbol("a+", "+"), new FeatureSymbol("a-", "-")),
                new SymbolicFeature("b", new FeatureSymbol("b+", "+"), new FeatureSymbol("b-", "-"))
            };
            featSys.Freeze();

            fs1 = FeatureStruct.NewMutable(featSys)
                  .Feature("a").EqualToVariable("var1")
                  .Symbol("b-").Value;

            fs2 = FeatureStruct.NewMutable(featSys)
                  .Feature("a").Not.EqualToVariable("var1")
                  .Symbol("b-").Value;

            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[17](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys)
                  .Feature("a").EqualToVariable("var1")
                  .Symbol("b-").Value;

            fs2 = FeatureStruct.NewMutable(featSys)
                  .Symbol("a+")
                  .Symbol("b-").Value;

            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[18](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys)
                  .Symbol("a+")
                  .Symbol("b-").Value;

            fs2 = FeatureStruct.NewMutable(featSys)
                  .Feature("a").Not.EqualToVariable("var1")
                  .Symbol("b-").Value;

            Assert.That(resultsSelector(fs1, fs2), Is.EqualTo(expectedSelectors[19](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys)
                  .Symbol("a+")
                  .Symbol("b-").Value;

            fs2 = FeatureStruct.NewMutable(featSys)
                  .Feature("a").Not.EqualToVariable("var1")
                  .Symbol("b-").Value;

            var varBindings = new VariableBindings();

            varBindings["var1"] = new SymbolicFeatureValue(featSys.GetSymbol("a-"));
            Assert.That(varResultsSelector(fs1, fs2, varBindings), Is.EqualTo(expectedSelectors[20](featSys)).Using(comparer));

            fs1 = FeatureStruct.NewMutable(featSys)
                  .Symbol("a+")
                  .Symbol("b-").Value;

            fs2 = FeatureStruct.NewMutable(featSys)
                  .Feature("a").Not.EqualToVariable("var1")
                  .Symbol("b-").Value;

            varBindings         = new VariableBindings();
            varBindings["var1"] = new SymbolicFeatureValue(featSys.GetSymbol("a+"));
            Assert.That(varResultsSelector(fs1, fs2, varBindings), Is.EqualTo(expectedSelectors[21](featSys)).Using(comparer));
        }
Beispiel #4
0
        private AlineScorer CreateScorer(bool soundChangeScoringEnabled, bool syllablePositionCostEnabled)
        {
            return(new AlineScorer(_segmentPool, new[] { _featSys.GetFeature <SymbolicFeature>("height"), _featSys.GetFeature <SymbolicFeature>("backness"), _featSys.GetFeature <SymbolicFeature>("round") },
                                   new[] { _featSys.GetFeature <SymbolicFeature>("place"), _featSys.GetFeature <SymbolicFeature>("manner"), _featSys.GetFeature <SymbolicFeature>("voice") },
                                   new Dictionary <SymbolicFeature, int>
            {
                { _featSys.GetFeature <SymbolicFeature>("height"), 10 },
                { _featSys.GetFeature <SymbolicFeature>("backness"), 10 },
                { _featSys.GetFeature <SymbolicFeature>("round"), 2 },
                { _featSys.GetFeature <SymbolicFeature>("place"), 40 },
                { _featSys.GetFeature <SymbolicFeature>("manner"), 50 },
                { _featSys.GetFeature <SymbolicFeature>("voice"), 5 }
            }, new Dictionary <FeatureSymbol, int>
            {
                { _featSys.GetSymbol("bilabial"), 100 },
                { _featSys.GetSymbol("labiodental"), 90 },
                { _featSys.GetSymbol("dental"), 80 },
                { _featSys.GetSymbol("alveolar"), 70 },
                { _featSys.GetSymbol("retroflex"), 60 },
                { _featSys.GetSymbol("palato-alveolar"), 50 },
                { _featSys.GetSymbol("palatal"), 40 },
                { _featSys.GetSymbol("velar"), 30 },
                { _featSys.GetSymbol("uvular"), 20 },
                { _featSys.GetSymbol("pharyngeal"), 10 },
                { _featSys.GetSymbol("glottal"), 0 },

                { _featSys.GetSymbol("stop"), 100 },
                { _featSys.GetSymbol("affricate"), 95 },
                { _featSys.GetSymbol("fricative"), 90 },
                { _featSys.GetSymbol("approximant"), 80 },
                { _featSys.GetSymbol("trill"), 60 },
                { _featSys.GetSymbol("flap"), 50 },
                { _featSys.GetSymbol("close-vowel"), 30 },
                { _featSys.GetSymbol("mid-vowel"), 15 },
                { _featSys.GetSymbol("open-vowel"), 0 },

                { _featSys.GetSymbol("voice+"), 100 },
                { _featSys.GetSymbol("voice-"), 0 },

                { _featSys.GetSymbol("close"), 100 },
                { _featSys.GetSymbol("near-close"), 85 },
                { _featSys.GetSymbol("close-mid"), 65 },
                { _featSys.GetSymbol("mid"), 50 },
                { _featSys.GetSymbol("open-mid"), 35 },
                { _featSys.GetSymbol("near-open"), 15 },
                { _featSys.GetSymbol("open"), 0 },

                { _featSys.GetSymbol("front"), 100 },
                { _featSys.GetSymbol("near-front"), 80 },
                { _featSys.GetSymbol("central"), 50 },
                { _featSys.GetSymbol("near-back"), 20 },
                { _featSys.GetSymbol("back"), 0 },

                { _featSys.GetSymbol("round+"), 100 },
                { _featSys.GetSymbol("round-"), 0 }
            }, Enumerable.Empty <SoundClass>(), soundChangeScoringEnabled, syllablePositionCostEnabled));
        }
 private bool AddSymbols(string[] symbolIDs, int id)
 {
     FeatureSymbol[] symbols = symbolIDs.Select(symID => _featSys.GetSymbol(symID)).ToArray();
     return(AddSymbols(symbols[0].Feature, symbols, id));
 }