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)));
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("<v> {0}", modifanto.Vorto); sb.AppendJoin("", modifanto.AldonaĵajTipoj.Select((_, i) => $" <x<sub>{i}</sub>>")); 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, });
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); }