예제 #1
0
 /// <summary>
 /// Llegeix un fitxer com el generat pel web de tractament de propostes.
 /// Conté entrades en diversos formats: DIEC, topònims, antropònims, etc.
 /// </summary>
 private void LlegeixEntradesWeb(int mod, List<string> log, DateTime horaInici, Regles regles, 
     List<Identificador> identificadors, List<Entrada> entrades)
 {
     var idDiec = new IdentificadorDIEC("web", regles, null);
     var idToponims = new IdentificadorToponims("web", regles);
     var idAntroponims = new IdentificadorAntroponims("web", regles, null);
     var idDiversos = new IdentificadorDiversos("web", regles);
     AfegeixLiniaLog("Llegeix les propostes del web", horaInici, log);
     var sr = new StreamReader(DirEntrades("web.txt"), Encoding.Default);
     var linies = new List<string>();
     while (!sr.EndOfStream)
         linies.Add(sr.ReadLine());
     var temp = DirEntrades("_part_web.txt");
     // llista de topònims
     linies = TriaLinies(linies, temp, delegate(string lin)
     {
         Match m;
         if ((m = reTopo.Match(lin)).Success)
             return m.Groups["nom"].Value;
         else
             return "";
     });
     idToponims.LlegeixEntrades(temp, entrades, mod);
     // llista d'antropònims
     linies = TriaLinies(linies, temp, delegate(string lin)
     {
         Match m;
         if ((m = reAntro.Match(lin)).Success)
         {
             if (m.Groups["gen"].Value == "m")
                 return m.Groups["nom"].Value;
             else
             {
                 var nom = m.Groups["nom"].Value;
                 var p = new Paraula(nom);
                 return string.Format("{0}{1}", nom, p.PotApostrofar(true) ? " f" : "");
             }
         }
         else
             return "";
     });
     idAntroponims.LlegeixEntrades(temp, entrades, mod);
     // llista de diversos
     linies = TriaLinies(linies, temp, delegate(string lin)
     {
         Match m;
         if ((m = reDivers.Match(lin)).Success)
             return m.Groups["nom"].Value;
         else
             return "";
     });
     idDiversos.LlegeixEntrades(temp, entrades, mod);
     // la resta, té el format DIEC
     TriaLinies(linies, temp, lin => lin);
     idDiec.LlegeixEntrades(temp, entrades, mod);
     if (File.Exists(temp))
         File.Delete(temp);
     identificadors.Add(idToponims);
     identificadors.Add(idAntroponims);
     identificadors.Add(idDiversos);
     identificadors.Add(idDiec);
 }
