コード例 #1
0
        public void TestFireRuleI()
        {
            AutomLetter     al;
            int             pos;
            string          tstAL;
            TheText         tt;
            List <PhonWord> pws;
            int             wordI;
            string          rTxt;

            ColConfWin.Init();
            TheText.Init();

            Config conf = new Config();

            tstAL = @"'i' : [['ing','n','m','nm','prec_2cons','lldeb','vill','mill','tranquille',
				'ill','@ill','@il','ll','ui','ient_1','ient_2','ie','i_voyelle', '*'],
				{'ing':[{'-':/[bcçdfghjklmnpqrstvwxz]/i,'+':/ng$/i},'i',1],
				'n':[{'+':/n[bcçdfghjklmpqrstvwxz]/i},'e_tilda',2],
				'm':[{'+':/m[bcçdfghjklnpqrstvwxz]/i},'e_tilda',2],
				'nm':[{'+':/[n|m]$/i},'e_tilda',2],
                'prec_2cons':[{'-':/[ptkcbdgfv][lr]/i, '+':/[aäâeéèêëoôöuù]/i},'i_j',1], // précédé de 2 consonnes (en position 3), doit apparaître comme [ij] PAE: rajouté les voyelles
				'lldeb':[{'-':/^/i,'+':/ll/i},'i',1],
				'vill':[{'-':/v/i,'+':/ll/i},'i',1],
				'mill':[{'-':/m/i,'+':/ll/i},'i',1],
				'tranquille':[{'-':/tranqu/i,'+':/ll/i},'i',1],
				'ill':[{'+':/ll/i,'-':/[bcçdfghjklmnpqrstvwxz](u?)/i},'i',1], // précédé éventuellement d'un u et d'une consonne, donne le son [i]
				'@ill':[{'-':/[aeo]/i,'+':/ll/i},'j',3], // par défaut précédé d'une voyelle et suivi de 'll' donne le son [j]
				'@il':[{'-':/[aeou]/i,'+':/l(s?)$/i},'j',2], // par défaut précédé d'une voyelle et suivi de 'l' donne le son [j]
				'll':[{'+':/ll/i},'j',3], // par défaut avec ll donne le son [j]
				'ui':[{'-':/u/i,'+':/ent/i},'i',1], // essuient, appuient
				'ient_1':[this.Regle_ient,'i',1], // règle spécifique pour différencier les verbes du premier groupe 3ème pers pluriel
				'ient_2':[{'+':/ent(s)?$/i},'j',1], // si la règle précédente ne fonctionne pas
				'ie':[{'+':/e(s|nt)?$/i},'i',1], // mots terminés par -ie(s|nt)
				'i_voyelle':[{'+':/[aäâeéèêëoôöuù]/i},'j',1], // i suivi d'une voyelle donne [j]
				'*':[{},'i',1]}]"                ;
            pos   = 0;
            al    = new AutomLetter(tstAL, ref pos);
            tt    = new TheText(@"briefing, berlingot, sapin, imbécile, limbe, afin, prier, ville, paille, triage,
                               appartient, amplifient, glorifient");
            pws   = tt.GetPhonWordList(conf);

            foreach (PhonWord pw in pws)
            {
                pw.ClearPhons();
            }

            // briefing
            wordI = 0;
            pos   = 5;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(6, pos);
            Assert.AreEqual("i", pws[wordI].Phonetique());

            // berlingot
            wordI = 1;
            pos   = 4;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(6, pos);
            Assert.AreEqual("5", pws[wordI].Phonetique());

            // sapin
            wordI = 2;
            pos   = 3;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(5, pos);
            Assert.AreEqual("5", pws[wordI].Phonetique());

            // imbécile
            wordI = 3;
            pos   = 0;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(2, pos);
            Assert.AreEqual("5", pws[wordI].Phonetique());

            // limbe
            wordI = 4;
            pos   = 1;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(3, pos);
            Assert.AreEqual("5", pws[wordI].Phonetique());

            // afin
            wordI = 5;
            pos   = 2;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(4, pos);
            Assert.AreEqual("5", pws[wordI].Phonetique());

            // prier
            wordI = 6;
            pos   = 2;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(3, pos);
            Assert.AreEqual("ij", pws[wordI].Phonetique());

            // ville
            wordI = 7;
            pos   = 1;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(2, pos);
            Assert.AreEqual("i", pws[wordI].Phonetique());

            // paille
            wordI = 8;
            pos   = 2;
            al.FireRule(pws[wordI], ref pos, conf);
            rTxt = pws[wordI].AllStringInfo();
            StringAssert.Matches(rTxt, new Regex(@"Rule: @ill"));
            Assert.AreEqual(5, pos);
            Assert.AreEqual("j", pws[wordI].Phonetique());

            // triage
            wordI = 9;
            pos   = 2;
            al.FireRule(pws[wordI], ref pos, conf);
            rTxt = pws[wordI].AllStringInfo();
            StringAssert.Matches(rTxt, new Regex(@"Rule: prec_2cons"));
            Assert.AreEqual(3, pos);
            Assert.AreEqual("ij", pws[wordI].Phonetique());

            // appartient
            wordI = 10;
            pos   = 6;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(7, pos);
            Assert.AreEqual("j", pws[wordI].Phonetique());

            // amplifient
            wordI = 11;
            pos   = 6;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(7, pos);
            Assert.AreEqual("i", pws[wordI].Phonetique());

            // glorifient
            wordI = 12;
            pos   = 4;
            al.FireRule(pws[wordI], ref pos, conf);
            Assert.AreEqual(5, pos);
            Assert.AreEqual("i", pws[wordI].Phonetique());
        }
