예제 #1
0
        public static IEnumerable <string> KonvertiEnTimeranTxt(IEnumerable <string> eniro)
        {
            return(eniro.Select(vico => vico.Split(' ').Select(vorto => {
                var malinflektita = Malinflektado.tuteMalinflekti(Malinflektado.testaVorto(vorto));
                if (malinflektita.IsError)
                {
                    throw new InvalidOperationException(malinflektita.ErrorValue.Item2);
                }

                var gramatikajLiteroj = malinflektita.ResultValue.InflekcioŜtupoj.Select(ŝtupo => {
                    var literoNomo = ŝtupo.IsBazo
                  ? ((Sintaksanalizilo.MalinflektaŜtupo.Bazo)ŝtupo).Item1.ToString()
                  : ((Sintaksanalizilo.MalinflektaŜtupo.Nebazo)ŝtupo).Item2.ToString();
                    if (literoNomo is "NombrigeblaKlaso" or "NenombrigeblaKlaso")
                    {
                        return "klaso";
                    }

                    return char.ToLowerInvariant(literoNomo[0]) + literoNomo[1..];
                }).Reverse().ToImmutableList();
                if (gramatikajLiteroj.First() == "klaso" &&
                    gramatikajLiteroj.Count > 1)
                {
                    gramatikajLiteroj = gramatikajLiteroj.RemoveAt(0);
                }

                var silaboj = Malinflektado.dividi(
                    Malinflektado.bazoDe(malinflektita.ResultValue.BazaVorto.ToLowerInvariant()),
                    false);

                if (silaboj.IsError)
                {
                    throw new Exception(silaboj.ErrorValue);
                }

                var partoj = gramatikajLiteroj.First() == "fremdaVorto"
               ? new List <string> {
                    "[",
                    string.Join(' ', silaboj.ResultValue),
                }
               : new List <string> {
                    string.Join(' ', silaboj.ResultValue),
                };
                if (gramatikajLiteroj.First() == "fremdaVorto")
                {
                    partoj.Add("]");
                }
                else
                {
                    partoj.AddRange(gramatikajLiteroj);
                }

                return partoj;
            }).SelectMany(v => v)).Select(vortoj => string.Join(' ', vortoj)));
예제 #2
0
        public VortoRespondo?Vorto(string vorto)
        {
            var respondo = Indekso.GetValueOrDefault(vorto, null);

            if (respondo == null)
            {
                return(null);
            }

            var vorttipo = Sintaksanalizilo.infinitivoNomoDe(vorto).Value;
            var silaboj  = Malinflektado.dividiKunFinaĵo(vorto);

            string?sintakso = null;

            if (respondo is Modifanto modifanto)
            {
                var sb = new StringBuilder(respondo.Vorto.Length);
                sb.AppendFormat("&lt;v&gt; {0}", modifanto.Vorto);
                sb.AppendJoin("", modifanto.AldonaĵajTipoj.Select((_, i) => $" &lt;x<sub>{i}</sub>&gt;"));
                sintakso = sb.ToString();
            }

            if (silaboj.IsError)
            {
                throw new Exception(silaboj.ErrorValue);
            }

            var inflekcioj = Malinflektado.iujInflekciojDe(vorto);

            return(new VortoRespondo(respondo.Vorto)
            {
                Noto = respondo.Noto != null
               ? string.Format(respondo.Noto, "a<sub>1</sub>", "a<sub>2</sub>", "a<sub>3</sub>")
               : null,
                Radikoj = respondo.Radikoj.ToList(),
                Signifo = respondo.Signifo,
                Vorttipo = vorttipo,
                Silaboj = silaboj.ResultValue,
                Gloso = respondo.Gloso,
                InflektitajFormoj = FSharpOption <FSharpMap <Vorttipo.Inflekcio, string> > .get_IsSome(inflekcioj)
               ? inflekcioj.Value.Select(p => (p.Key.ToString(), p.Value))
                                    .ToDictionary(p => p.Item1, p => p.Value)
               : null,
                Ujoj = respondo is Verbo verbo ? verbo.ArgumentajNotoj : null,
                FrazaSignifo = respondo is Verbo verbo2
               ? string.Format(verbo2.FrazaSignifo, "a<sub>1</sub>", "a<sub>2</sub>", "a<sub>3</sub>")
               : null,
                Sintakso = sintakso,
                ModifeblajVorttipoj = respondo is Modifanto m?m.ModifeblajTipoj.Select(PriskribiVorttipanMallongaĵon) : null,
                                          AldonaĵajInflekcioj = respondo is Modifanto m2?m2.AldonaĵajTipoj.Select(PriskribiVorttipanMallongaĵon) : null,
            });
예제 #3
0
 private Vortaro(IImmutableSet <VortaraVorto> vortoj, IImmutableSet <NovaKategorio> kategorioj)
 {
     Indekso     = vortoj.ToImmutableDictionary(v => v.Vorto, v => v);
     BazoIndekso = vortoj.ToImmutableDictionary(v => Malinflektado.bazoDe(v.Vorto), v => v);
     Kategorioj  = kategorioj.ToImmutableDictionary(k => k.Nomo, k => k);
 }