예제 #2
0
 private void test_07(GrupTest arrel)
 {
     GrupTest grup = arrel.NouGrup("Processament de fitxers");
     Regles regles = CarregaRegles(true);
     List<Entrada> entrades = new List<Entrada>();
     Identificador identificador = null;
     grup.NouTest(@"Llegeix DIEC", delegate(RTest resultat)
     {
         identificador = new IdentificadorDIEC("DIEC", regles, DirEntrades("irregulars_diec.txt"));
         identificador.LlegeixEntrades(DirEntrades("diec.txt"), entrades, 100);
         identificador = new IdentificadorDIEC("DIEC2", regles, DirEntrades("irregulars_diec2.txt"));
         identificador.LlegeixEntrades(DirEntrades("diec2.txt"), entrades, 1);
         identificador = new IdentificadorDIEC("més paraules", regles, null);
         identificador.LlegeixEntrades(DirEntrades("mes_paraules.txt"), entrades, 1);
         identificador = new IdentificadorToponims("topònims", regles);
         identificador.LlegeixEntrades(DirEntrades("topònims.txt"), entrades, 1);
         identificador.LlegeixEntrades(DirEntrades("topònims_estrangers.txt"), entrades, 1);
         identificador = new IdentificadorGentilicis("gentilicis", regles, null);
         identificador.LlegeixEntrades(DirEntrades("gentilicis.txt"), entrades, 1);
         identificador.LlegeixEntrades(DirEntrades("gentilicis_estrangers.txt"), entrades, 1);
         identificador = new IdentificadorAntroponims("noms i llinatges", regles, null);
         identificador.LlegeixEntrades(DirEntrades("antropònims.txt"), entrades, 1);
         identificador.LlegeixEntrades(DirEntrades("llinatges.txt"), entrades, 1);
         identificador = new IdentificadorDiversos("diversos", regles);
         identificador.LlegeixEntrades(DirEntrades("abreviatures_duarte.txt"), entrades, 1);
         identificador.LlegeixEntrades(DirEntrades("marques.txt"), entrades, 1);
     });
     grup.NouTest(@"Genera .aff i .dic (Hunspell)", delegate(RTest resultat)
     {
         regles.GeneraAffDicHunspell(DirResultats("prova"), entrades, new Marques(true, "013"), Cat.Cmp);
         List<string> excSenseEmprar = identificador.ExcepcionsSenseEmprar();
         if (excSenseEmprar.Count != 0)
             foreach (string exc in excSenseEmprar)
                 resultat.Error("No emprada: {0}", exc);
     });
     grup.NouTest(@"Genera .aff i .dic (Hunspell i Myspell)", delegate(RTest resultat)
     {
         Identificador id = new IdentificadorDIEC("DIEC", regles, null);
         List<Entrada> ee = new List<Entrada>();
         ee.Add(id.IdentificaEntrada("ent=alçar^cat1=v. tr.^cat2=pron.^cat3=intr."));
         ee.Add(id.IdentificaEntrada("ent=cantar^cat1=v. tr.^cat2=intr."));
         ee.Add(id.IdentificaEntrada("ent=abellir^cat1=v. intr.^cat2=pron."));
         ee.Add(id.IdentificaEntrada("ent=adduir^cat1=v. tr."));
         ee.Add(id.IdentificaEntrada("ent=abatre^cat1=v. tr.^cat2=pron."));
         ee.Add(id.IdentificaEntrada("ent=anglés -esa^cat1=adj. i m. i f.^cat2=adj.^cat3=m.^mrc1=201"));
         regles.GeneraAffDicHunspell(DirResultats("prova"), ee, Marques.totes, Cat.Cmp);
         regles.GeneraAffDicMyspell(DirResultats("prova_myspell"), ee, Marques.totes, Cat.Cmp,
             IdentificadorCat.GetAfinaMyspell);
     });
     grup.NouTest(@"Versions de diccionaris", delegate(RTest resultat)
     {
         Marca marca201 = Marca.Una("201");
         Identificador id = new IdentificadorDIEC("DIEC", regles, null);
         List<Entrada> ee = new List<Entrada>();
         ee.Add(id.IdentificaEntrada("ent=alçar^cat1=v. tr.^cat2=pron.^cat3=intr."));
         ee.Add(id.IdentificaEntrada("ent=cantar^cat1=v. tr.^cat2=intr."));
         ee.Add(id.IdentificaEntrada("ent=abellir^cat1=v. intr.^cat2=pron."));
         ee.Add(id.IdentificaEntrada("ent=adduir^cat1=v. tr."));
         ee.Add(id.IdentificaEntrada("ent=abatre^cat1=v. tr.^cat2=pron."));
         ee.Add(id.IdentificaEntrada("ent=anglès -esa^cat1=adj. i m. i f.^cat2=adj.^cat3=m."));
         //ee.Add(id.IdentificaEntrada("ent=anglés -esa^cat1=adj. i m. i f.^cat2=adj.^cat3=m.^mrc1=201"));
         regles.GeneraAffDicHunspell(DirResultats("prova"), ee, new Marques(true, marca201), Cat.Cmp);
         List<String> llistaSense201 = regles.GeneraFormes(DirResultats("prova.dic"), new Marques(true, marca201), false);
         regles.GeneraAffDicHunspell(DirResultats("prova"), ee, Marques.totes, Cat.Cmp);
         List<String> llistaAmb201 = regles.GeneraFormes(DirResultats("prova.dic"), Marques.totes, false);
         string dif = Compara(llistaSense201, llistaAmb201, 100);
         resultat.Assert(dif == "+anglés +d'anglés +l'anglés", "Diferència inesperada entre llistaSense201 i llistaAmb201 ({0})", dif);
     });
     //grup.NouTest(@"Genera .aff i .dic (Myspell, II)", delegate(RTest resultat)
     //{
     //    regles.GeneraAffDic(DirResultats("prova_myspell"), entrades, new Marques(true, "013"), Entrada.Speller.MYSPELL, Cat.Cmp);
     //});
     //grup.NouTest(@"Genera les formes d'un diccionari", delegate(RTest resultat)
     //{
     //    List<string> formes = regles.GeneraFormes(DirResultats("prova.dic"), Marques.totes, false);
     //    resultat.Nota("S'han generat {0} formes", formes.Count);
     //});
 }