コード例 #2
0
        public void TestAutomLetter()
        {
            AutomLetter al;
            int         pos;
            string      tstAL;
            string      rTxt;
            Regex       r;

            AutomLetter.InitAutomat();
            TheText.Init();

            // ****************************** TEST 1 **************************************
            tstAL = @"'h' : [['*'],
				{'*':[{},'_muet',1]}]"                ;
            pos   = 0;
            al    = new AutomLetter(tstAL, ref pos);
            Assert.AreEqual(']', tstAL[pos]);
            rTxt = al.ToString();
            r    = new Regex(@"letter: h\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"ruleOrder:.*\*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: \*\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"rf: \r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"prevRegex: \r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"follRegEx: \r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"isFirstLetter: False\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"p: _muet\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"incr: 1\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));

            // ****************************** TEST 2 **************************************
            tstAL = @"'f' : [['f','oeufs', '*'],
				{'f':[{'+':/f/i},'f',2],
				 'oeufs':[{'-':/(oeu|œu)/i,'+':/s/i},'_muet',1], // oeufs et boeufs
				 '*':[{},'f',1]}]"                ;
            pos   = 0;
            al    = new AutomLetter(tstAL, ref pos);
            Assert.AreEqual(']', tstAL[pos]);
            rTxt = al.ToString();
            r    = new Regex(@"letter: f\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"ruleOrder:.*f.*oeufs.*\*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));

            r = new Regex(@"RuleName: f\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: f.*rf: \r\n.*RuleName: oeufs", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: f.*prevRegex: \r\n.*RuleName: oeufs", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: f.*follRegEx: \^f\r\n.*RuleName: oeufs", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: f.*isFirstLetter: False\r\n.*RuleName: oeufs", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: f.*p: f\r\n.*RuleName: oeufs", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: f.*incr: 2\r\n.*RuleName: oeufs", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));

            r = new Regex(@"RuleName: oeufs\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: oeufs.*rf: \r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: oeufs.*prevRegex: \(oeu\|œu\)\$\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: oeufs.*follRegEx: \^s\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: oeufs.*isFirstLetter: False\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: oeufs.*p: _muet\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: oeufs.*incr: 1\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));

            r = new Regex(@"RuleName: \*\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: \*.*rf: \r\n", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: \*.*prevRegex: \r\n", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: \*.*follRegEx: \r\n", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: \*.*isFirstLetter: False\r\n", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: \*.*p: f\r\n", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: \*.*incr: 1\r\n", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));

            // ****************************** TEST 3 ******************************************************************
            tstAL = @"'i' : [['ing','n','m','nm','prec_2cons','lldeb','vill','mill','tranquille',
				'ill','@ill','@il','ll','ui','ient_1','ient_2','ie','i_voyelle', '*'],
				{'ing':[{'-':/[bcçdfghjklmnpqrstvwxz]/i,'+':/ng$/i},'i',1],
				'n':[{'+':/n[bcçdfghjklmpqrstvwxz]/i},'e_tilda',2],
				'm':[{'+':/m[bcçdfghjklnpqrstvwxz]/i},'e_tilda',2],
				'nm':[{'+':/[n|m]$/i},'e_tilda',2],
                'prec_2cons':[{'-':/[ptkcbdgfv][lr]/i},'i',1], // précédé de 2 consonnes (en position 3), doit apparaître comme [ij]
				'lldeb':[{'-':/^/i,'+':/ll/i},'i',1],
				'vill':[{'-':/v/i,'+':/ll/i},'i',1],
				'mill':[{'-':/m/i,'+':/ll/i},'i',1],
				'tranquille':[{'-':/tranqu/i,'+':/ll/i},'i',1],
				'ill':[{'+':/ll/i,'-':/[bcçdfghjklmnpqrstvwxz](u?)/i},'i',1], // précédé éventuellement d'un u et d'une consonne, donne le son [i]
				'@ill':[{'-':/[aeo]/i,'+':/ll/i},'j',3], // par défaut précédé d'une voyelle et suivi de 'll' donne le son [j]
				'@il':[{'-':/[aeou]/i,'+':/l(s?)$/i},'j',2], // par défaut précédé d'une voyelle et suivi de 'l' donne le son [j]
				'll':[{'+':/ll/i},'j',3], // par défaut avec ll donne le son [j]
				'ui':[{'-':/u/i,'+':/ent/i},'i',1], // essuient, appuient
				'ient_1':[this.Regle_ient,'i',1], // règle spécifique pour différencier les verbes du premier groupe 3ème pers pluriel
				'ient_2':[{'+':/ent(s)?$/i},'j',1], // si la règle précédente ne fonctionne pas
				'ie':[{'+':/e(s|nt)?$/i},'i',1], // mots terminés par -ie(s|nt)
				'i_voyelle':[{'+':/[aäâeéèêëoôöuù]/i},'j',1], // i suivi d'une voyelle donne [j]
				'*':[{},'i',1]}]"                ;
            pos   = 0;
            al    = new AutomLetter(tstAL, ref pos);
            Assert.AreEqual(']', tstAL[pos]);
            rTxt = al.ToString();
            r    = new Regex(@"letter: i\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"ruleOrder:.*ing.*n.*m.*nm.*prec_2cons.*lldeb.*vill.*mill.*tranquille.*ill.*@ill.*@il.*ll.*ui.*ient_1.*ient_2.*ie.*i_voyelle.*\*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));

            r = new Regex(@"RuleName: m\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: m.*rf: \r\n.*RuleName: nm", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: m.*prevRegex: \r\n.*RuleName: nm", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: m.*follRegEx: \^m\[bcçdfghjklnpqrstvwxz]\r\n.*RuleName: nm", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: m.*isFirstLetter: False\r\n.*RuleName: nm", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: m.*p: e_tilda\r\n.*RuleName: nm", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: m.*incr: 2\r\n.*RuleName: nm", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));

            r = new Regex(@"RuleName: tranquille\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: tranquille.*rf: \r\n.*RuleName: ill", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: tranquille.*prevRegex: tranqu\$\r\n.*RuleName: ill", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: tranquille.*follRegEx: \^ll\r\n.*RuleName: ill", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: tranquille.*isFirstLetter: False\r\n.*RuleName: ill", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: tranquille.*p: i\r\n.*RuleName: ill", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: tranquille.*incr: 1\r\n.*RuleName: ill", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));

            r = new Regex(@"RuleName: ient_1\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: ient_1.*rf: Regle_ient\r\n.*RuleName: ient_2", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: ient_1.*prevRegex: \r\n.*RuleName: ient_2", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: ient_1.*follRegEx: \r\n.*RuleName: ient_2", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: ient_1.*isFirstLetter: False\r\n.*RuleName: ient_2", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: ient_1.*p: i\r\n.*RuleName: ient_2", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: ient_1.*incr: 1\r\n.*RuleName: ient_2", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));

            r = new Regex(@"RuleName: i_voyelle\r\n");
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: i_voyelle.*rf: \r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: i_voyelle.*prevRegex: \r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: i_voyelle.*follRegEx: \^\[aäâeéèêëoôöuù]\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: i_voyelle.*isFirstLetter: False\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: i_voyelle.*p: j\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
            r = new Regex(@"RuleName: i_voyelle.*incr: 1\r\n.*RuleName: \*", RegexOptions.Singleline);
            Assert.IsTrue(r.IsMatch(rTxt));
        }