예제 #3
0
 private List<Entrada> LlegeixEntrades(int mod, List<string> log, DateTime horaInici, Regles regles, List<Identificador> identificadors)
 {
     List<Entrada> entrades = new List<Entrada>();
     LlegeixEntradesWeb(mod, log, horaInici, regles, identificadors, entrades);
     Identificador identificador = null;
     identificador = new IdentificadorDIEC("DIEC", regles, DirEntrades("irregulars_diec.txt"));
     AfegeixLiniaLog("Llegeix les entrades del DIEC", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("diec.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorDIEC("DIEC2", regles, DirEntrades("irregulars_diec2.txt"));
     AfegeixLiniaLog("Llegeix les entrades del DIEC2", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("diec2.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorDIEC("més paraules", regles, null);
     AfegeixLiniaLog("Llegeix més entrades tipus DIEC", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("mes_paraules.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorDIEC("Termcat", regles, DirEntrades("irregulars_termcat.txt"));
     AfegeixLiniaLog("Llegeix entrades del Termcat", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("termcat.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorToponims("topònims", regles);
     AfegeixLiniaLog("Llegeix els topònims", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("topònims.txt"), entrades, mod);
     identificador.LlegeixEntrades(DirEntrades("topònims_estrangers.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorGentilicis("gentilicis", regles, null);
     AfegeixLiniaLog("Llegeix els gentilicis", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("gentilicis.txt"), entrades, mod);
     identificador.LlegeixEntrades(DirEntrades("gentilicis_estrangers.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorAntroponims("noms i llinatges", regles, null);
     AfegeixLiniaLog("Llegeix els noms i els llinatges", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("antropònims.txt"), entrades, mod);
     identificador.LlegeixEntrades(DirEntrades("llinatges.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorDiversos("diversos", regles);
     AfegeixLiniaLog("Llegeix entrades diverses", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("abreviatures_duarte.txt"), entrades, mod);
     identificador.LlegeixEntrades(DirEntrades("marques.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorDIEC("AVL", regles, DirEntrades("irregulars_avl.txt"));
     AfegeixLiniaLog("Llegeix les entrades de l'AVL", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("avl.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorDIEC("AVL_gen", regles, DirEntrades("irregulars_avl_gen.txt"));
     AfegeixLiniaLog("Llegeix les entrades de l'AVL per a la versió general", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("avl_gen.txt"), entrades, mod);
     identificadors.Add(identificador);
     identificador = new IdentificadorDIEC("AVL_val", regles, DirEntrades("irregulars_avl_val.txt"));
     AfegeixLiniaLog("Llegeix les entrades de l'AVL per a la versió valenciana", horaInici, log);
     identificador.LlegeixEntrades(DirEntrades("avl_val.txt"), entrades, mod);
     identificadors.Add(identificador);
     return entrades;
 }